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.
Files changed (37) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +13 -9
  3. data/lib/mws/orders/collection.rb +10 -10
  4. data/lib/mws/orders/document.rb +4 -2
  5. data/lib/mws/orders/entity.rb +13 -10
  6. data/lib/mws/orders/invoice_data.rb +7 -5
  7. data/lib/mws/orders/message.rb +17 -0
  8. data/lib/mws/orders/order.rb +40 -32
  9. data/lib/mws/orders/order_item.rb +33 -27
  10. data/lib/mws/orders/order_items.rb +7 -5
  11. data/lib/mws/orders/orders.rb +7 -5
  12. data/lib/mws/orders/parser.rb +49 -24
  13. data/lib/mws/orders/payment_execution_detail.rb +8 -4
  14. data/lib/mws/orders/payment_execution_detail_item.rb +5 -3
  15. data/lib/mws/orders/service_status.rb +8 -6
  16. data/lib/mws/orders/shipping_address.rb +9 -7
  17. data/lib/mws/orders/tokenable.rb +3 -1
  18. data/lib/mws/orders/version.rb +3 -1
  19. data/test/fixtures/orders.xml +4 -1
  20. data/test/mws/orders/test_entity.rb +44 -42
  21. data/test/mws/orders/test_message.rb +18 -0
  22. data/test/mws/orders/test_order.rb +16 -2
  23. data/test/mws/orders/test_order_item.rb +8 -2
  24. data/test/mws/orders/test_order_items.rb +4 -2
  25. data/test/mws/orders/test_orders.rb +4 -2
  26. data/test/mws/orders/test_parser.rb +3 -1
  27. data/test/mws/orders/test_payment_execution_detail.rb +6 -2
  28. data/test/mws/orders/test_payment_execution_detail_item.rb +5 -2
  29. data/test/mws/orders/test_service_status.rb +6 -2
  30. data/test/mws/orders/test_shipping_address.rb +4 -2
  31. data/test/mws/orders/test_tokenable.rb +8 -6
  32. data/test/test_helper.rb +12 -9
  33. metadata +70 -33
  34. data/lib/mws-orders.rb +0 -2
  35. data/lib/mws/orders/service_status_message.rb +0 -15
  36. data/test/integration/test_mws_orders.rb +0 -27
  37. data/test/mws/orders/test_service_status_message.rb +0 -16
@@ -1,14 +1,16 @@
1
- require "mws/orders/collection"
2
- require "mws/orders/order_item"
3
- require "mws/orders/tokenable"
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(&blk)
11
- xpath("OrderItems/OrderItem").each { |node| yield OrderItem.new(node) }
12
+ def each
13
+ xpath('OrderItems/OrderItem').each { |node| yield OrderItem.new(node) }
12
14
  end
13
15
  end
14
16
  end
@@ -1,14 +1,16 @@
1
- require "mws/orders/collection"
2
- require "mws/orders/order"
3
- require "mws/orders/tokenable"
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(&blk)
11
- xpath("Orders/Order").map { |node| yield Order.new(node) }
12
+ def each
13
+ xpath('Orders/Order').map { |node| yield Order.new(node) }
12
14
  end
13
15
  end
14
16
  end
@@ -1,44 +1,69 @@
1
- require "nokogiri"
2
- require "mws/orders/orders"
3
- require "mws/orders/order_items"
4
- require "mws/orders/service_status"
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
- SERVICE_STATUS = /GetServiceStatus/
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
- node = find_result_node
20
-
21
- case node.name
22
- when SERVICE_STATUS
23
- ServiceStatus.new(node)
24
- when ORDER
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(@response.body)
63
+ xml = Nokogiri(body)
39
64
  root = xml.children.first
40
65
 
41
- root.children.find { |node| node.name.include?("Result") }
66
+ root.children.find { |node| node.name.include?('Result') }
42
67
  end
43
68
  end
44
69
 
@@ -1,11 +1,15 @@
1
- require "mws/orders/collection"
2
- require "mws/orders/payment_execution_detail_item"
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(&blk)
8
- xpath("PaymentExecutionDetailItem").each { |node| yield PaymentExecutionDetailItem.new(node) }
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
- require "mws/orders/entity"
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("Payment")
9
+ money_at_xpath('Payment')
8
10
  end
9
11
 
10
12
  attribute(:payment_method) do
11
- text_at_xpath("PaymentMethod")
13
+ text_at_xpath('PaymentMethod')
12
14
  end
13
15
  end
14
16
  end
