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
@@ -1,14 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mws/orders/collection'
|
4
|
+
require 'mws/orders/order_item'
|
5
|
+
require 'mws/orders/tokenable'
|
4
6
|
|
5
7
|
module MWS
|
6
8
|
module Orders
|
7
9
|
class OrderItems < Collection
|
8
10
|
include Tokenable
|
9
11
|
|
10
|
-
def each
|
11
|
-
xpath(
|
12
|
+
def each
|
13
|
+
xpath('OrderItems/OrderItem').each { |node| yield OrderItem.new(node) }
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
data/lib/mws/orders/orders.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mws/orders/collection'
|
4
|
+
require 'mws/orders/order'
|
5
|
+
require 'mws/orders/tokenable'
|
4
6
|
|
5
7
|
module MWS
|
6
8
|
module Orders
|
7
9
|
class Orders < Collection
|
8
10
|
include Tokenable
|
9
11
|
|
10
|
-
def each
|
11
|
-
xpath(
|
12
|
+
def each
|
13
|
+
xpath('Orders/Order').map { |node| yield Order.new(node) }
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
data/lib/mws/orders/parser.rb
CHANGED
@@ -1,44 +1,69 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'mws/orders/orders'
|
5
|
+
require 'mws/orders/order_items'
|
6
|
+
require 'mws/orders/service_status'
|
7
|
+
require 'peddler'
|
5
8
|
|
6
9
|
module MWS
|
7
10
|
module Orders
|
8
11
|
class Parser
|
9
|
-
|
10
|
-
ORDER = /GetOrder/
|
11
|
-
ORDERS = /ListOrders/
|
12
|
-
ORDER_ITEMS = /ListOrderItems/
|
12
|
+
include ::Peddler::Headers
|
13
13
|
|
14
|
-
def initialize(response,
|
14
|
+
def initialize(response, _encoding)
|
15
15
|
@response = response
|
16
16
|
end
|
17
17
|
|
18
18
|
def parse
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
when
|
23
|
-
|
24
|
-
|
25
|
-
Orders.new(node).first
|
26
|
-
when ORDERS
|
27
|
-
Orders.new(node)
|
28
|
-
when ORDER_ITEMS
|
29
|
-
OrderItems.new(node)
|
30
|
-
else
|
31
|
-
raise NotImplementedError
|
19
|
+
case result_node.name
|
20
|
+
when /GetOrder/ then order
|
21
|
+
when /GetServiceStatus/ then service_status
|
22
|
+
when /ListOrders/ then orders
|
23
|
+
when /ListOrderItems/ then order_items
|
24
|
+
else raise NotImplementedError
|
32
25
|
end
|
33
26
|
end
|
34
27
|
|
28
|
+
def headers
|
29
|
+
@response.headers
|
30
|
+
end
|
31
|
+
|
32
|
+
def status_code
|
33
|
+
@response.status
|
34
|
+
end
|
35
|
+
|
36
|
+
def body
|
37
|
+
@response.body
|
38
|
+
end
|
39
|
+
|
35
40
|
private
|
36
41
|
|
42
|
+
def order
|
43
|
+
orders.first
|
44
|
+
end
|
45
|
+
|
46
|
+
def orders
|
47
|
+
Orders.new(result_node)
|
48
|
+
end
|
49
|
+
|
50
|
+
def order_items
|
51
|
+
OrderItems.new(result_node)
|
52
|
+
end
|
53
|
+
|
54
|
+
def service_status
|
55
|
+
ServiceStatus.new(result_node)
|
56
|
+
end
|
57
|
+
|
58
|
+
def result_node
|
59
|
+
@result_node ||= find_result_node
|
60
|
+
end
|
61
|
+
|
37
62
|
def find_result_node
|
38
|
-
xml = Nokogiri(
|
63
|
+
xml = Nokogiri(body)
|
39
64
|
root = xml.children.first
|
40
65
|
|
41
|
-
root.children.find { |node| node.name.include?(
|
66
|
+
root.children.find { |node| node.name.include?('Result') }
|
42
67
|
end
|
43
68
|
end
|
44
69
|
|
@@ -1,11 +1,15 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mws/orders/collection'
|
4
|
+
require 'mws/orders/payment_execution_detail_item'
|
3
5
|
|
4
6
|
module MWS
|
5
7
|
module Orders
|
6
8
|
class PaymentExecutionDetail < Collection
|
7
|
-
def each
|
8
|
-
xpath(
|
9
|
+
def each
|
10
|
+
xpath('PaymentExecutionDetailItem').each do |node|
|
11
|
+
yield PaymentExecutionDetailItem.new(node)
|
12
|
+
end
|
9
13
|
end
|
10
14
|
end
|
11
15
|
end
|
@@ -1,14 +1,16 @@
|
|
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 PaymentExecutionDetailItem < Entity
|
6
8
|
attribute(:payment) do
|
7
|
-
money_at_xpath(
|
9
|
+
money_at_xpath('Payment')
|
8
10
|
end
|
9
11
|
|
10
12
|
attribute(:payment_method) do
|
11
|
-
text_at_xpath(
|
13
|
+
text_at_xpath('PaymentMethod')
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -1,23 +1,25 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mws/orders/entity'
|
4
|
+
require 'mws/orders/message'
|
3
5
|
|
4
6
|
module MWS
|
5
7
|
module Orders
|
6
8
|
class ServiceStatus < Entity
|
7
9
|
attribute(:status) do
|
8
|
-
text_at_xpath(
|
10
|
+
text_at_xpath('Status')
|
9
11
|
end
|
10
12
|
|
11
13
|
attribute(:timestamp) do
|
12
|
-
time_at_xpath(
|
14
|
+
time_at_xpath('Timestamp')
|
13
15
|
end
|
14
16
|
|
15
17
|
attribute(:message_id) do
|
16
|
-
text_at_xpath(
|
18
|
+
text_at_xpath('MessageId')
|
17
19
|
end
|
18
20
|
|
19
21
|
attribute(:messages) do
|
20
|
-
xpath(
|
22
|
+
xpath('Messages/Message').map { |node| Message.new(node) }
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
@@ -1,10 +1,12 @@
|
|
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 ShippingAddress < Entity
|
6
8
|
attribute(:name) do
|
7
|
-
text_at_xpath(
|
9
|
+
text_at_xpath('Name')
|
8
10
|
end
|
9
11
|
|
10
12
|
attribute(:address_lines) do
|
@@ -12,23 +14,23 @@ module MWS
|
|
12
14
|
end
|
13
15
|
|
14
16
|
attribute(:city) do
|
15
|
-
text_at_xpath(
|
17
|
+
text_at_xpath('City')
|
16
18
|
end
|
17
19
|
|
18
20
|
attribute(:state_or_region) do
|
19
|
-
text_at_xpath(
|
21
|
+
text_at_xpath('StateOrRegion')
|
20
22
|
end
|
21
23
|
|
22
24
|
attribute(:postal_code) do
|
23
|
-
text_at_xpath(
|
25
|
+
text_at_xpath('PostalCode')
|
24
26
|
end
|
25
27
|
|
26
28
|
attribute(:country_code) do
|
27
|
-
text_at_xpath(
|
29
|
+
text_at_xpath('CountryCode')
|
28
30
|
end
|
29
31
|
|
30
32
|
attribute(:phone) do
|
31
|
-
text_at_xpath(
|
33
|
+
text_at_xpath('Phone')
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
data/lib/mws/orders/tokenable.rb
CHANGED
data/lib/mws/orders/version.rb
CHANGED
data/test/fixtures/orders.xml
CHANGED
@@ -41,7 +41,7 @@
|
|
41
41
|
<Amount>10.00</Amount>
|
42
42
|
</Payment>
|
43
43
|
<PaymentMethod>GC</PaymentMethod>
|
44
|
-
</PaymentExecutionDetailItem>
|
44
|
+
</PaymentExecutionDetailItem>
|
45
45
|
</PaymentExecutionDetail>
|
46
46
|
<PaymentMethod>COD</PaymentMethod>
|
47
47
|
<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>
|
@@ -49,6 +49,8 @@
|
|
49
49
|
<BuyerEmail>5vlh04mgfmjh9h5@marketplace.amazon.com</BuyerEmail>
|
50
50
|
<ShipmentServiceLevelCategory>Standard
|
51
51
|
</ShipmentServiceLevelCategory>
|
52
|
+
<LatestShipDate>2012-10-15T07:59:59Z</LatestShipDate>
|
53
|
+
<LatestDeliveryDate>2012-10-15T07:59:59Z</LatestDeliveryDate>
|
52
54
|
</Order>
|
53
55
|
<Order>
|
54
56
|
<ShipmentServiceLevelCategory>Standard
|
@@ -68,6 +70,7 @@
|
|
68
70
|
<PurchaseDate>2012-10-11T14:15:55Z</PurchaseDate>
|
69
71
|
<EarliestShipDate>2012-10-13T05:00:00Z</EarliestShipDate>
|
70
72
|
<LatestShipDate>2012-10-15T07:59:59Z</LatestShipDate>
|
73
|
+
<LatestDeliveryDate>2012-10-15T07:59:59Z</LatestDeliveryDate>
|
71
74
|
<OrderType>Preorder</OrderType>
|
72
75
|
<NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
|
73
76
|
<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>
|
@@ -1,89 +1,91 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
2
4
|
|
3
5
|
class TestEntity < MiniTest::Test
|
4
6
|
def test_parses_floats
|
5
|
-
xml = <<-
|
7
|
+
xml = <<-XML
|
6
8
|
<Float xmlns="example">10.0</Float>
|
7
|
-
|
8
|
-
entity= build_entity(xml)
|
9
|
-
float = entity.float_at_xpath(
|
9
|
+
XML
|
10
|
+
entity = build_entity(xml)
|
11
|
+
float = entity.float_at_xpath('Float')
|
10
12
|
assert_equal 10.0, float
|
11
13
|
end
|
12
14
|
|
13
15
|
def test_parses_integers
|
14
|
-
xml = <<-
|
16
|
+
xml = <<-XML
|
15
17
|
<Integer xmlns="example">10</Integer>
|
16
|
-
|
17
|
-
entity= build_entity(xml)
|
18
|
-
integer = entity.integer_at_xpath(
|
18
|
+
XML
|
19
|
+
entity = build_entity(xml)
|
20
|
+
integer = entity.integer_at_xpath('Integer')
|
19
21
|
assert_equal 10, integer
|
20
22
|
end
|
21
23
|
|
22
24
|
def test_parses_money
|
23
|
-
xml = <<-
|
25
|
+
xml = <<-XML
|
24
26
|
<Price xmlns="example">
|
25
27
|
<CurrencyCode>USD</CurrencyCode>
|
26
28
|
<Amount>10.00</Amount>
|
27
29
|
</Price>
|
28
|
-
|
29
|
-
entity= build_entity(xml)
|
30
|
-
money = entity.money_at_xpath(
|
31
|
-
assert_equal
|
30
|
+
XML
|
31
|
+
entity = build_entity(xml)
|
32
|
+
money = entity.money_at_xpath('Price')
|
33
|
+
assert_equal 1000, money.fractional
|
32
34
|
end
|
33
35
|
|
34
|
-
def
|
35
|
-
xml = <<-
|
36
|
+
def test_parses_yen
|
37
|
+
xml = <<-XML
|
36
38
|
<Price xmlns="example">
|
37
39
|
<CurrencyCode>JPY</CurrencyCode>
|
38
40
|
<Amount>1000.00</Amount>
|
39
41
|
</Price>
|
40
|
-
|
41
|
-
entity= build_entity(xml)
|
42
|
-
money = entity.money_at_xpath(
|
43
|
-
assert_equal
|
42
|
+
XML
|
43
|
+
entity = build_entity(xml)
|
44
|
+
money = entity.money_at_xpath('Price')
|
45
|
+
assert_equal 1000, money.fractional
|
44
46
|
end
|
45
47
|
|
46
48
|
def test_parses_text
|
47
|
-
xml = <<-
|
49
|
+
xml = <<-XML
|
48
50
|
<Text xmlns="example">Foo</Text>
|
49
|
-
|
50
|
-
entity= build_entity(xml)
|
51
|
-
text = entity.text_at_xpath(
|
52
|
-
assert_equal
|
51
|
+
XML
|
52
|
+
entity = build_entity(xml)
|
53
|
+
text = entity.text_at_xpath('Text')
|
54
|
+
assert_equal 'Foo', text
|
53
55
|
end
|
54
56
|
|
55
57
|
def test_strips_text
|
56
|
-
xml = <<-
|
58
|
+
xml = <<-XML
|
57
59
|
<Text xmlns="example">Foo
|
58
60
|
|
59
61
|
</Text>
|
60
|
-
|
61
|
-
entity= build_entity(xml)
|
62
|
-
text = entity.text_at_xpath(
|
63
|
-
assert_equal
|
62
|
+
XML
|
63
|
+
entity = build_entity(xml)
|
64
|
+
text = entity.text_at_xpath('Text')
|
65
|
+
assert_equal 'Foo', text
|
64
66
|
end
|
65
67
|
|
66
68
|
def test_parses_time
|
67
|
-
xml = <<-
|
69
|
+
xml = <<-XML
|
68
70
|
<Time xmlns="example">2013-01-01T01:30:00.000-06:00</Time>
|
69
|
-
|
70
|
-
entity= build_entity(xml)
|
71
|
-
time = entity.time_at_xpath(
|
71
|
+
XML
|
72
|
+
entity = build_entity(xml)
|
73
|
+
time = entity.time_at_xpath('Time')
|
72
74
|
assert_kind_of Time, time
|
73
75
|
end
|
74
76
|
|
75
77
|
def test_handles_nil_values
|
76
|
-
xml = <<-
|
78
|
+
xml = <<-XML
|
77
79
|
<Foo xmlns="example">
|
78
80
|
</Foo>
|
79
|
-
|
80
|
-
entity= build_entity(xml)
|
81
|
+
XML
|
82
|
+
entity = build_entity(xml)
|
81
83
|
|
82
|
-
assert_nil entity.float_at_xpath(
|
83
|
-
assert_nil entity.integer_at_xpath(
|
84
|
-
assert_nil entity.money_at_xpath(
|
85
|
-
assert_nil entity.time_at_xpath(
|
86
|
-
assert_nil entity.text_at_xpath(
|
84
|
+
assert_nil entity.float_at_xpath('Bar')
|
85
|
+
assert_nil entity.integer_at_xpath('Bar')
|
86
|
+
assert_nil entity.money_at_xpath('Bar')
|
87
|
+
assert_nil entity.time_at_xpath('Bar')
|
88
|
+
assert_nil entity.text_at_xpath('Bar')
|
87
89
|
end
|
88
90
|
|
89
91
|
private
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class TestMessage < MiniTest::Test
|
6
|
+
def setup
|
7
|
+
node = load_fixture('service_status').xpath('//xmlns:Message').first
|
8
|
+
@message = Message.new(node)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_locale
|
12
|
+
assert_kind_of String, @message.locale
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_text
|
16
|
+
assert_kind_of String, @message.text
|
17
|
+
end
|
18
|
+
end
|