peddler 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +237 -8
  3. data/lib/mws/feeds.rb +1 -0
  4. data/lib/mws/feeds/client.rb +97 -0
  5. data/lib/mws/feeds/parsers/feed.rb +14 -0
  6. data/lib/mws/feeds/parsers/feed_submission.rb +25 -0
  7. data/lib/mws/feeds/parsers/feed_submission_count.rb +13 -0
  8. data/lib/mws/feeds/parsers/feed_submission_list.rb +20 -0
  9. data/lib/mws/feeds/parsers/feed_submission_result.rb +10 -0
  10. data/lib/mws/feeds/parsers/feed_submissions.rb +18 -0
  11. data/lib/mws/feeds/requests/feed.rb +38 -0
  12. data/lib/mws/feeds/requests/feed_submission_count.rb +20 -0
  13. data/lib/mws/feeds/requests/feed_submission_list.rb +28 -0
  14. data/lib/mws/feeds/requests/feed_submission_result.rb +18 -0
  15. data/lib/mws/feeds/requests/feed_submissions.rb +20 -0
  16. data/lib/mws/fulfillment_inbound_shipment/client.rb +7 -0
  17. data/lib/mws/fulfillment_inventory/client.rb +7 -0
  18. data/lib/mws/fulfillment_outbound_shipment/client.rb +7 -0
  19. data/lib/mws/off_amazon_payments/client.rb +7 -0
  20. data/lib/mws/orders.rb +1 -0
  21. data/lib/mws/orders/client.rb +88 -0
  22. data/lib/mws/orders/parsers/invoice_data.rb +25 -0
  23. data/lib/mws/orders/parsers/order.rb +113 -0
  24. data/lib/mws/orders/parsers/order_item.rb +110 -0
  25. data/lib/mws/orders/parsers/order_items.rb +20 -0
  26. data/lib/mws/orders/parsers/orders.rb +20 -0
  27. data/lib/mws/orders/parsers/payment_execution_detail.rb +20 -0
  28. data/lib/mws/orders/parsers/payment_execution_detail_item.rb +17 -0
  29. data/lib/mws/orders/parsers/service_status.rb +36 -0
  30. data/lib/mws/orders/parsers/service_status_message.rb +17 -0
  31. data/lib/mws/orders/parsers/shipping_address.rb +37 -0
  32. data/lib/mws/orders/requests/order_items.rb +26 -0
  33. data/lib/mws/orders/requests/orders.rb +39 -0
  34. data/lib/mws/orders/requests/service_status.rb +15 -0
  35. data/lib/mws/products/client.rb +7 -0
  36. data/lib/mws/recommendations/client.rb +7 -0
  37. data/lib/mws/reports/client.rb +6 -0
  38. data/lib/mws/sellers/client.rb +7 -0
  39. data/lib/mws/subscriptions/client.rb +7 -0
  40. data/lib/peddler.rb +11 -1
  41. data/lib/peddler/client.rb +62 -0
  42. data/lib/peddler/parsers/base.rb +15 -0
  43. data/lib/peddler/parsers/collection.rb +23 -0
  44. data/lib/peddler/parsers/model.rb +43 -0
  45. data/lib/peddler/parsers/text.rb +13 -0
  46. data/lib/peddler/parsers/xml.rb +25 -0
  47. data/lib/peddler/request.rb +50 -0
  48. data/lib/peddler/request/parameters.rb +56 -0
  49. data/lib/peddler/request/structured_list.rb +43 -0
  50. data/lib/peddler/response_wrapper.rb +32 -0
  51. data/lib/peddler/version.rb +1 -1
  52. data/test/fixtures/feeds/feed_submission.xml +14 -0
  53. data/test/fixtures/feeds/feed_submission_count.xml +9 -0
  54. data/test/fixtures/feeds/feed_submission_list.xml +17 -0
  55. data/test/fixtures/feeds/feed_submissions.xml +15 -0
  56. data/test/fixtures/mws.yml +8 -0
  57. data/test/fixtures/mws.yml.example +4 -0
  58. data/test/fixtures/orders/order_items.xml +83 -0
  59. data/test/fixtures/orders/orders.xml +109 -0
  60. data/test/fixtures/orders/service_status.xml +19 -0
  61. data/test/helper.rb +5 -0
  62. data/test/integration/feeds/test_feed_submission_count.rb +13 -0
  63. data/test/integration/feeds/test_feed_submission_list.rb +15 -0
  64. data/test/integration/feeds/test_feed_submission_result.rb +15 -0
  65. data/test/integration/orders/test_order_items.rb +19 -0
  66. data/test/integration/orders/test_orders.rb +20 -0
  67. data/test/integration/orders/test_service_status.rb +12 -0
  68. data/test/integration_helper.rb +16 -0
  69. data/test/mws/feeds/parsers/test_feed.rb +13 -0
  70. data/test/mws/feeds/parsers/test_feed_submission.rb +25 -0
  71. data/test/mws/feeds/parsers/test_feed_submission_count.rb +13 -0
  72. data/test/mws/feeds/parsers/test_feed_submission_list.rb +14 -0
  73. data/test/mws/feeds/parsers/test_feed_submission_result.rb +13 -0
  74. data/test/mws/feeds/parsers/test_feed_submissions.rb +17 -0
  75. data/test/mws/feeds/requests/test_feed.rb +63 -0
  76. data/test/mws/feeds/requests/test_feed_submission_count.rb +23 -0
  77. data/test/mws/feeds/requests/test_feed_submission_list.rb +40 -0
  78. data/test/mws/feeds/requests/test_feed_submissions.rb +29 -0
  79. data/test/mws/orders/parsers/test_order.rb +86 -0
  80. data/test/mws/orders/parsers/test_order_item.rb +69 -0
  81. data/test/mws/orders/parsers/test_order_items.rb +14 -0
  82. data/test/mws/orders/parsers/test_orders.rb +14 -0
  83. data/test/mws/orders/parsers/test_payment_execution_detail.rb +14 -0
  84. data/test/mws/orders/parsers/test_payment_execution_detail_item.rb +17 -0
  85. data/test/mws/orders/parsers/test_service_status.rb +39 -0
  86. data/test/mws/orders/parsers/test_service_status_message.rb +17 -0
  87. data/test/mws/orders/parsers/test_shipping_address.rb +36 -0
  88. data/test/mws/orders/requests/test_order_items.rb +39 -0
  89. data/test/mws/orders/requests/test_orders.rb +49 -0
  90. data/test/mws/orders/requests/test_service_status.rb +25 -0
  91. data/test/parser_helper.rb +11 -0
  92. data/test/peddler/parsers/test_collection.rb +8 -0
  93. data/test/peddler/parsers/test_model.rb +34 -0
  94. data/test/peddler/request/test_parameters.rb +35 -0
  95. data/test/peddler/request/test_structured_list.rb +18 -0
  96. data/test/peddler/test_client.rb +42 -0
  97. data/test/request_helper.rb +20 -0
  98. metadata +213 -10
  99. data/lib/peddler/apis.rb +0 -45
  100. data/lib/peddler/service.rb +0 -83
  101. data/test/service_test.rb +0 -42
  102. data/test/test_helper.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b89bab8ffb0fcd4902068dbcdb8b47917eaed6d4
