mws-orders 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +16 -25
- data/lib/mws-orders.rb +2 -29
- data/lib/mws/orders/collection.rb +29 -0
- data/lib/mws/orders/document.rb +28 -0
- data/lib/mws/orders/entity.rb +39 -0
- data/lib/mws/orders/invoice_data.rb +23 -0
- data/lib/mws/orders/order.rb +113 -0
- data/lib/mws/orders/order_item.rb +108 -0
- data/lib/mws/orders/order_items.rb +15 -0
- data/lib/mws/orders/orders.rb +15 -0
- data/lib/mws/orders/parser.rb +52 -0
- data/lib/mws/orders/payment_execution_detail.rb +12 -0
- data/lib/mws/orders/payment_execution_detail_item.rb +15 -0
- data/lib/mws/orders/service_status.rb +24 -0
- data/lib/mws/orders/service_status_message.rb +15 -0
- data/lib/mws/orders/shipping_address.rb +35 -0
- data/lib/mws/orders/tokenable.rb +10 -0
- data/lib/mws/orders/version.rb +1 -1
- data/test/integration/test_integration.rb +26 -0
- data/test/mws/orders/test_entity.rb +88 -0
- data/test/{parsers/order_test.rb → mws/orders/test_order.rb} +11 -6
- data/test/{parsers/order_item_test.rb → mws/orders/test_order_item.rb} +4 -4
- data/test/mws/orders/test_order_items.rb +19 -0
- data/test/mws/orders/test_orders.rb +19 -0
- data/test/mws/orders/test_parser.rb +7 -0
- data/test/mws/orders/test_payment_execution_detail.rb +15 -0
- data/test/mws/orders/test_payment_execution_detail_item.rb +16 -0
- data/test/mws/orders/test_service_status.rb +24 -0
- data/test/mws/orders/test_service_status_message.rb +16 -0
- data/test/{parsers/shipping_address_test.rb → mws/orders/test_shipping_address.rb} +4 -4
- data/test/test_helper.rb +15 -6
- metadata +67 -134
- data/lib/mws/orders/client.rb +0 -88
- data/lib/mws/orders/helpers/parameters.rb +0 -53
- data/lib/mws/orders/helpers/structured_list.rb +0 -40
- data/lib/mws/orders/parsers/base.rb +0 -27
- data/lib/mws/orders/parsers/collection.rb +0 -22
- data/lib/mws/orders/parsers/invoice_data.rb +0 -23
- data/lib/mws/orders/parsers/model.rb +0 -38
- data/lib/mws/orders/parsers/order.rb +0 -108
- data/lib/mws/orders/parsers/order_item.rb +0 -107
- data/lib/mws/orders/parsers/order_items.rb +0 -17
- data/lib/mws/orders/parsers/orders.rb +0 -17
- data/lib/mws/orders/parsers/payment_execution_detail.rb +0 -17
- data/lib/mws/orders/parsers/payment_execution_detail_item.rb +0 -15
- data/lib/mws/orders/parsers/service_status.rb +0 -32
- data/lib/mws/orders/parsers/service_status_message.rb +0 -15
- data/lib/mws/orders/parsers/shipping_address.rb +0 -35
- data/lib/mws/orders/requests/base.rb +0 -55
- data/lib/mws/orders/requests/order_items.rb +0 -23
- data/lib/mws/orders/requests/orders.rb +0 -36
- data/lib/mws/orders/requests/service_status.rb +0 -18
- data/test/fixtures/mws.yml +0 -12
- data/test/helpers/parameters_test.rb +0 -34
- data/test/helpers/structured_list_test.rb +0 -17
- data/test/integration/order_items_test.rb +0 -16
- data/test/integration/orders_test.rb +0 -17
- data/test/integration/service_status_test.rb +0 -9
- data/test/integration/test_helper.rb +0 -12
- data/test/parsers/collection_test.rb +0 -7
- data/test/parsers/model_test.rb +0 -27
- data/test/parsers/order_items_test.rb +0 -13
- data/test/parsers/orders_test.rb +0 -13
- data/test/parsers/payment_execution_detail_item_test.rb +0 -16
- data/test/parsers/payment_execution_detail_test.rb +0 -13
- data/test/parsers/service_status_message_test.rb +0 -16
- data/test/parsers/service_status_test.rb +0 -38
- data/test/parsers/test_helper.rb +0 -10
- data/test/requests/order_items_test.rb +0 -36
- data/test/requests/orders_test.rb +0 -46
- data/test/requests/service_status_test.rb +0 -22
- data/test/requests/test_helper.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a19c5ef1c9834c6008a1618a7e2b9740dbc264d6
|
4
|
+
data.tar.gz: d7a3b54bdeb81dd00380076535e869747e46b71f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36ea87627bac392e57c5e6abd92ecc2e6beee64d3b38458a9a8e6ddb4b5f278de30d160569099c6fc3ee50a51d81d20d61d6e2ea44c89a9d77e001984384cf04
|
7
|
+
data.tar.gz: ab91b32c50a02f8f964c1f4bb94753a26801b1d6ed8a0b648a63fae4b4bb731efefbdcf347cb4deddfc7a957670917e034604a810033ae4f0c777db0774b0abb
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,50 +1,50 @@
|
|
1
1
|
# MWS Orders
|
2
2
|
|
3
|
-
**MWS Orders** is a
|
4
|
-
|
3
|
+
**MWS Orders** is a full-featured Ruby interface to the [Amazon Marketplace Web Service (MWS) Orders API](http://docs.developer.amazonservices.com/en_UK/orders/index.html). With the MWS Orders API, you can list orders created or updated during a time frame you specify or retrieve information about specific orders.
|
4
|
+
|
5
|
+
To use Amazon MWS, you must have an eligible seller account.
|
5
6
|
|
6
7
|
## Usage
|
7
8
|
|
8
|
-
|
9
|
+
Create a client:
|
9
10
|
|
10
11
|
```ruby
|
11
|
-
|
12
|
+
require "mws-orders"
|
13
|
+
client = MWS.orders
|
12
14
|
```
|
13
15
|
|
14
|
-
[
|
16
|
+
Set up credentials [when instantiating or with environment variables](https://github.com/hakanensari/peddler#quick-start).
|
15
17
|
|
16
18
|
### Orders
|
17
19
|
|
18
20
|
List orders created or updated during a time frame you specify:
|
19
21
|
|
20
22
|
```ruby
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
order_status: %w(Pending Unshipped)
|
23
|
+
orders = client.list_orders(created_after: 1.month.ago)
|
24
|
+
puts orders.count # => 100
|
25
|
+
puts orders.first # => #<MWS::Orders::Order amazon_order_id="123...
|
25
26
|
)
|
26
27
|
```
|
27
28
|
|
28
29
|
List the next page of orders:
|
29
30
|
|
30
31
|
```ruby
|
31
|
-
client.list_orders_by_next_token
|
32
|
+
client.list_orders_by_next_token(orders.next_token)
|
32
33
|
```
|
33
34
|
|
34
35
|
Get one or more orders based on their order numbers:
|
35
36
|
|
36
37
|
```ruby
|
37
|
-
client.get_order(
|
38
|
+
order = client.get_order("123-1234567-1234567")
|
39
|
+
puts order # => #<MWS::Orders::Order amazon_order_id="123...
|
38
40
|
```
|
39
41
|
|
40
|
-
All above queries will return an enumerable list of orders.
|
41
|
-
|
42
42
|
### Order Items
|
43
43
|
|
44
|
-
List order items
|
44
|
+
List order items:
|
45
45
|
|
46
46
|
```ruby
|
47
|
-
client.list_order_items(
|
47
|
+
order_items = client.list_order_items("123-1234567-1234567")
|
48
48
|
```
|
49
49
|
|
50
50
|
List the next page of order items:
|
@@ -53,7 +53,7 @@ List the next page of order items:
|
|
53
53
|
client.list_order_items_by_next_token
|
54
54
|
```
|
55
55
|
|
56
|
-
|
56
|
+
Orders and order items are represented by POROs that map one on one to the attributes returned by the API.
|
57
57
|
|
58
58
|
### Service Status
|
59
59
|
|
@@ -62,12 +62,3 @@ Check the operational status of the API:
|
|
62
62
|
```ruby
|
63
63
|
client.get_service_status
|
64
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
|
data/lib/mws-orders.rb
CHANGED
@@ -1,29 +1,2 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require 'forwardable'
|
4
|
-
require 'time'
|
5
|
-
|
6
|
-
require 'money'
|
7
|
-
require 'nokogiri'
|
8
|
-
require 'peddler'
|
9
|
-
require 'structure'
|
10
|
-
|
11
|
-
require 'mws/orders/client'
|
12
|
-
require 'mws/orders/helpers/structured_list'
|
13
|
-
require 'mws/orders/helpers/parameters'
|
14
|
-
require 'mws/orders/requests/base'
|
15
|
-
require 'mws/orders/requests/orders'
|
16
|
-
require 'mws/orders/requests/order_items'
|
17
|
-
require 'mws/orders/requests/service_status'
|
18
|
-
require 'mws/orders/parsers/base'
|
19
|
-
require 'mws/orders/parsers/model'
|
20
|
-
require 'mws/orders/parsers/collection'
|
21
|
-
require 'mws/orders/parsers/orders'
|
22
|
-
require 'mws/orders/parsers/order'
|
23
|
-
require 'mws/orders/parsers/shipping_address'
|
24
|
-
require 'mws/orders/parsers/payment_execution_detail'
|
25
|
-
require 'mws/orders/parsers/payment_execution_detail_item'
|
26
|
-
require 'mws/orders/parsers/order_items'
|
27
|
-
require 'mws/orders/parsers/order_item'
|
28
|
-
require 'mws/orders/parsers/service_status'
|
29
|
-
require 'mws/orders/parsers/service_status_message'
|
1
|
+
require "peddler"
|
2
|
+
require "mws/orders/parser"
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "mws/orders/document"
|
2
|
+
|
3
|
+
module MWS
|
4
|
+
module Orders
|
5
|
+
class Collection < Document
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
def each
|
9
|
+
raise NotImplementedError
|
10
|
+
end
|
11
|
+
|
12
|
+
def empty?
|
13
|
+
count == 0
|
14
|
+
end
|
15
|
+
|
16
|
+
def inspect
|
17
|
+
"#<#{self.class} #{
|
18
|
+
if count > 3
|
19
|
+
"[#{take(3).map(&:inspect).join(', ')}...]"
|
20
|
+
else
|
21
|
+
"[#{map(&:inspect).join(', ')}]"
|
22
|
+
end
|
23
|
+
}>"
|
24
|
+
end
|
25
|
+
|
26
|
+
alias_method :to_s, :inspect
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "structure"
|
2
|
+
|
3
|
+
module MWS
|
4
|
+
module Orders
|
5
|
+
class Document
|
6
|
+
include Structure
|
7
|
+
|
8
|
+
attr_reader :node
|
9
|
+
|
10
|
+
def initialize(node)
|
11
|
+
@node = node
|
12
|
+
end
|
13
|
+
|
14
|
+
def xpath(path)
|
15
|
+
node.xpath(add_namespace(path))
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def add_namespace(path)
|
21
|
+
path
|
22
|
+
.split("/")
|
23
|
+
.map { |attr| "xmlns:#{attr}" }
|
24
|
+
.join("/")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "cgi"
|
2
|
+
require "time"
|
3
|
+
require "money"
|
4
|
+
require "mws/orders/document"
|
5
|
+
|
6
|
+
module MWS
|
7
|
+
module Orders
|
8
|
+
class Entity < Document
|
9
|
+
def float_at_xpath(path)
|
10
|
+
text = text_at_xpath(path)
|
11
|
+
text.to_f if text
|
12
|
+
end
|
13
|
+
|
14
|
+
def integer_at_xpath(path)
|
15
|
+
text = text_at_xpath(path)
|
16
|
+
text.to_i if text
|
17
|
+
end
|
18
|
+
|
19
|
+
def money_at_xpath(path)
|
20
|
+
return unless amount = float_at_xpath("#{path}/Amount")
|
21
|
+
|
22
|
+
currency_code = text_at_xpath("#{path}/CurrencyCode")
|
23
|
+
amount = amount * 100 unless currency_code == "JPY"
|
24
|
+
|
25
|
+
Money.new(amount, currency_code)
|
26
|
+
end
|
27
|
+
|
28
|
+
def time_at_xpath(path)
|
29
|
+
text = text_at_xpath(path)
|
30
|
+
Time.parse(CGI.unescape(text)) if text
|
31
|
+
end
|
32
|
+
|
33
|
+
def text_at_xpath(path)
|
34
|
+
node = xpath(path).first
|
35
|
+
node.text.strip if node
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "mws/orders/entity"
|
2
|
+
|
3
|
+
module MWS
|
4
|
+
module Orders
|
5
|
+
class InvoiceData < Entity
|
6
|
+
attribute(:invoice_requirement) do
|
7
|
+
text_at_xpath("InvoiceRequirement")
|
8
|
+
end
|
9
|
+
|
10
|
+
attribute(:buyer_selected_invoice_category) do
|
11
|
+
text_at_xpath("BuyerSelectedInvoiceCategory")
|
12
|
+
end
|
13
|
+
|
14
|
+
attribute(:invoice_title) do
|
15
|
+
text_at_xpath("InvoiceTitle")
|
16
|
+
end
|
17
|
+
|
18
|
+
attribute(:invoice_information) do
|
19
|
+
text_at_xpath("InvoiceInformation")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require "mws/orders/entity"
|
2
|
+
require "mws/orders/shipping_address"
|
3
|
+
require "mws/orders/payment_execution_detail"
|
4
|
+
|
5
|
+
module MWS
|
6
|
+
module Orders
|
7
|
+
class Order < Entity
|
8
|
+
attribute(:amazon_order_id) do
|
9
|
+
text_at_xpath("AmazonOrderId")
|
10
|
+
end
|
11
|
+
|
12
|
+
attribute(:seller_order_id) do
|
13
|
+
text_at_xpath("SellerOrderId")
|
14
|
+
end
|
15
|
+
|
16
|
+
attribute(:purchased_at) do
|
17
|
+
time_at_xpath("PurchaseDate")
|
18
|
+
end
|
19
|
+
|
20
|
+
attribute(:last_updated_at) do
|
21
|
+
time_at_xpath("LastUpdateDate")
|
22
|
+
end
|
23
|
+
|
24
|
+
attribute(:status) do
|
25
|
+
text_at_xpath("OrderStatus")
|
26
|
+
end
|
27
|
+
|
28
|
+
attribute(:fulfillment_channel) do
|
29
|
+
text_at_xpath("FulfillmentChannel")
|
30
|
+
end
|
31
|
+
|
32
|
+
attribute(:sales_channel) do
|
33
|
+
text_at_xpath("SalesChannel")
|
34
|
+
end
|
35
|
+
|
36
|
+
attribute(:order_channel) do
|
37
|
+
text_at_xpath("OrderChannel")
|
38
|
+
end
|
39
|
+
|
40
|
+
attribute(:ship_service_level) do
|
41
|
+
text_at_xpath("ShipServiceLevel")
|
42
|
+
end
|
43
|
+
|
44
|
+
attribute(:shipping_address) do
|
45
|
+
if node = xpath("ShippingAddress").first
|
46
|
+
ShippingAddress.new(node)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
attribute(:total) do
|
51
|
+
money_at_xpath("OrderTotal")
|
52
|
+
end
|
53
|
+
|
54
|
+
attribute(:number_of_items_shipped) do
|
55
|
+
integer_at_xpath("NumberOfItemsShipped")
|
56
|
+
end
|
57
|
+
|
58
|
+
attribute(:number_of_items_unshipped) do
|
59
|
+
integer_at_xpath("NumberOfItemsUnshipped")
|
60
|
+
end
|
61
|
+
|
62
|
+
attribute(:payment_execution_detail) do
|
63
|
+
if node = xpath("PaymentExecutionDetail").first
|
64
|
+
PaymentExecutionDetail.new(node)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
attribute(:payment_method) do
|
69
|
+
text_at_xpath("PaymentMethod")
|
70
|
+
end
|
71
|
+
|
72
|
+
attribute(:marketplace_id) do
|
73
|
+
text_at_xpath("MarketplaceId")
|
74
|
+
end
|
75
|
+
|
76
|
+
attribute(:buyer_name) do
|
77
|
+
text_at_xpath("BuyerName")
|
78
|
+
end
|
79
|
+
|
80
|
+
attribute(:buyer_email) do
|
81
|
+
text_at_xpath("BuyerEmail")
|
82
|
+
end
|
83
|
+
|
84
|
+
attribute(:shipment_service_level_category) do
|
85
|
+
text_at_xpath("ShipmentServiceLevelCategory")
|
86
|
+
end
|
87
|
+
|
88
|
+
attribute(:cba_displayable_shipping_label) do
|
89
|
+
text_at_xpath("CbaDisplayableShippingLabel")
|
90
|
+
end
|
91
|
+
|
92
|
+
attribute(:shipped_by_amazon_tfm) do
|
93
|
+
text_at_xpath("ShippedByAmazonTFM")
|
94
|
+
end
|
95
|
+
|
96
|
+
attribute(:tfm_shipment_status) do
|
97
|
+
text_at_xpath("TFMShipmentStatus")
|
98
|
+
end
|
99
|
+
|
100
|
+
attribute(:type) do
|
101
|
+
text_at_xpath("OrderType")
|
102
|
+
end
|
103
|
+
|
104
|
+
attribute(:earliest_shipped_at) do
|
105
|
+
time_at_xpath("EarliestShipDate")
|
106
|
+
end
|
107
|
+
|
108
|
+
attribute(:latest_shipped_at) do
|
109
|
+
time_at_xpath("LatestShipDate")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require "mws/orders/entity"
|
2
|
+
require "mws/orders/invoice_data"
|
3
|
+
|
4
|
+
module MWS
|
5
|
+
module Orders
|
6
|
+
class OrderItem < Entity
|
7
|
+
attribute(:asin) do
|
8
|
+
text_at_xpath("ASIN")
|
9
|
+
end
|
10
|
+
|
11
|
+
attribute(:seller_sku) do
|
12
|
+
text_at_xpath("SellerSKU")
|
13
|
+
end
|
14
|
+
|
15
|
+
attribute(:order_item_id) do
|
16
|
+
text_at_xpath("OrderItemId")
|
17
|
+
end
|
18
|
+
|
19
|
+
attribute(:title) do
|
20
|
+
text_at_xpath("Title")
|
21
|
+
end
|
22
|
+
|
23
|
+
attribute(:quantity_ordered) do
|
24
|
+
integer_at_xpath("QuantityOrdered")
|
25
|
+
end
|
26
|
+
|
27
|
+
attribute(:quantity_shipped) do
|
28
|
+
integer_at_xpath("QuantityShipped")
|
29
|
+
end
|
30
|
+
|
31
|
+
attribute(:gift_message_text) do
|
32
|
+
text_at_xpath("GiftMessageText")
|
33
|
+
end
|
34
|
+
|
35
|
+
attribute(:gift_wrap_level) do
|
36
|
+
text_at_xpath("GiftWrapLevel")
|
37
|
+
end
|
38
|
+
|
39
|
+
attribute(:item_price) do
|
40
|
+
money_at_xpath("ItemPrice")
|
41
|
+
end
|
42
|
+
|
43
|
+
attribute(:shipping_price) do
|
44
|
+
money_at_xpath("ShippingPrice")
|
45
|
+
end
|
46
|
+
|
47
|
+
attribute(:gift_wrap_price) do
|
48
|
+
money_at_xpath("GiftWrapPrice")
|
49
|
+
end
|
50
|
+
|
51
|
+
attribute(:item_tax) do
|
52
|
+
money_at_xpath("ItemTax")
|
53
|
+
end
|
54
|
+
|
55
|
+
attribute(:shipping_tax) do
|
56
|
+
money_at_xpath("ShippingTax")
|
57
|
+
end
|
58
|
+
|
59
|
+
attribute(:gift_wrap_tax) do
|
60
|
+
money_at_xpath("GiftWrapPrice")
|
61
|
+
end
|
62
|
+
|
63
|
+
attribute(:shipping_discount) do
|
64
|
+
money_at_xpath("ShippingDiscount")
|
65
|
+
end
|
66
|
+
|
67
|
+
attribute(:promotion_discount) do
|
68
|
+
money_at_xpath("PromotionDiscount")
|
69
|
+
end
|
70
|
+
|
71
|
+
attribute(:promotion_ids) do
|
72
|
+
xpath("PromotionId").map(&:text)
|
73
|
+
end
|
74
|
+
|
75
|
+
attribute(:cod_fee) do
|
76
|
+
money_at_xpath("CODFee")
|
77
|
+
end
|
78
|
+
|
79
|
+
attribute(:cod_fee_discount) do
|
80
|
+
money_at_xpath("CODFeeDiscount")
|
81
|
+
end
|
82
|
+
|
83
|
+
attribute(:invoice_data) do
|
84
|
+
xpath("InvoiceData").map { |node| InvoiceData.new(node) }
|
85
|
+
end
|
86
|
+
|
87
|
+
attribute(:condition_id) do
|
88
|
+
text_at_xpath("ConditionId")
|
89
|
+
end
|
90
|
+
|
91
|
+
attribute(:condition_subtype_id) do
|
92
|
+
text_at_xpath("ConditionSubtypeId")
|
93
|
+
end
|
94
|
+
|
95
|
+
attribute(:condition_note) do
|
96
|
+
text_at_xpath("ConditionNote")
|
97
|
+
end
|
98
|
+
|
99
|
+
attribute(:scheduled_delivery_ends_at) do
|
100
|
+
time_at_xpath("ScheduledDeliveryEndDate")
|
101
|
+
end
|
102
|
+
|
103
|
+
attribute(:scheduled_delivery_starts_at) do
|
104
|
+
time_at_xpath("ScheduledDeliveryStartDate")
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|