mws-orders 0.2.0 → 0.4.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 +5 -5
- data/README.md +13 -9
- data/lib/mws/orders/collection.rb +10 -10
- data/lib/mws/orders/document.rb +4 -2
- data/lib/mws/orders/entity.rb +13 -10
- data/lib/mws/orders/invoice_data.rb +7 -5
- data/lib/mws/orders/message.rb +17 -0
- data/lib/mws/orders/order.rb +40 -32
- data/lib/mws/orders/order_item.rb +33 -27
- data/lib/mws/orders/order_items.rb +7 -5
- data/lib/mws/orders/orders.rb +7 -5
- data/lib/mws/orders/parser.rb +49 -24
- data/lib/mws/orders/payment_execution_detail.rb +8 -4
- data/lib/mws/orders/payment_execution_detail_item.rb +5 -3
- data/lib/mws/orders/service_status.rb +8 -6
- data/lib/mws/orders/shipping_address.rb +9 -7
- data/lib/mws/orders/tokenable.rb +3 -1
- data/lib/mws/orders/version.rb +3 -1
- data/test/fixtures/orders.xml +4 -1
- data/test/mws/orders/test_entity.rb +44 -42
- data/test/mws/orders/test_message.rb +18 -0
- data/test/mws/orders/test_order.rb +16 -2
- data/test/mws/orders/test_order_item.rb +8 -2
- data/test/mws/orders/test_order_items.rb +4 -2
- data/test/mws/orders/test_orders.rb +4 -2
- data/test/mws/orders/test_parser.rb +3 -1
- data/test/mws/orders/test_payment_execution_detail.rb +6 -2
- data/test/mws/orders/test_payment_execution_detail_item.rb +5 -2
- data/test/mws/orders/test_service_status.rb +6 -2
- data/test/mws/orders/test_shipping_address.rb +4 -2
- data/test/mws/orders/test_tokenable.rb +8 -6
- data/test/test_helper.rb +12 -9
- metadata +70 -33
- data/lib/mws-orders.rb +0 -2
- data/lib/mws/orders/service_status_message.rb +0 -15
- data/test/integration/test_mws_orders.rb +0 -27
- data/test/mws/orders/test_service_status_message.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5024482ae6bb34ce7a6066333ab17e2bad0c8cd98330ef2d17710c843114c1bb
|
4
|
+
data.tar.gz: 2d2235a1ccd194a58cfb162d4cd89990e3878a232c62b0c7325f30d595dd0cf4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0e92ba47bfc2feb5513324f22a60abd078528c327e1be3e22a0d27940f7f45d5917e3708cbda335967d3cb2cbffe9364a4677f359af01d698c897d6c4b52883
|
7
|
+
data.tar.gz: 75677d6f12e108daf1331ba3d18b5d2c54717abd79a85999e68545a13f18773a8804577d5d063710e2fdba7a6b8a151d4b3035f795774f9c3d55bf86d43b9747
|
data/README.md
CHANGED
@@ -11,18 +11,20 @@ To use Amazon MWS, you must have an eligible seller account.
|
|
11
11
|
Create a client:
|
12
12
|
|
13
13
|
```ruby
|
14
|
-
require
|
15
|
-
client = MWS.orders
|
14
|
+
require 'mws/orders/parser'
|
15
|
+
client = MWS.orders(marketplace: 'ATVPDKIKX0DER',
|
16
|
+
merchant_id: '123')
|
16
17
|
```
|
17
18
|
|
18
|
-
Set up credentials [when instantiating or with environment variables](https://github.com/hakanensari/peddler#
|
19
|
+
Set up credentials [when instantiating or with environment variables](https://github.com/hakanensari/peddler#usage).
|
19
20
|
|
20
21
|
### Orders
|
21
22
|
|
22
23
|
List orders created or updated during a time frame you specify:
|
23
24
|
|
24
25
|
```ruby
|
25
|
-
|
26
|
+
response = client.list_orders(created_after: 1.month.ago)
|
27
|
+
orders = response.parse
|
26
28
|
puts orders.count # => 100
|
27
29
|
puts orders.first # => #<MWS::Orders::Order amazon_order_id="123...
|
28
30
|
)
|
@@ -31,13 +33,14 @@ puts orders.first # => #<MWS::Orders::Order amazon_order_id="123...
|
|
31
33
|
List the next page of orders:
|
32
34
|
|
33
35
|
```ruby
|
34
|
-
client.list_orders_by_next_token(orders.next_token)
|
36
|
+
client.list_orders_by_next_token(orders.next_token).parse
|
35
37
|
```
|
36
38
|
|
37
39
|
Get one or more orders based on their order numbers:
|
38
40
|
|
39
41
|
```ruby
|
40
|
-
|
42
|
+
response = client.get_order('123-1234567-1234567')
|
43
|
+
order = response.parse
|
41
44
|
puts order # => #<MWS::Orders::Order amazon_order_id="123...
|
42
45
|
```
|
43
46
|
|
@@ -46,13 +49,14 @@ puts order # => #<MWS::Orders::Order amazon_order_id="123...
|
|
46
49
|
List order items:
|
47
50
|
|
48
51
|
```ruby
|
49
|
-
|
52
|
+
response = client.list_order_items('123-1234567-1234567')
|
53
|
+
order_items = response.parse
|
50
54
|
```
|
51
55
|
|
52
56
|
List the next page of order items:
|
53
57
|
|
54
58
|
```ruby
|
55
|
-
client.list_order_items_by_next_token
|
59
|
+
client.list_order_items_by_next_token.parse
|
56
60
|
```
|
57
61
|
|
58
62
|
Orders and order items are represented by POROs that map one on one to the attributes returned by the API.
|
@@ -62,5 +66,5 @@ Orders and order items are represented by POROs that map one on one to the attri
|
|
62
66
|
Check the operational status of the API:
|
63
67
|
|
64
68
|
```ruby
|
65
|
-
client.get_service_status
|
69
|
+
client.get_service_status.parse
|
66
70
|
```
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mws/orders/document'
|
2
4
|
|
3
5
|
module MWS
|
4
6
|
module Orders
|
@@ -10,20 +12,18 @@ module MWS
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def empty?
|
13
|
-
count
|
15
|
+
count.zero?
|
16
|
+
end
|
17
|
+
|
18
|
+
def attributes
|
19
|
+
map(&:attributes)
|
14
20
|
end
|
15
21
|
|
16
22
|
def inspect
|
17
|
-
"#<#{self.class} #{
|
18
|
-
if count > 3
|
19
|
-
"[#{take(3).map(&:inspect).join(', ')}...]"
|
20
|
-
else
|
21
|
-
"[#{map(&:inspect).join(', ')}]"
|
22
|
-
end
|
23
|
-
}>"
|
23
|
+
"#<#{self.class.name} #{to_a}>"
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
alias to_s inspect
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
data/lib/mws/orders/document.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MWS
|
2
4
|
module Orders
|
3
5
|
class Document
|
@@ -15,9 +17,9 @@ module MWS
|
|
15
17
|
|
16
18
|
def add_namespace(path)
|
17
19
|
path
|
18
|
-
.split(
|
20
|
+
.split('/')
|
19
21
|
.map { |attr| "xmlns:#{attr}" }
|
20
|
-
.join(
|
22
|
+
.join('/')
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
data/lib/mws/orders/entity.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cgi'
|
4
|
+
require 'time'
|
5
|
+
require 'money'
|
6
|
+
require 'structure'
|
7
|
+
require 'mws/orders/document'
|
6
8
|
|
7
9
|
module MWS
|
8
10
|
module Orders
|
@@ -11,19 +13,20 @@ module MWS
|
|
11
13
|
|
12
14
|
def float_at_xpath(path)
|
13
15
|
text = text_at_xpath(path)
|
14
|
-
text
|
16
|
+
text&.to_f
|
15
17
|
end
|
16
18
|
|
17
19
|
def integer_at_xpath(path)
|
18
20
|
text = text_at_xpath(path)
|
19
|
-
text
|
21
|
+
text&.to_i
|
20
22
|
end
|
21
23
|
|
22
24
|
def money_at_xpath(path)
|
23
|
-
|
25
|
+
amount = float_at_xpath("#{path}/Amount")
|
26
|
+
return unless amount
|
24
27
|
|
25
28
|
currency_code = text_at_xpath("#{path}/CurrencyCode")
|
26
|
-
amount
|
29
|
+
amount *= 100 unless currency_code == 'JPY'
|
27
30
|
|
28
31
|
Money.new(amount, currency_code)
|
29
32
|
end
|
@@ -35,7 +38,7 @@ module MWS
|
|
35
38
|
|
36
39
|
def text_at_xpath(path)
|
37
40
|
node = xpath(path).first
|
38
|
-
node
|
41
|
+
node&.text&.strip
|
39
42
|
end
|
40
43
|
end
|
41
44
|
end
|
@@ -1,22 +1,24 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mws/orders/entity'
|
2
4
|
|
3
5
|
module MWS
|
4
6
|
module Orders
|
5
7
|
class InvoiceData < Entity
|
6
8
|
attribute(:invoice_requirement) do
|
7
|
-
text_at_xpath(
|
9
|
+
text_at_xpath('InvoiceRequirement')
|
8
10
|
end
|
9
11
|
|
10
12
|
attribute(:buyer_selected_invoice_category) do
|
11
|
-
text_at_xpath(
|
13
|
+
text_at_xpath('BuyerSelectedInvoiceCategory')
|
12
14
|
end
|
13
15
|
|
14
16
|
attribute(:invoice_title) do
|
15
|
-
text_at_xpath(
|
17
|
+
text_at_xpath('InvoiceTitle')
|
16
18
|
end
|
17
19
|
|
18
20
|
attribute(:invoice_information) do
|
19
|
-
text_at_xpath(
|
21
|
+
text_at_xpath('InvoiceInformation')
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mws/orders/entity'
|
4
|
+
|
5
|
+
module MWS
|
6
|
+
module Orders
|
7
|
+
class Message < Entity
|
8
|
+
attribute(:locale) do
|
9
|
+
text_at_xpath('Locale')
|
10
|
+
end
|
11
|
+
|
12
|
+
attribute(:text) do
|
13
|
+
text_at_xpath('Text')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/mws/orders/order.rb
CHANGED
@@ -1,112 +1,120 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mws/orders/entity'
|
4
|
+
require 'mws/orders/shipping_address'
|
5
|
+
require 'mws/orders/payment_execution_detail'
|
4
6
|
|
5
7
|
module MWS
|
6
8
|
module Orders
|
7
9
|
class Order < Entity
|
8
10
|
attribute(:amazon_order_id) do
|
9
|
-
text_at_xpath(
|
11
|
+
text_at_xpath('AmazonOrderId')
|
10
12
|
end
|
11
13
|
|
12
14
|
attribute(:seller_order_id) do
|
13
|
-
text_at_xpath(
|
15
|
+
text_at_xpath('SellerOrderId')
|
14
16
|
end
|
15
17
|
|
16
18
|
attribute(:purchased_at) do
|
17
|
-
time_at_xpath(
|
19
|
+
time_at_xpath('PurchaseDate')
|
18
20
|
end
|
19
21
|
|
20
22
|
attribute(:last_updated_at) do
|
21
|
-
time_at_xpath(
|
23
|
+
time_at_xpath('LastUpdateDate')
|
22
24
|
end
|
23
25
|
|
24
26
|
attribute(:status) do
|
25
|
-
text_at_xpath(
|
27
|
+
text_at_xpath('OrderStatus')
|
26
28
|
end
|
27
29
|
|
28
30
|
attribute(:fulfillment_channel) do
|
29
|
-
text_at_xpath(
|
31
|
+
text_at_xpath('FulfillmentChannel')
|
30
32
|
end
|
31
33
|
|
32
34
|
attribute(:sales_channel) do
|
33
|
-
text_at_xpath(
|
35
|
+
text_at_xpath('SalesChannel')
|
34
36
|
end
|
35
37
|
|
36
38
|
attribute(:order_channel) do
|
37
|
-
text_at_xpath(
|
39
|
+
text_at_xpath('OrderChannel')
|
38
40
|
end
|
39
41
|
|
40
42
|
attribute(:ship_service_level) do
|
41
|
-
text_at_xpath(
|
43
|
+
text_at_xpath('ShipServiceLevel')
|
42
44
|
end
|
43
45
|
|
44
46
|
attribute(:shipping_address) do
|
45
|
-
|
46
|
-
|
47
|
-
end
|
47
|
+
node = xpath('ShippingAddress').first
|
48
|
+
ShippingAddress.new(node) if node
|
48
49
|
end
|
49
50
|
|
50
51
|
attribute(:total) do
|
51
|
-
money_at_xpath(
|
52
|
+
money_at_xpath('OrderTotal')
|
52
53
|
end
|
53
54
|
|
54
55
|
attribute(:number_of_items_shipped) do
|
55
|
-
integer_at_xpath(
|
56
|
+
integer_at_xpath('NumberOfItemsShipped')
|
56
57
|
end
|
57
58
|
|
58
59
|
attribute(:number_of_items_unshipped) do
|
59
|
-
integer_at_xpath(
|
60
|
+
integer_at_xpath('NumberOfItemsUnshipped')
|
60
61
|
end
|
61
62
|
|
62
63
|
attribute(:payment_execution_detail) do
|
63
|
-
|
64
|
-
|
65
|
-
end
|
64
|
+
node = xpath('PaymentExecutionDetail').first
|
65
|
+
PaymentExecutionDetail.new(node) if node
|
66
66
|
end
|
67
67
|
|
68
68
|
attribute(:payment_method) do
|
69
|
-
text_at_xpath(
|
69
|
+
text_at_xpath('PaymentMethod')
|
70
70
|
end
|
71
71
|
|
72
72
|
attribute(:marketplace_id) do
|
73
|
-
text_at_xpath(
|
73
|
+
text_at_xpath('MarketplaceId')
|
74
74
|
end
|
75
75
|
|
76
76
|
attribute(:buyer_name) do
|
77
|
-
text_at_xpath(
|
77
|
+
text_at_xpath('BuyerName')
|
78
78
|
end
|
79
79
|
|
80
80
|
attribute(:buyer_email) do
|
81
|
-
text_at_xpath(
|
81
|
+
text_at_xpath('BuyerEmail')
|
82
82
|
end
|
83
83
|
|
84
84
|
attribute(:shipment_service_level_category) do
|
85
|
-
text_at_xpath(
|
85
|
+
text_at_xpath('ShipmentServiceLevelCategory')
|
86
86
|
end
|
87
87
|
|
88
88
|
attribute(:cba_displayable_shipping_label) do
|
89
|
-
text_at_xpath(
|
89
|
+
text_at_xpath('CbaDisplayableShippingLabel')
|
90
90
|
end
|
91
91
|
|
92
92
|
attribute(:shipped_by_amazon_tfm) do
|
93
|
-
text_at_xpath(
|
93
|
+
text_at_xpath('ShippedByAmazonTFM')
|
94
94
|
end
|
95
95
|
|
96
96
|
attribute(:tfm_shipment_status) do
|
97
|
-
text_at_xpath(
|
97
|
+
text_at_xpath('TFMShipmentStatus')
|
98
98
|
end
|
99
99
|
|
100
100
|
attribute(:type) do
|
101
|
-
text_at_xpath(
|
101
|
+
text_at_xpath('OrderType')
|
102
102
|
end
|
103
103
|
|
104
104
|
attribute(:earliest_shipped_at) do
|
105
|
-
time_at_xpath(
|
105
|
+
time_at_xpath('EarliestShipDate')
|
106
106
|
end
|
107
107
|
|
108
108
|
attribute(:latest_shipped_at) do
|
109
|
-
time_at_xpath(
|
109
|
+
time_at_xpath('LatestShipDate')
|
110
|
+
end
|
111
|
+
|
112
|
+
attribute(:latest_delivered_at) do
|
113
|
+
time_at_xpath('LatestDeliveryDate')
|
114
|
+
end
|
115
|
+
|
116
|
+
def to_s
|
117
|
+
amazon_order_id
|
110
118
|
end
|
111
119
|
end
|
112
120
|
end
|
@@ -1,107 +1,113 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mws/orders/entity'
|
4
|
+
require 'mws/orders/invoice_data'
|
3
5
|
|
4
6
|
module MWS
|
5
7
|
module Orders
|
6
8
|
class OrderItem < Entity
|
7
9
|
attribute(:asin) do
|
8
|
-
text_at_xpath(
|
10
|
+
text_at_xpath('ASIN')
|
9
11
|
end
|
10
12
|
|
11
13
|
attribute(:seller_sku) do
|
12
|
-
text_at_xpath(
|
14
|
+
text_at_xpath('SellerSKU')
|
13
15
|
end
|
14
16
|
|
15
17
|
attribute(:order_item_id) do
|
16
|
-
text_at_xpath(
|
18
|
+
text_at_xpath('OrderItemId')
|
17
19
|
end
|
18
20
|
|
19
21
|
attribute(:title) do
|
20
|
-
text_at_xpath(
|
22
|
+
text_at_xpath('Title')
|
21
23
|
end
|
22
24
|
|
23
25
|
attribute(:quantity_ordered) do
|
24
|
-
integer_at_xpath(
|
26
|
+
integer_at_xpath('QuantityOrdered')
|
25
27
|
end
|
26
28
|
|
27
29
|
attribute(:quantity_shipped) do
|
28
|
-
integer_at_xpath(
|
30
|
+
integer_at_xpath('QuantityShipped')
|
29
31
|
end
|
30
32
|
|
31
33
|
attribute(:gift_message_text) do
|
32
|
-
text_at_xpath(
|
34
|
+
text_at_xpath('GiftMessageText')
|
33
35
|
end
|
34
36
|
|
35
37
|
attribute(:gift_wrap_level) do
|
36
|
-
text_at_xpath(
|
38
|
+
text_at_xpath('GiftWrapLevel')
|
37
39
|
end
|
38
40
|
|
39
41
|
attribute(:item_price) do
|
40
|
-
money_at_xpath(
|
42
|
+
money_at_xpath('ItemPrice')
|
41
43
|
end
|
42
44
|
|
43
45
|
attribute(:shipping_price) do
|
44
|
-
money_at_xpath(
|
46
|
+
money_at_xpath('ShippingPrice')
|
45
47
|
end
|
46
48
|
|
47
49
|
attribute(:gift_wrap_price) do
|
48
|
-
money_at_xpath(
|
50
|
+
money_at_xpath('GiftWrapPrice')
|
49
51
|
end
|
50
52
|
|
51
53
|
attribute(:item_tax) do
|
52
|
-
money_at_xpath(
|
54
|
+
money_at_xpath('ItemTax')
|
53
55
|
end
|
54
56
|
|
55
57
|
attribute(:shipping_tax) do
|
56
|
-
money_at_xpath(
|
58
|
+
money_at_xpath('ShippingTax')
|
57
59
|
end
|
58
60
|
|
59
61
|
attribute(:gift_wrap_tax) do
|
60
|
-
money_at_xpath(
|
62
|
+
money_at_xpath('GiftWrapPrice')
|
61
63
|
end
|
62
64
|
|
63
65
|
attribute(:shipping_discount) do
|
64
|
-
money_at_xpath(
|
66
|
+
money_at_xpath('ShippingDiscount')
|
65
67
|
end
|
66
68
|
|
67
69
|
attribute(:promotion_discount) do
|
68
|
-
money_at_xpath(
|
70
|
+
money_at_xpath('PromotionDiscount')
|
69
71
|
end
|
70
72
|
|
71
73
|
attribute(:promotion_ids) do
|
72
|
-
xpath(
|
74
|
+
xpath('PromotionId').map(&:text)
|
73
75
|
end
|
74
76
|
|
75
77
|
attribute(:cod_fee) do
|
76
|
-
money_at_xpath(
|
78
|
+
money_at_xpath('CODFee')
|
77
79
|
end
|
78
80
|
|
79
81
|
attribute(:cod_fee_discount) do
|
80
|
-
money_at_xpath(
|
82
|
+
money_at_xpath('CODFeeDiscount')
|
81
83
|
end
|
82
84
|
|
83
85
|
attribute(:invoice_data) do
|
84
|
-
xpath(
|
86
|
+
xpath('InvoiceData').map { |node| InvoiceData.new(node) }
|
85
87
|
end
|
86
88
|
|
87
89
|
attribute(:condition_id) do
|
88
|
-
text_at_xpath(
|
90
|
+
text_at_xpath('ConditionId')
|
89
91
|
end
|
90
92
|
|
91
93
|
attribute(:condition_subtype_id) do
|
92
|
-
text_at_xpath(
|
94
|
+
text_at_xpath('ConditionSubtypeId')
|
93
95
|
end
|
94
96
|
|
95
97
|
attribute(:condition_note) do
|
96
|
-
text_at_xpath(
|
98
|
+
text_at_xpath('ConditionNote')
|
97
99
|
end
|
98
100
|
|
99
101
|
attribute(:scheduled_delivery_ends_at) do
|
100
|
-
time_at_xpath(
|
102
|
+
time_at_xpath('ScheduledDeliveryEndDate')
|
101
103
|
end
|
102
104
|
|
103
105
|
attribute(:scheduled_delivery_starts_at) do
|
104
|
-
time_at_xpath(
|
106
|
+
time_at_xpath('ScheduledDeliveryStartDate')
|
107
|
+
end
|
108
|
+
|
109
|
+
def to_s
|
110
|
+
order_item_id
|
105
111
|
end
|
106
112
|
end
|
107
113
|
end
|