mws-orders 0.2.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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