22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/easypost/util.rb', line 22
def self.convert_to_easypost_object(response, api_key, parent=nil, name=nil)
types = {
'Address' => EasyPost::Address,
'Batch' => EasyPost::Batch,
'CarrierAccount' => EasyPost::CarrierAccount,
'CustomsInfo' => EasyPost::CustomsInfo,
'CustomsItem' => EasyPost::CustomsItem,
'Event' => EasyPost::Event,
'Insurance' => EasyPost::Insurance,
'Order' => EasyPost::Order,
'Parcel' => EasyPost::Parcel,
'PaymentLogReport' => EasyPost::Report,
'Pickup' => EasyPost::Pickup,
'PickupRate' => EasyPost::PickupRate,
'PostageLabel' => EasyPost::PostageLabel,
'Printer' => EasyPost::Printer,
'PrintJob' => EasyPost::PrintJob,
'Rate' => EasyPost::Rate,
'Refund' => EasyPost::Refund,
'RefundReport' => EasyPost::Report,
'Report' => EasyPost::Report,
'ScanForm' => EasyPost::ScanForm,
'Shipment' => EasyPost::Shipment,
'ShipmentInvoiceReport' => EasyPost::Report,
'ShipmentReport' => EasyPost::Report,
'Tracker' => EasyPost::Tracker,
'TrackerReport' => EasyPost::Report,
'User' => EasyPost::User,
'Webhook' => EasyPost::Webhook
}
prefixes = {
'adr' => EasyPost::Address,
'batch' => EasyPost::Batch,
'ca' => EasyPost::CarrierAccount,
'cstinfo' => EasyPost::CustomsInfo,
'cstitem' => EasyPost::CustomsItem,
'evt' => EasyPost::Event,
'hook' => EasyPost::Webhook,
'ins' => EasyPost::Insurance,
'order' => EasyPost::Order,
'pickup' => EasyPost::Pickup,
'pickuprate' => EasyPost::PickupRate,
'pl' => EasyPost::PostageLabel,
'plrep' => EasyPost::Report,
'prcl' => EasyPost::Parcel,
'printer' => EasyPost::Printer,
'printjob' => EasyPost::PrintJob,
'rate' => EasyPost::Rate,
'refrep' => EasyPost::Report,
'rfnd' => EasyPost::Refund,
'sf' => EasyPost::ScanForm,
'shp' => EasyPost::Shipment,
'shpinvrep' => EasyPost::Report,
'shprep' => EasyPost::Report,
'trk' => EasyPost::Tracker,
'trkrep' => EasyPost::Report,
'user' => EasyPost::User
}
case response
when Array
return response.map { |i| convert_to_easypost_object(i, api_key, parent) }
when Hash
if cls_name = response[:object]
cls = types[cls_name]
elsif response[:id]
if response[:id].index('_').nil?
cls = EasyPost::EasyPostObject
elsif cls_prefix = response[:id][0..response[:id].index('_')]
cls = prefixes[cls_prefix[0..-2]]
end
elsif response['id']
if response['id'].index('_').nil?
cls = EasyPost::EasyPostObject
elsif cls_prefix = response['id'][0..response['id'].index('_')]
cls = prefixes[cls_prefix[0..-2]]
end
end
cls ||= EasyPost::EasyPostObject
return cls.construct_from(response, api_key, parent, name)
else
return response
end
end
|