mws-orders 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +73 -0
- data/lib/mws/orders/client.rb +88 -0
- data/lib/mws/orders/helpers/parameters.rb +53 -0
- data/lib/mws/orders/helpers/structured_list.rb +40 -0
- data/lib/mws/orders/parsers/base.rb +27 -0
- data/lib/mws/orders/parsers/collection.rb +22 -0
- data/lib/mws/orders/parsers/invoice_data.rb +23 -0
- data/lib/mws/orders/parsers/model.rb +38 -0
- data/lib/mws/orders/parsers/order.rb +108 -0
- data/lib/mws/orders/parsers/order_item.rb +107 -0
- data/lib/mws/orders/parsers/order_items.rb +17 -0
- data/lib/mws/orders/parsers/orders.rb +17 -0
- data/lib/mws/orders/parsers/payment_execution_detail.rb +17 -0
- data/lib/mws/orders/parsers/payment_execution_detail_item.rb +15 -0
- data/lib/mws/orders/parsers/service_status.rb +32 -0
- data/lib/mws/orders/parsers/service_status_message.rb +15 -0
- data/lib/mws/orders/parsers/shipping_address.rb +35 -0
- data/lib/mws/orders/requests/base.rb +55 -0
- data/lib/mws/orders/requests/order_items.rb +23 -0
- data/lib/mws/orders/requests/orders.rb +36 -0
- data/lib/mws/orders/requests/service_status.rb +18 -0
- data/lib/mws/orders/version.rb +5 -0
- data/lib/mws-orders.rb +29 -0
- data/test/fixtures/mws.yml +12 -0
- data/test/fixtures/mws.yml.example +4 -0
- data/test/fixtures/order_items.xml +83 -0
- data/test/fixtures/orders.xml +109 -0
- data/test/fixtures/service_status.xml +19 -0
- data/test/helpers/parameters_test.rb +34 -0
- data/test/helpers/structured_list_test.rb +17 -0
- data/test/integration/order_items_test.rb +16 -0
- data/test/integration/orders_test.rb +17 -0
- data/test/integration/service_status_test.rb +9 -0
- data/test/integration/test_helper.rb +12 -0
- data/test/parsers/collection_test.rb +7 -0
- data/test/parsers/model_test.rb +27 -0
- data/test/parsers/order_item_test.rb +68 -0
- data/test/parsers/order_items_test.rb +13 -0
- data/test/parsers/order_test.rb +80 -0
- data/test/parsers/orders_test.rb +13 -0
- data/test/parsers/payment_execution_detail_item_test.rb +16 -0
- data/test/parsers/payment_execution_detail_test.rb +13 -0
- data/test/parsers/service_status_message_test.rb +16 -0
- data/test/parsers/service_status_test.rb +38 -0
- data/test/parsers/shipping_address_test.rb +35 -0
- data/test/parsers/test_helper.rb +10 -0
- data/test/requests/order_items_test.rb +36 -0
- data/test/requests/orders_test.rb +46 -0
- data/test/requests/service_status_test.rb +22 -0
- data/test/requests/test_helper.rb +18 -0
- data/test/test_helper.rb +7 -0
- metadata +221 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 161b00e5e2956a4798a37cd121baea48c58031f7
|
4
|
+
data.tar.gz: 02981d3f4fb416ebe23f89fd4975d7daae325810
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c4caab1a5269758e84ffd649d8c54b119b0de5b609eedf97d4ac2dd91a7cf00dd38bf0f458777e7a8c72c5667e62b4254955a5a618adc8aa687265d14d2936a0
|
7
|
+
data.tar.gz: 28365116614a1e9d35826cbf767c24328688af70b64ccdd49ace25be268e63ade05f3e02c9f9055af785335fd8082a1737baad3d275a4e999ffe703efee16d54
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
(The MIT License)
|
2
|
+
|
3
|
+
Copyright (c) 2013 Paper Cavalier
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
21
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
22
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# MWS Orders
|
2
|
+
|
3
|
+
**MWS Orders** is a fully-featured Ruby interface to the [Amazon Marketplace
|
4
|
+
Web Service (MWS) Orders API][1].
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
Instantiate a client:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
client = MWS::Orders::Client.new('GB', 'aws_key', 'aws_secret', 'seller_id')
|
12
|
+
```
|
13
|
+
|
14
|
+
[API methods are available on the client][2].
|
15
|
+
|
16
|
+
### Orders
|
17
|
+
|
18
|
+
List orders created or updated during a time frame you specify:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
# See the API for all available parameters.
|
22
|
+
client.list_orders(
|
23
|
+
created_after: 1.week.ago,
|
24
|
+
order_status: %w(Pending Unshipped)
|
25
|
+
)
|
26
|
+
```
|
27
|
+
|
28
|
+
List the next page of orders:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
client.list_orders_by_next_token
|
32
|
+
```
|
33
|
+
|
34
|
+
Get one or more orders based on their order numbers:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
client.get_order('123-1234567-1234567')
|
38
|
+
```
|
39
|
+
|
40
|
+
All above queries will return an enumerable list of orders.
|
41
|
+
|
42
|
+
### Order Items
|
43
|
+
|
44
|
+
List order items based on an order number you specify:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
client.list_order_items('123-1234567-1234567')
|
48
|
+
```
|
49
|
+
|
50
|
+
List the next page of order items:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
client.list_order_items_by_next_token
|
54
|
+
```
|
55
|
+
|
56
|
+
All above queries will return an enumerable list of order items.
|
57
|
+
|
58
|
+
### Service Status
|
59
|
+
|
60
|
+
Check the operational status of the API:
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
client.get_service_status
|
64
|
+
```
|
65
|
+
|
66
|
+
### Naming Conventions
|
67
|
+
|
68
|
+
Request and response attribute names follow Amazon's naming conventions with a
|
69
|
+
few exceptions, where some Railsism has insidiuously crept in—e.g.
|
70
|
+
`shipped_at` instead of `ShipDate`.
|
71
|
+
|
72
|
+
[1]: http://docs.developer.amazonservices.com/en_UK/orders/index.html
|
73
|
+
[2]: https://github.com/papercavalier/mws-orders/blob/master/lib/mws/orders/client.rb
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
class Client < ::Peddler::Orders
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
# Public: Get one or more orders.
|
7
|
+
#
|
8
|
+
# amazon_order_ids - One or more String Amazon order ids.
|
9
|
+
#
|
10
|
+
# Examples
|
11
|
+
#
|
12
|
+
# client.get_order('123-1234567-1234567')
|
13
|
+
#
|
14
|
+
# Returns an enumerable list of Orders.
|
15
|
+
def_delegator :orders, :get, :get_order
|
16
|
+
|
17
|
+
# Public: List orders created or updated during a specified time frame.
|
18
|
+
#
|
19
|
+
# params - The Hash request parameters used to narrow the orders list.
|
20
|
+
# Refer to the MWS Orders API for available parameters.
|
21
|
+
#
|
22
|
+
# Examples
|
23
|
+
#
|
24
|
+
# client.list_orders(created_after: 1.week.ago)
|
25
|
+
#
|
26
|
+
# Returns an enumerable list of Orders.
|
27
|
+
def_delegator :orders, :list, :list_orders
|
28
|
+
|
29
|
+
# Public: List the next page of orders using the NextToken parameter.
|
30
|
+
#
|
31
|
+
# Examples
|
32
|
+
#
|
33
|
+
# client.list_orders_by_next_token
|
34
|
+
#
|
35
|
+
# Returns an enumerable list of Orders.
|
36
|
+
def_delegator :orders, :list_by_next_token, :list_orders_by_next_token
|
37
|
+
|
38
|
+
# Public: List order items for an amazon order.
|
39
|
+
#
|
40
|
+
# amazon_order_id - The String Amazon order id.
|
41
|
+
#
|
42
|
+
# Examples
|
43
|
+
#
|
44
|
+
# client.list_order_items('123-1234567-1234567')
|
45
|
+
#
|
46
|
+
# Returns an enaumerable list of Order Items.
|
47
|
+
def_delegator :order_items, :list, :list_order_items
|
48
|
+
|
49
|
+
# Public: List the next page of order items using the NextToken
|
50
|
+
# parameter.
|
51
|
+
#
|
52
|
+
# Examples
|
53
|
+
#
|
54
|
+
# client.list_order_items_by_next_token
|
55
|
+
#
|
56
|
+
# Returns an enaumerable list of Order Items.
|
57
|
+
def_delegator :order_items, :list_by_next_token, :list_order_items_by_next_token
|
58
|
+
|
59
|
+
# Public: Get the service status of the API.
|
60
|
+
#
|
61
|
+
# Examples
|
62
|
+
#
|
63
|
+
# client.get_service_status
|
64
|
+
#
|
65
|
+
# Returns the Service Status.
|
66
|
+
def_delegator :service_status, :get, :get_service_status
|
67
|
+
|
68
|
+
# Internal: Returns the String home marketplace id of the client.
|
69
|
+
def home_marketplace_id
|
70
|
+
marketplace_id(country)
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def orders
|
76
|
+
@orders ||= Request::Orders.new(self)
|
77
|
+
end
|
78
|
+
|
79
|
+
def order_items
|
80
|
+
@order_items ||= Request::OrderItems.new(self)
|
81
|
+
end
|
82
|
+
|
83
|
+
def service_status
|
84
|
+
@service_status ||= Request::ServiceStatus.new(self)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Helper
|
4
|
+
class Parameters < SimpleDelegator
|
5
|
+
def initialize(action)
|
6
|
+
super({ 'Action' => camelize(action) })
|
7
|
+
end
|
8
|
+
|
9
|
+
def timestamp!
|
10
|
+
each do |key, value|
|
11
|
+
store(key, value.iso8601) if value.respond_to?(:iso8601)
|
12
|
+
end
|
13
|
+
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
def format_structured_lists!
|
18
|
+
lists = {}
|
19
|
+
|
20
|
+
each do |key, value|
|
21
|
+
if StructuredList.handle?(key)
|
22
|
+
lists.update(StructuredList.new(key).build(delete(key)))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
update(lists)
|
27
|
+
end
|
28
|
+
|
29
|
+
def camelize_keys!
|
30
|
+
keys.each do |key|
|
31
|
+
if key.is_a?(Symbol)
|
32
|
+
new_key = camelize(key)
|
33
|
+
store(new_key, delete(key))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
def update(hsh)
|
41
|
+
__getobj__.update(hsh)
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def camelize(sym)
|
48
|
+
sym.to_s.split('_').map(&:capitalize).join
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Helper
|
4
|
+
class StructuredList
|
5
|
+
KEYS = {
|
6
|
+
order_status: %w(OrderStatus Status),
|
7
|
+
marketplace_id: %w(MarketplaceId Id),
|
8
|
+
fulfillment_channel: %w(FulfillmentChannel Channel),
|
9
|
+
payment_method: %w(PaymentMethod),
|
10
|
+
tfm_shipment_status: %w(TFMShipmentStatus Status),
|
11
|
+
amazon_order_id: %w(AmazonOrderId Id)
|
12
|
+
}
|
13
|
+
|
14
|
+
attr :keys
|
15
|
+
|
16
|
+
def self.handle?(key)
|
17
|
+
KEYS.has_key?(key)
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(key)
|
21
|
+
@keys = KEYS.fetch(key)
|
22
|
+
end
|
23
|
+
|
24
|
+
def build(values)
|
25
|
+
Array(values)
|
26
|
+
.each_with_index
|
27
|
+
.reduce(Hash.new) { |hsh, (v, i)|
|
28
|
+
hsh.merge(composite_key(i + 1) => v)
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def composite_key(index)
|
35
|
+
(keys.dup << index).join('.')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class Base
|
5
|
+
attr :document
|
6
|
+
|
7
|
+
def initialize(document)
|
8
|
+
@document = document
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def at_xpath(path)
|
14
|
+
document.at_xpath(with_namespace(path))
|
15
|
+
end
|
16
|
+
|
17
|
+
def xpath(path)
|
18
|
+
document.xpath(with_namespace(path))
|
19
|
+
end
|
20
|
+
|
21
|
+
def with_namespace(path)
|
22
|
+
path.split('/').map { |attr| "xmlns:#{attr}" }.join('/')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class Collection < Base
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def each
|
8
|
+
raise NotImplementedError
|
9
|
+
end
|
10
|
+
|
11
|
+
def empty?
|
12
|
+
count == 0
|
13
|
+
end
|
14
|
+
|
15
|
+
def inspect
|
16
|
+
"#<#{self.class}>"
|
17
|
+
end
|
18
|
+
alias :to_s :inspect
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class InvoiceData < Model
|
5
|
+
value :invoice_requirement do
|
6
|
+
text_at_xpath('InvoiceRequirement')
|
7
|
+
end
|
8
|
+
|
9
|
+
value :buyer_selected_invoice_category do
|
10
|
+
text_at_xpath('BuyerSelectedInvoiceCategory')
|
11
|
+
end
|
12
|
+
|
13
|
+
value :invoice_title do
|
14
|
+
text_at_xpath('InvoiceTitle')
|
15
|
+
end
|
16
|
+
|
17
|
+
value :invoice_information do
|
18
|
+
text_at_xpath('InvoiceInformation')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class Model < Base
|
5
|
+
include Structure
|
6
|
+
|
7
|
+
def float_at_xpath(path)
|
8
|
+
str = text_at_xpath(path)
|
9
|
+
str.to_f if str
|
10
|
+
end
|
11
|
+
|
12
|
+
def integer_at_xpath(path)
|
13
|
+
str = text_at_xpath(path)
|
14
|
+
str.to_i if str
|
15
|
+
end
|
16
|
+
|
17
|
+
def money_at_xpath(path)
|
18
|
+
return unless amount = float_at_xpath("#{path}/Amount")
|
19
|
+
|
20
|
+
currency_code = text_at_xpath("#{path}/CurrencyCode")
|
21
|
+
amount = amount * 100 unless currency_code == 'JPY'
|
22
|
+
|
23
|
+
Money.new(amount, currency_code)
|
24
|
+
end
|
25
|
+
|
26
|
+
def text_at_xpath(path)
|
27
|
+
node = at_xpath(path)
|
28
|
+
node.text if node
|
29
|
+
end
|
30
|
+
|
31
|
+
def time_at_xpath(path)
|
32
|
+
str = text_at_xpath(path)
|
33
|
+
Time.parse(CGI.unescape(str)) if str
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class Order < Model
|
5
|
+
value :amazon_order_id do
|
6
|
+
text_at_xpath('AmazonOrderId')
|
7
|
+
end
|
8
|
+
|
9
|
+
value :seller_order_id do
|
10
|
+
text_at_xpath('SellerOrderId')
|
11
|
+
end
|
12
|
+
|
13
|
+
value :purchased_at do
|
14
|
+
time_at_xpath('PurchaseDate')
|
15
|
+
end
|
16
|
+
|
17
|
+
value :last_updated_at do
|
18
|
+
time_at_xpath('LastUpdateDate')
|
19
|
+
end
|
20
|
+
|
21
|
+
value :status do
|
22
|
+
text_at_xpath('OrderStatus')
|
23
|
+
end
|
24
|
+
|
25
|
+
value :fulfillment_channel do
|
26
|
+
text_at_xpath('FulfillmentChannel')
|
27
|
+
end
|
28
|
+
|
29
|
+
value :sales_channel do
|
30
|
+
text_at_xpath('SalesChannel')
|
31
|
+
end
|
32
|
+
|
33
|
+
value :order_channel do
|
34
|
+
text_at_xpath('OrderChannel')
|
35
|
+
end
|
36
|
+
|
37
|
+
value :ship_service_level do
|
38
|
+
text_at_xpath('ShipServiceLevel')
|
39
|
+
end
|
40
|
+
|
41
|
+
value :shipping_address do
|
42
|
+
ShippingAddress.new(at_xpath('ShippingAddress'))
|
43
|
+
end
|
44
|
+
|
45
|
+
value :total do
|
46
|
+
money_at_xpath('OrderTotal')
|
47
|
+
end
|
48
|
+
|
49
|
+
value :number_of_items_shipped do
|
50
|
+
integer_at_xpath('NumberOfItemsShipped')
|
51
|
+
end
|
52
|
+
|
53
|
+
value :number_of_items_unshipped do
|
54
|
+
integer_at_xpath('NumberOfItemsUnshipped')
|
55
|
+
end
|
56
|
+
|
57
|
+
value :payment_execution_detail do
|
58
|
+
node = at_xpath('PaymentExecutionDetail')
|
59
|
+
PaymentExecutionDetail.new(node) if node
|
60
|
+
end
|
61
|
+
|
62
|
+
value :payment_method do
|
63
|
+
text_at_xpath('PaymentMethod')
|
64
|
+
end
|
65
|
+
|
66
|
+
value :marketplace_id do
|
67
|
+
text_at_xpath('MarketplaceId')
|
68
|
+
end
|
69
|
+
|
70
|
+
value :buyer_name do
|
71
|
+
text_at_xpath('BuyerName')
|
72
|
+
end
|
73
|
+
|
74
|
+
value :buyer_email do
|
75
|
+
text_at_xpath('BuyerEmail')
|
76
|
+
end
|
77
|
+
|
78
|
+
value :shipment_service_level_category do
|
79
|
+
text_at_xpath('ShipmentServiceLevelCategory')
|
80
|
+
end
|
81
|
+
|
82
|
+
value :cba_displayable_shipping_label do
|
83
|
+
text_at_xpath('CbaDisplayableShippingLabel')
|
84
|
+
end
|
85
|
+
|
86
|
+
value :shipped_by_amazon_tfm do
|
87
|
+
text_at_xpath('ShippedByAmazonTFM')
|
88
|
+
end
|
89
|
+
|
90
|
+
value :tfm_shipment_status do
|
91
|
+
text_at_xpath('TFMShipmentStatus')
|
92
|
+
end
|
93
|
+
|
94
|
+
value :type do
|
95
|
+
text_at_xpath('OrderType')
|
96
|
+
end
|
97
|
+
|
98
|
+
value :earliest_shipped_at do
|
99
|
+
time_at_xpath('EarliestShipDate')
|
100
|
+
end
|
101
|
+
|
102
|
+
value :latest_shipped_at do
|
103
|
+
time_at_xpath('LatestShipDate')
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class OrderItem < Model
|
5
|
+
value :asin do
|
6
|
+
text_at_xpath('ASIN')
|
7
|
+
end
|
8
|
+
|
9
|
+
value :seller_sku do
|
10
|
+
text_at_xpath('SellerSKU')
|
11
|
+
end
|
12
|
+
|
13
|
+
value :order_item_id do
|
14
|
+
text_at_xpath('OrderItemId')
|
15
|
+
end
|
16
|
+
|
17
|
+
value :title do
|
18
|
+
text_at_xpath('Title')
|
19
|
+
end
|
20
|
+
|
21
|
+
value :quantity_ordered do
|
22
|
+
integer_at_xpath('QuantityOrdered')
|
23
|
+
end
|
24
|
+
|
25
|
+
value :quantity_shipped do
|
26
|
+
integer_at_xpath('QuantityShipped')
|
27
|
+
end
|
28
|
+
|
29
|
+
value :gift_message_text do
|
30
|
+
text_at_xpath('GiftMessageText')
|
31
|
+
end
|
32
|
+
|
33
|
+
value :gift_wrap_level do
|
34
|
+
text_at_xpath('GiftWrapLevel')
|
35
|
+
end
|
36
|
+
|
37
|
+
value :item_price do
|
38
|
+
money_at_xpath('ItemPrice')
|
39
|
+
end
|
40
|
+
|
41
|
+
value :shipping_price do
|
42
|
+
money_at_xpath('ShippingPrice')
|
43
|
+
end
|
44
|
+
|
45
|
+
value :gift_wrap_price do
|
46
|
+
money_at_xpath('GiftWrapPrice')
|
47
|
+
end
|
48
|
+
|
49
|
+
value :item_tax do
|
50
|
+
money_at_xpath('ItemTax')
|
51
|
+
end
|
52
|
+
|
53
|
+
value :shipping_tax do
|
54
|
+
money_at_xpath('ShippingTax')
|
55
|
+
end
|
56
|
+
|
57
|
+
value :gift_wrap_tax do
|
58
|
+
money_at_xpath('GiftWrapPrice')
|
59
|
+
end
|
60
|
+
|
61
|
+
value :shipping_discount do
|
62
|
+
money_at_xpath('ShippingDiscount')
|
63
|
+
end
|
64
|
+
|
65
|
+
value :promotion_discount do
|
66
|
+
money_at_xpath('PromotionDiscount')
|
67
|
+
end
|
68
|
+
|
69
|
+
value :promotion_ids do
|
70
|
+
xpath('PromotionId').map(&:text)
|
71
|
+
end
|
72
|
+
|
73
|
+
value :cod_fee do
|
74
|
+
money_at_xpath('CODFee')
|
75
|
+
end
|
76
|
+
|
77
|
+
value :cod_fee_discount do
|
78
|
+
money_at_xpath('CODFeeDiscount')
|
79
|
+
end
|
80
|
+
|
81
|
+
value :invoice_data do
|
82
|
+
xpath('InvoiceData').map { |node| InvoiceData.new(node) }
|
83
|
+
end
|
84
|
+
|
85
|
+
value :condition_id do
|
86
|
+
text_at_xpath('ConditionId')
|
87
|
+
end
|
88
|
+
|
89
|
+
value :condition_subtype_id do
|
90
|
+
text_at_xpath('ConditionSubtypeId')
|
91
|
+
end
|
92
|
+
|
93
|
+
value :condition_note do
|
94
|
+
text_at_xpath('ConditionNote')
|
95
|
+
end
|
96
|
+
|
97
|
+
value :scheduled_delivery_ends_at do
|
98
|
+
time_at_xpath('ScheduledDeliveryEndDate')
|
99
|
+
end
|
100
|
+
|
101
|
+
value :scheduled_delivery_starts_at do
|
102
|
+
time_at_xpath('ScheduledDeliveryStartDate')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class OrderItems < Collection
|
5
|
+
def each(&blk)
|
6
|
+
order_item_nodes.each { |node| yield OrderItem.new(node) }
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def order_item_nodes
|
12
|
+
xpath('OrderItem')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class Orders < Collection
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
def_delegator :order_nodes, :each
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def order_nodes
|
12
|
+
xpath('Order').map { |node| Order.new(node) }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module MWS
|
2
|
+
module Orders
|
3
|
+
module Parser
|
4
|
+
class PaymentExecutionDetail < Collection
|
5
|
+
def each(&blk)
|
6
|
+
payment_execution_detail_item_nodes.each { |node| yield PaymentExecutionDetailItem.new(node) }
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def payment_execution_detail_item_nodes
|
12
|
+
xpath('PaymentExecutionDetailItem')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|