4
- data.tar.gz: 8bfa9a382b50cb908099f69d50fd36d3f530e4dc
3
+ metadata.gz: 54909f8d993396b8132138eef8f201c75acebd89
4
+ data.tar.gz: 2db773a47532b898dc0e1227ada67e6ef3d343ba
5
5
  SHA512:
6
- metadata.gz: 2062379662693c265f8d0884d92c341156db7303487e87e5ecd805bbefdf0fed425e033345a4965e72e53b75bfc51e5f3791a7ebfaca99b0438c35f04319bfcb
7
- data.tar.gz: ae0055bc9d6d0977f73ca479537f38324dead20611dbfb17a259485b7ec7faf279a8dd55839f95539474a1300ee978a6e303a8f06e0521f3f50f769fd83171b2
6
+ metadata.gz: a028b4d07e66d3cf49078cc4b32c7ddff925f5524447e70043f3c88d4552a26d86ab1d08ae7763176a1968b23c3b0d942e827c8aa6bc15385d5513c1114c93a6
7
+ data.tar.gz: 1805a78cc4684b60d7a6f820f06a3b1a6a162773b79d27d8061a5507231ebbf57115b530ea9a1cc52fadf8bfa2bba028c4f48a0f5157b182e1a1da0c77019d70
data/README.md CHANGED
@@ -2,21 +2,250 @@
2
2
 
3
3
  ![Peddler][1]
4
4
 
