huginn_bigcommerce_order_agent 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37b3f2f6cb0a72462c5ac574ceca9c2c43dc62f73141c36d4f9fded17baa91e9
4
- data.tar.gz: d366ade42a3d0eba1cc01f164dc6a2b88f5d9a61f2ee4537706e5fc716179202
3
+ metadata.gz: cabec8912614fcbefdb3f4b24312d2f5fba6efb291a35aba2cc42056d1652975
4
+ data.tar.gz: a45e78bf2dc55451a236bda4eca4e25d27316964661990576d1654e751878441
5
5
  SHA512:
6
- metadata.gz: deaa0ce3da5b2ffe1acf67b1fdd722016905d2f0382ab01a9a5302518552e20c63d17bb512619242b02695313e237dc39a61ffc61fecefc4bb7acecc1a588d7e
7
- data.tar.gz: 9c500ed4653260221828b4ea07557cfbf04e4ed1868ec3763a23f44bd11363e7d7f1c1f75ad9f2fb36171f19ab084c2e072b721c92bfa02e8befa822a8bec2ba
6
+ metadata.gz: 31af98d99c56f1e923bb55d1fd6022b5d408988169929faa3526fcb8265375d90ed93477ee08d84fbfaa2eab93ca638109a33717fc0b3f2a86b1dce09de65aa7
7
+ data.tar.gz: 50f36319afbefee1f094a3ed7c3a7d1a39ef6abb082e5e83b690a80bc4e866c2db7ac47059f33b3529d5b0bf694e1b8407c55eea427df29f8aee3ada6e213583
@@ -12,7 +12,14 @@ module BigcommerceOrderAgent
12
12
  return response.body['data'][0]
13
13
  rescue Faraday::Error::ClientError => e
14
14
  raise BigcommerceApiError.new(
15
- 'get order', "Failed to get order #{id}", { order_id: id }, e
15
+ e.response[:status],
16
+ 'get order customer',
17
+ "Failed to get order customer #{id}",
18
+ id,
19
+ {
20
+ errors: JSON.parse(e.response[:body])['errors']
21
+ },
22
+ e
16
23
  )
17
24
  end
18
25
  end
data/lib/client/order.rb CHANGED
@@ -1,6 +1,10 @@
1
+ require 'carmen'
2
+
1
3
  module BigcommerceOrderAgent
2
4
  module Client
3
5
  class Order < AbstractClient
6
+ include Carmen
7
+
4
8
  @uri_base = ':api_version/orders/:order_id'
5
9
 
6
10
  def get(id, params = {})
@@ -10,7 +14,16 @@ module BigcommerceOrderAgent
10
14
  response = client.get(uri({ order_id: id }), params)
11
15
  order = response.body
12
16
  rescue Faraday::Error => e
13
- raise BigcommerceApiError.new('get order', { order_id: id }, e)
17
+ raise BigcommerceApiError.new(
18
+ e.response[:status],
19
+ 'get order',
20
+ "Failed to get order #{id}",
21
+ id,
22
+ {
23
+ errors: JSON.parse(e.response[:body])['errors']
24
+ },
25
+ e
26
+ )
14
27
  end
15
28
 
16
29
  if order.present?
@@ -20,6 +33,8 @@ module BigcommerceOrderAgent
20
33
  order[:transactions] = get_transactions(id)
21
34
  order[:shipments] = get_shipments(id)
22
35
 
36
+ order['billing_address']['state_code'] = get_region_code(order['billing_address'])
37
+
23
38
  transactions = get_transactions(id)
24
39
  end
25
40
 
@@ -34,7 +49,16 @@ module BigcommerceOrderAgent
34
49
  response = client.get(uri({ order_id: order_id }, 'products'), params)
35
50
  return response.body
36
51
  rescue Faraday::Error => e
37
- raise BigcommerceApiError.new('get order products', { order_id: order_id }, e)
52
+ raise BigcommerceApiError.new(
53
+ e.response[:status],
54
+ 'get order products',
55
+ "Failed to get order products #{order_id}",
56
+ order_id,
57
+ {
58
+ errors: JSON.parse(e.response[:body])['errors']
59
+ },
60
+ e
61
+ )
38
62
  end
39
63
  end
40
64
 
@@ -42,9 +66,25 @@ module BigcommerceOrderAgent
42
66
  def get_shipping_addresses(order_id, params = {})
43
67
  begin
44
68
  response = client.get(uri({ order_id: order_id }, 'shipping_addresses'), params)
45
- return response.body
69
+
70
+ addresses = response.body
71
+
72
+ addresses.each do |addr|
73
+ addr['state_code'] = get_region_code(addr)
74
+ end
75
+
76
+ return addresses
46
77
  rescue Faraday::Error => e