@@ -1,23 +1,25 @@
1
- require "mws/orders/entity"
2
- require "mws/orders/service_status_message"
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("Status")
10
+ text_at_xpath('Status')
9
11
  end
10
12
 
11
13
  attribute(:timestamp) do
12
- time_at_xpath("Timestamp")
14
+ time_at_xpath('Timestamp')
13
15
  end
14
16
 
15
17
  attribute(:message_id) do
16
- text_at_xpath("MessageId")
18
+ text_at_xpath('MessageId')
17
19
  end
18
20
 
19
21
  attribute(:messages) do
20
- xpath("Messages/Message").map { |node| ServiceStatusMessage.new(node) }
22
+ xpath('Messages/Message').map { |node| Message.new(node) }
21
23
  end
22
24
  end
23
25
  end
@@ -1,10 +1,12 @@
1
- require "mws/orders/entity"
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("Name")
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("City")
17
+ text_at_xpath('City')
16
18
  end
17
19
 
18
20
  attribute(:state_or_region) do
19
- text_at_xpath("StateOrRegion")
21
+ text_at_xpath('StateOrRegion')
20
22
  end
21
23
 
22
24
  attribute(:postal_code) do
23
- text_at_xpath("PostalCode")
25
+ text_at_xpath('PostalCode')
24
26
  end
25
27
 
26
28
  attribute(:country_code) do
27
- text_at_xpath("CountryCode")
29
+ text_at_xpath('CountryCode')
28
30
  end
29
31
 
30
32
  attribute(:phone) do
31
- text_at_xpath("Phone")
33
+ text_at_xpath('Phone')
32
34
  end
33
35
  end
34
36
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MWS
2
4
  module Orders
3
5
  module Tokenable
4
6
  def next_token
5
7
  node = xpath('NextToken').first
6
- node.text if node
8
+ node&.text
7
9
  end
8
10
  end
9
11
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MWS
2
4
  module Orders
3
- VERSION = "0.2.0"
5
+ VERSION = '0.4.0'
4
6
  end
5
7
  end
@@ -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
- require "test_helper"
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 = <<-EOF
7
+ xml = <<-XML
6
8
  <Float xmlns="example">10.0</Float>
7
- EOF
8
- entity= build_entity(xml)
9
- float = entity.float_at_xpath("Float")
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 = <<-EOF
16
+ xml = <<-XML
15
17
  <Integer xmlns="example">10</Integer>
16
- EOF
17
- entity= build_entity(xml)
18
- integer = entity.integer_at_xpath("Integer")
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 = <<-EOF
25
+ xml = <<-XML
24
26
  <Price xmlns="example">
25
27
  <CurrencyCode>USD</CurrencyCode>
26
28
  <Amount>10.00</Amount>
27
29
  </Price>
28
- EOF
29
- entity= build_entity(xml)
30
- money = entity.money_at_xpath("Price")
31
- assert_equal "$10.00", money.format
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 test_parses_japanese_yen
35
- xml = <<-EOF
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
- EOF
41
- entity= build_entity(xml)
42
- money = entity.money_at_xpath("Price")
43
- assert_equal "¥1,000", money.format
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 = <<-EOF
49
+ xml = <<-XML
48
50
  <Text xmlns="example">Foo</Text>
49
- EOF
50
- entity= build_entity(xml)
51
- text = entity.text_at_xpath("Text")
52
- assert_equal "Foo", text
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 = <<-EOF
58
+ xml = <<-XML
57
59
  <Text xmlns="example">Foo
58
60
 
59
61
  </Text>
60
- EOF
61
- entity= build_entity(xml)
62
- text = entity.text_at_xpath("Text")
63
- assert_equal "Foo", text
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 = <<-EOF
69
+ xml = <<-XML
68
70
  <Time xmlns="example">2013-01-01T01:30:00.000-06:00</Time>
69
- EOF
70
- entity= build_entity(xml)
71
- time = entity.time_at_xpath("Time")
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 = <<-EOF
78
+ xml = <<-XML
77
79
  <Foo xmlns="example">
78
80
  </Foo>
79
- EOF
80
- entity= build_entity(xml)
81
+ XML
82
+ entity = build_entity(xml)
81
83
 
82
- assert_nil entity.float_at_xpath("Bar")
83
- assert_nil entity.integer_at_xpath("Bar")
84
- assert_nil entity.money_at_xpath("Bar")
85
- assert_nil entity.time_at_xpath("Bar")
86
- assert_nil entity.text_at_xpath("Bar")
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