5
- Peddler provides a light-weight wrapper around the [Amazon Marketplace Web
5
+ **Peddler** is a full-featured Ruby interface to the [Amazon Marketplace Web
6
6
  Service (MWS) APIs][2].
7
7
 
8
8
  ## Usage
9
9
 
10
+ Require the library:
11
+
12
+ ```ruby
13
+ require 'peddler'
14
+ ```
15
+
16
+ Alternatively, require a particular API only:
17
+
18
+ ```ruby
19
+ require 'mws/orders'
20
+ ```
21
+
22
+ Instantiate a client with the ISO 3166-1 two-letter country code of the
23
+ marketplace and your seller credentials:
24
+
25
+ ```ruby
26
+ client = MWS::Orders::Client.new('GB', 'key', 'secret', 'merchant_id')
27
+ ```
28
+
29
+ Alternatively, set your credentials as environment variables in your shell:
30
+
31
+ ```sh
32
+ export AWS_ACCESS_KEY_ID=key
33
+ export AWS_SECRET_ACCESS_KEY=secret
34
+ export MERCHANT_ID=merchant_id
35
+ ```
36
+
37
+ Then, instantiate with the country code:
38
+
39
+ ```ruby
40
+ client = MWS::Orders::Client.new('US')
41
+ ```
42
+
43
+ ### Feeds
44
+
45
+ The MWS Feeds API lets you upload inventory and order data to Amazon. You can
46
+ also use this API to get information about the processing of feeds.
47
+
48
+ [API methods are available on the client][3].
49
+
50
+ Instantiate a client:
51
+
52
+ ```ruby
53
+ client = MWS::Feeds::Client.new('GB')
54
+ ```
55
+
56
+ #### Submit Feed
57
+
58
+ Submit a feed:
59
+
60
+ ```ruby
61
+ client.submit_feed(xml, '_POST_PRODUCT_DATA_')
62
+ ```
63
+
64
+ #### Feed Submission List
65
+
66
+ List past feed submissions:
67
+
68
+ ```ruby
69
+ # See the API for all available parameters for this and other methods.
70
+ client.get_feed_submissions
71
+ ```
72
+
73
+ List the next page of feed submissions:
74
+
75
+ ```ruby
76
+ client.get_feed_submissions_by_next_token
77
+ ```
78
+
79
+ #### Feed Submission Count
80
+
81
+ Get the feed submission count:
82
+
83
+ ```ruby
84
+ client.get_feed_submission_count(submitted_from_date: 1.day.ago)
85
+ ```
86
+
87
+ #### Feed Submission Result
88
+
89
+ Get the processing report for a submitted feed.
90
+
91
+ ```ruby
92
+ client.feed_submission_result('123456')
93
+ ```
94
+
95
+ ### Fulfillment Inbound Shipment
96
+
97
+ This API is not implemented yet. You can still use the raw client like so:
98
+
99
+ ```ruby
100
+ client = MWS::FulfillmentInboundShipment::Client.new('GB')
101
+ ```
102
+
103
+ Pull requests are welcome!
104
+
105
+ ### Fulfillment Inventory
106
+
107
+ This API is not implemented yet. You can still use the raw client like so:
108
+
109
+ ```ruby
110
+ client = MWS::FulfillmentInventory::Client.new('GB')
111
+ ```
112
+
113
+ Pull requests are welcome!
114
+
115
+ ### Fulfillment Outbound Shipment
116
+
117
+ This API is not implemented yet. You can still use the raw client like so:
118
+
119
+ ```ruby
120
+ client = MWS::FulfillmentOutboundShipment::Client.new('GB')
121
+ ```
122
+
123
+ Pull requests are welcome!
124
+
125
+ ### Off Amazon Payments
126
+
127
+ This API is not implemented yet. You can still use the raw client like so:
128
+
129
+ ```ruby
130
+ client = MWS::OffAmazonPayments::Client.new('GB')
131
+ ```
132
+
133
+ Pull requests are welcome!
134
+
135
+ ### Orders
136
+
137
+ With the MWS Orders API, you can list orders created or updated during a time
138
+ frame you specify or retrieve information about specific orders.
139
+
140
+ [API methods are available on the client][4].
141
+
142
+ Instantiate a client:
143
+
144
+ ```ruby
145
+ client = MWS::Orders::Client.new('GB')
146
+ ```
147
+
148
+ #### Orders
149
+
150
+ List orders:
151
+
152
+ ```ruby
153
+ # See the API for all available parameters.
154
+ client.list_orders(
155
+ created_after: 1.week.ago,
156
+ order_status: %w(Pending Unshipped)
157
+ )
158
+ ```
159
+
160
+ List the next page of orders:
161
+
162
+ ```ruby
163
+ client.list_orders_by_next_token
164
+ ```
165
+
166
+ Get one or more orders based on their order numbers:
167
+
168
+ ```ruby
169
+ client.get_order('123-1234567-1234567')
170
+ ```
171
+
172
+ All above queries will return an enumerable list of orders.
173
+
174
+ #### Order Items
175
+
176
+ List order items based on an order number you specify:
177
+
178
+ ```ruby
179
+ client.list_order_items('123-1234567-1234567')
180
+ ```
181
+
182
+ List the next page of order items:
183
+
184
+ ```ruby
185
+ client.list_order_items_by_next_token
186
+ ```
187
+
188
+ All above queries will return an enumerable list of order items.
189
+
190
+ #### Service Status
191
+
192
+ Check the operational status of the API:
193
+
194
+ ```ruby
195
+ client.get_service_status
196
+ ```
197
+
198
+ ### Products
199
+
200
+ This API is not implemented yet. You can still use the raw client like so:
201
+
202
+ ```ruby
203
+ client = MWS::Products::Client.new('GB')
204
+ ```
205
+
206
+ Pull requests are welcome!
207
+
208
+ ### Recommendations
209
+
210
+ This API is not implemented yet. You can still use the raw client like so:
211
+
212
+ ```ruby
213
+ client = MWS::Recommendations::Client.new('GB')
214
+ ```
215
+
216
+ Pull requests are welcome!
217
+
218
+ ### Reports
219
+
220
+ This API is not implemented yet. You can still use the raw client like so:
221
+
10
222
  ```ruby
11
- client = Peddler::Products.new('US', 'aws_key', 'aws_secret, 'seller_id')
12
- params = {
13
- 'Marketplace' => client.marketplace_id('US'),
14
- 'Action' => 'ListMatchingProducts',
15
- 'Query' => 'Architecture'
16
- }
223
+ client = MWS::Reports::Client.new('GB')
224
+ ```
225
+
226
+ Pull requests are welcome!
227
+
228
+ ### Sellers
229
+
230
+ This API is not implemented yet. You can still use the raw client like so:
17
231
 
18
- res = client.get(query: params)
232
+ ```ruby
233
+ client = MWS::Sellers::Client.new('GB')
234
+ ```
235
+
236
+ Pull requests are welcome!
237
+
238
+ ### Subscriptions
239
+
240
+ This API is not implemented yet. You can still use the raw client like so:
241
+
242
+ ```ruby
243
+ client = MWS::Subscriptions::Client.new('GB')
19
244
  ```
20
245
 
246
+ Pull requests are welcome!
247
+
21
248
  [1]: http://f.cl.ly/items/0W3V0A1Z110Q0x461b3H/mussels.jpeg
22
249
  [2]: https://developer.amazonservices.com/gp/mws/docs.html
250
+ [3]: https://github.com/papercavalier/peddler/blob/master/lib/mws/feeds/client.rb
251
+ [4]: https://github.com/papercavalier/peddler/blob/master/lib/mws/orders/client.rb
data/lib/mws/feeds.rb ADDED
@@ -0,0 +1 @@
1
+ require 'mws/feeds/client'
@@ -0,0 +1,97 @@
1
+ require 'mws/feeds/requests/feed'
2
+ require 'mws/feeds/requests/feed_submission_list'
3
+ require 'mws/feeds/requests/feed_submission_count'
4
+ require 'mws/feeds/requests/feed_submission_result'
5
+ require 'peddler/client'
6
+
7
+ module MWS
8
+ module Feeds
9
+ class Client < ::Peddler::Client
10
+ # Public: Upload a feed for processing by Amazon MWS.
11
+ #
12
+ # content - The String content of the feed, in XML or flat file format.
13
+ # type - A String value indicating how the data should be processed.
14
+ # options - Other optional Hash query parameters used to define the
15
+ # submission.
16
+ # :marketplace_id_list - A list of one or more marketplace Ids
17
+ # that you want the feed to be applied
18
+ # to (defaults to the client's default
19
+ # country).
20
+ # :purge_and_replace - A Boolean value that enables the purge
21
+ # and replace functionality (default:
22
+ # false).
23
+ #
24
+ # Examples
25
+ #
26
+ # client.submit_feed(body, '_POST_PRODUCT_DATA_')
27
+ #
28
+ # Returns a Feed Submission.
29
+ def_delegator :feed, :submit, :submit_feed
30
+
31
+ # Public: Get a list of feed submissions submitted during a specified time
32
+ # frame.
33
+ #
34
+ # options - The Hash query parameters used to narrow the list. Refer to
35
+ # the MWS Feeds API for available parameters.
36
+ #
37
+ # Examples
38
+ #
39
+ # client.get_feed_submission_list(submitted_from_date: 1.week.ago)
40
+ #
41
+ # Returns an enumerable Feed Submission List.
42
+ def_delegator :feed_submission_list, :get, :get_feed_submission_list
43
+
44
+ # Public: List the next page of the list of feed submissions.
45
+ #
46
+ # Examples
47
+ #
48
+ # client.get_feed_submission_list_by_next_token
49
+ #
50
+ # Returns an enumerable Feed Submission List.
51
+ def_delegator :feed_submission_list, :get_by_next_token, :get_feed_submission_list_by_next_token
52
+
53
+ # Public: Returns a count of the feeds submitted during a specified time
54
+ # frame.
55
+ #
56
+ # options - The Hash query parameters used to narrow the list. Refer to
57
+ # the MWS Feeds API for available parameters.
58
+ #
59
+ # Examples
60
+ #
61
+ # client.get_feed_submission_count(submitted_from_date: 1.week.ago)
62
+ #
63
+ # Returns the Feed Submission Count.
64
+ def_delegator :feed_submission_count, :get, :get_feed_submission_count
65
+
66
+ # Public: Gets the feed processing report and the Content-MD5 header for
67
+ # the returned HTTP body.
68
+ #
69
+ # feed_submission_id - The String Feed Submission Id.
70
+ #
71
+ # Examples
72
+ #
73
+ # client.get_feed_submission_result('123456')
74
+ #
75
+ # Returns the Feed Submission Result.
76
+ def_delegator :feed_submission_result, :get, :get_feed_submission_result
77
+
78
+ private
79
+
80
+ def feed
81
+ @feed ||= Requests::Feed.new(self)
82
+ end
83
+
84
+ def feed_submission_list
85
+ @feed_submission_list ||= Requests::FeedSubmissionList.new(self)
86
+ end
87
+
88
+ def feed_submission_count
89
+ @feed_submission_count ||= Requests::FeedSubmissionCount.new(self)
90
+ end
91
+
92
+ def feed_submission_result
93
+ @feed_submission_result ||= Requests::FeedSubmissionResult.new(self)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,14 @@
1
+ require 'peddler/parsers/model'
2
+ require 'mws/feeds/parsers/feed_submission'
3
+
4
+ module MWS
5
+ module Feeds
6
+ module Parsers
7
+ class Feed < Peddler::Parsers::Model
8
+ value :submission do
9
+ FeedSubmission.new(document.xpath('xmlns:FeedSubmissionInfo').first)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,25 @@
1
+ require 'peddler/parsers/model'
2
+
3
+ module MWS
4
+ module Feeds
5
+ module Parsers
6
+ class FeedSubmission < ::Peddler::Parsers::Model
7
+ value :id do
8
+ text_at_xpath('FeedSubmissionId')
9
+ end
10
+
11
+ value :type do
12
+ text_at_xpath('FeedType')
13
+ end
14
+
15
+ value :submitted_at do
16
+ time_at_xpath('SubmittedDate')
17
+ end
18
+
19
+ value :processing_status do
20
+ text_at_xpath('FeedProcessingStatus')
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ require 'peddler/parsers/model'
2
+
3
+ module MWS
4
+ module Feeds
5
+ module Parsers
6
+ class FeedSubmissionCount < ::Peddler::Parsers::Model
7
+ value :count do
8
+ integer_at_xpath('Count')
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ require 'peddler/parsers/collection'
2
+ require 'mws/feeds/parsers/feed_submission'
3
+
4
+ module MWS
5
+ module Feeds
6
+ module Parsers
7
+ class FeedSubmissionList < ::Peddler::Parsers::Collection
8
+ def each(&blk)
9
+ feed_submission_nodes.each { |node| yield FeedSubmission.new(node) }
10
+ end
11
+
12
+ private
13
+
14
+ def feed_submission_nodes
15
+ xpath('FeedSubmissionInfo')
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end