47
- raise BigcommerceApiError.new('get order shipping address', { order_id: order_id }, e)
78
+ raise BigcommerceApiError.new(
79
+ e.response[:status],
80
+ 'get order shipping address',
81
+ "Failed to get order shipping address #{order_id}",
82
+ order_id,
83
+ {
84
+ errors: JSON.parse(e.response[:body])['errors']
85
+ },
86
+ e
87
+ )
48
88
  end
49
89
  end
50
90
 
@@ -54,7 +94,16 @@ module BigcommerceOrderAgent
54
94
  response = client.get(uri({ order_id: order_id }, 'shipments'), params)
55
95
  return response.body
56
96
  rescue Faraday::Error => e
57
- raise BigcommerceApiError.new('get order shipments', { order_id: order_id }, e)
97
+ raise BigcommerceApiError.new(
98
+ e.response[:status],
99
+ 'get order shipments',
100
+ "Failed to get order shipments #{order_id}",
101
+ order_id,
102
+ {
103
+ errors: JSON.parse(e.response[:body])['errors']
104
+ },
105
+ e
106
+ )
58
107
  end
59
108
  end
60
109
 
@@ -64,7 +113,15 @@ module BigcommerceOrderAgent
64
113
  response = client.get(uri({ order_id: order_id }, 'coupons'), params)
65
114
  return response.body
66
115
  rescue Faraday::Error => e
67
- raise BigcommerceApiError.new('get order coupons', { order_id: order_id }, e
116
+ raise BigcommerceApiError.new(
117
+ e.response[:status],
118
+ 'get order coupons',
119
+ "Failed to get order coupons #{order_id}",
120
+ order_id,
121
+ {
122
+ errors: JSON.parse(e.response[:body])['errors']
123
+ },
124
+ e
68
125
  )
69
126
  end
70
127
  end
@@ -75,9 +132,26 @@ module BigcommerceOrderAgent
75
132
  response = client.get(uri({ api_version: 'v3', order_id: order_id }, 'transactions'), params)
76
133
  return response.body['data']
77
134
  rescue Faraday::Error => e
78
- raise BigcommerceApiError.new('get order transactions', { order_id: order_id }, e)
135
+ raise BigcommerceApiError.new(
136
+ e.response[:status],
137
+ 'get order transactions',
138
+ "Failed to get order transactions #{order_id}",
139
+ order_id,
140
+ {
141
+ errors: JSON.parse(e.response[:body])['errors']
142
+ },
143
+ e
144
+ )
79
145
  end
80
146
  end
147
+
148
+ # Returns the region (state) code for the provided address
149
+ def get_region_code(address)
150
+ country = Country.named(address['country'])
151
+ state = country.subregions.named(address['state'])
152
+
153
+ return state.code
154
+ end
81
155
  end
82
156
  end
83
157
  end
@@ -1,10 +1,13 @@
1
1
  class BigcommerceApiError < StandardError
2
- attr_reader :scope, :data, :original_error
2
+ attr_reader :status, :scope, :identifier, :data, :original_error
3
3
 
4
- def initialize(scope, data, original_error)
4
+ def initialize(status, scope, message, identifier, data, original_error)
5
+ @status = status
5
6
  @scope = scope
7
+ @identifier = identifier
6
8
  @data = data
7
9
  @original_error = original_error
8
- super(original_error.message)
10
+
11
+ super(message)
9
12
  end
10
13
  end
@@ -148,14 +148,16 @@ module Agents
148
148
  )
149
149
 
150
150
  rescue BigcommerceApiError => e
151
- faraday_error = e.original_error
152
-
153
- create_event payload: new_event.merge(
154
- status: faraday_error.response[:status],
155
- scope: e.scope,
156
- response: faraday_error.response[:body],
157
- request_data: e.data,
158
- )
151
+ emit_error(e)
152
+ rescue => e
153
+ emit_error(BigcommerceApiError.new(
154
+ 500,
155
+ 'get order by id',
156
+ e.message,
157
+ order_id,
158
+ { order_id: order_id },
159
+ e
160
+ ))
159
161
  end
160
162
 
161
163
  end
@@ -176,5 +178,22 @@ module Agents
176
178
  )
177
179
  end
178
180
 
181
+ # Takes a BigCommerceProductError and emits the underlying data as an error payload
182
+ # to assist with error reporting. It is recommended that these errors be consolidated
183
+ # with a Digest Agent and reported as a summary.
184
+ def emit_error(error)
185
+ payload = {
186
+ status: error.status,
187
+ message: error.message,
188
+ scope: error.scope,
189
+ identifier: error.identifier,
190
+ data: error.data,
191
+ }
192
+ Rails.logger.debug({
193
+ error: payload,
194
+ trace: error.backtrace
195
+ })
196
+ create_event({ payload: payload })
197
+ end
179
198
  end
180
199
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: huginn_bigcommerce_order_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 5 Stones
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-24 00:00:00.000000000 Z
11
+ date: 2021-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler