peddler 0.3.1 → 0.4.1

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.
data/lib/peddler.rb CHANGED
@@ -1,18 +1,6 @@
1
- # Peddler is a Ruby wrapper to the Amazon Inventory management API.
2
- module Peddler
1
+ %w(
2
+ feeds fulfillment_inbound_shipment fulfillment_inventory
3
+ fulfillment_outbound_shipment orders products reports sellers
4
+ ).each do |service|
5
+ require "peddler/#{service}"
3
6
  end
4
-
5
- require 'active_support/core_ext/hash'
6
- require 'net/https'
7
- require 'ostruct'
8
- require 'peddler/version'
9
- require 'peddler/client'
10
- require 'peddler/handlers'
11
- require 'peddler/feeds'
12
- require 'peddler/inventory'
13
- require 'peddler/legacy_reports'
14
- require 'peddler/refunds'
15
- require 'peddler/reports'
16
- require 'peddler/transport'
17
- require 'tempfile'
18
- require 'time'
metadata CHANGED
@@ -1,206 +1,92 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: peddler
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.1
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Hakan Ensari
9
+ - Ezekiel Templin
14
10
  autorequire:
15
11
  bindir: bin
16
12
  cert_chain: []
17
-
18
- date: 2010-10-25 00:00:00 +01:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: activesupport
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 7
30
- segments:
31
- - 2
32
- - 3
33
- - 2
34
- version: 2.3.2
35
- type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: rdiscount
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
13
+ date: 2012-09-18 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ requirement: !ruby/object:Gem::Requirement
41
18
  none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 5
46
- segments:
47
- - 1
48
- - 6
49
- - 5
50
- version: 1.6.5
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
51
23
  type: :development
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: sdoc-helpers
55
24
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
57
26
  none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- hash: 19
62
- segments:
63
- - 0
64
- - 1
65
- - 4
66
- version: 0.1.4
67
- type: :development
68
- version_requirements: *id003
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
- prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- hash: 15
78
- segments:
79
- - 2
80
- - 0
81
- - 0
82
- version: 2.0.0
83
- type: :development
84
- version_requirements: *id004
85
- - !ruby/object:Gem::Dependency
86
- name: vcr
87
- prerelease: false
88
- requirement: &id005 !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: jeff
33
+ requirement: !ruby/object:Gem::Requirement
89
34
  none: false
90
- requirements:
35
+ requirements:
91
36
  - - ~>
92
- - !ruby/object:Gem::Version
93
- hash: 31
94
- segments:
95
- - 1
96
- - 2
97
- - 0
98
- version: 1.2.0
99
- type: :development
100
- version_requirements: *id005
101
- - !ruby/object:Gem::Dependency
102
- name: webmock
37
+ - !ruby/object:Gem::Version
38
+ version: 0.4.0
39
+ type: :runtime
103
40
  prerelease: false
104
- requirement: &id006 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
105
42
  none: false
106
- requirements:
43
+ requirements:
107
44
  - - ~>
108
- - !ruby/object:Gem::Version
109
- hash: 7
110
- segments:
111
- - 1
112
- - 4
113
- - 0
114
- version: 1.4.0
115
- type: :development
116
- version_requirements: *id006
117
- description: Peddler is a Ruby wrapper to the Amazon Inventory Management API.
118
- email:
119
- - hakan.ensari@papercavalier.com
45
+ - !ruby/object:Gem::Version
46
+ version: 0.4.0
47
+ description: A wrapper to the Amazon Marketplace Web Service (MWS) API
48
+ email:
49
+ - code@papercavalier.com
120
50
  executables: []
121
-
122
51
  extensions: []
123
-
124
52
  extra_rdoc_files: []
125
-
126
- files:
127
- - .gitignore
128
- - .rspec
129
- - .rvmrc
130
- - Gemfile
131
- - Gemfile.lock
132
- - LICENSE
133
- - README.md
134
- - Rakefile
135
- - lib/peddler.rb
136
- - lib/peddler/client.rb
53
+ files:
137
54
  - lib/peddler/feeds.rb
138
- - lib/peddler/handlers.rb
139
- - lib/peddler/inventory.rb
140
- - lib/peddler/legacy_reports.rb
141
- - lib/peddler/refunds.rb
55
+ - lib/peddler/fulfillment_inbound_shipment.rb
56
+ - lib/peddler/fulfillment_inventory.rb
57
+ - lib/peddler/fulfillment_outbound_shipment.rb
58
+ - lib/peddler/orders.rb
59
+ - lib/peddler/products.rb
142
60
  - lib/peddler/reports.rb
143
- - lib/peddler/transport.rb
61
+ - lib/peddler/sellers.rb
62
+ - lib/peddler/service.rb
144
63
  - lib/peddler/version.rb
145
- - mussels.jpg
146
- - peddler.gemspec
147
- - spec/peddler/client_spec.rb
148
- - spec/peddler/feeds_spec.rb
149
- - spec/peddler/handlers_spec.rb
150
- - spec/peddler/inventory_spec.rb
151
- - spec/peddler/legacy_reports_spec.rb
152
- - spec/peddler/refunds_spec.rb
153
- - spec/peddler/reports_spec.rb
154
- - spec/peddler/transport_spec.rb
155
- - spec/spec_helper.rb
156
- - spec/support/amazon.yml.example
157
- - spec/support/amazon_credentials.rb
158
- - spec/support/vcr.rb
159
- - spec_rubies
160
- has_rdoc: true
64
+ - lib/peddler.rb
65
+ - LICENSE
66
+ - README.md
161
67
  homepage: http://github.com/papercavalier/peddler
162
68
  licenses: []
163
-
164
69
  post_install_message:
165
70
  rdoc_options: []
166
-
167
- require_paths:
71
+ require_paths:
168
72
  - lib
169
- required_ruby_version: !ruby/object:Gem::Requirement
73
+ required_ruby_version: !ruby/object:Gem::Requirement
170
74
  none: false
171
- requirements:
172
- - - ">="
173
- - !ruby/object:Gem::Version
174
- hash: 3
175
- segments:
176
- - 0
177
- version: "0"
178
- required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '1.9'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
80
  none: false
180
- requirements:
181
- - - ">="
182
- - !ruby/object:Gem::Version
183
- hash: 3
184
- segments:
185
- - 0
186
- version: "0"
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
187
85
  requirements: []
188
-
189
- rubyforge_project: peddler
190
- rubygems_version: 1.3.7
86
+ rubyforge_project:
87
+ rubygems_version: 1.8.23
191
88
  signing_key:
192
89
  specification_version: 3
193
- summary: A Ruby wrapper to the Amazon Inventory Management API
194
- test_files:
195
- - spec/peddler/client_spec.rb
196
- - spec/peddler/feeds_spec.rb
197
- - spec/peddler/handlers_spec.rb
198
- - spec/peddler/inventory_spec.rb
199
- - spec/peddler/legacy_reports_spec.rb
200
- - spec/peddler/refunds_spec.rb
201
- - spec/peddler/reports_spec.rb
202
- - spec/peddler/transport_spec.rb
203
- - spec/spec_helper.rb
204
- - spec/support/amazon.yml.example
205
- - spec/support/amazon_credentials.rb
206
- - spec/support/vcr.rb
90
+ summary: Wraps the Amazon Marketplace Web Service API
91
+ test_files: []
92
+ has_rdoc:
data/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- pkg/*
2
- *.gem
3
- *.rbc
4
- .bundle
5
- amazon.yml
data/.rspec DELETED
@@ -1 +0,0 @@
1
- -cfd
data/.rvmrc DELETED
@@ -1,2 +0,0 @@
1
- rvm --create use ree@peddler
2
- rvm wrapper ree@peddler
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in peddler.gemspec
4
- gemspec
data/Gemfile.lock DELETED
@@ -1,47 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- peddler (0.3.0)
5
- activesupport (>= 2.3.2)
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- activesupport (3.0.1)
11
- addressable (2.2.2)
12
- crack (0.1.8)
13
- diff-lcs (1.1.2)
14
- json (1.4.6)
15
- rdiscount (1.6.5)
16
- rdoc (2.4.3)
17
- rspec (2.0.1)
18
- rspec-core (~> 2.0.1)
19
- rspec-expectations (~> 2.0.1)
20
- rspec-mocks (~> 2.0.1)
21
- rspec-core (2.0.1)
22
- rspec-expectations (2.0.1)
23
- diff-lcs (>= 1.1.2)
24
- rspec-mocks (2.0.1)
25
- rspec-core (~> 2.0.1)
26
- rspec-expectations (~> 2.0.1)
27
- sdoc (0.2.20)
28
- json (>= 1.1.3)
29
- rdoc (= 2.4.3)
30
- sdoc-helpers (0.1.4)
31
- sdoc (~> 0.2)
32
- vcr (1.2.0)
33
- webmock (1.4.0)
34
- addressable (>= 2.2.2)
35
- crack (>= 0.1.7)
36
-
37
- PLATFORMS
38
- ruby
39
-
40
- DEPENDENCIES
41
- activesupport (>= 2.3.2)
42
- peddler!
43
- rdiscount (~> 1.6.5)
44
- rspec (~> 2.0.0)
45
- sdoc-helpers (~> 0.1.4)
46
- vcr (~> 1.2.0)
47
- webmock (~> 1.4.0)
data/Rakefile DELETED
@@ -1,12 +0,0 @@
1
- require 'bundler'
2
- require 'rspec/core/rake_task'
3
- require 'sdoc_helpers'
4
-
5
- Bundler::GemHelper.install_tasks
6
-
7
- desc 'Run all specs in spec directory'
8
- RSpec::Core::RakeTask.new(:spec) do |spec|
9
- spec.pattern = 'spec/**/*_spec.rb'
10
- end
11
-
12
- task :default => :spec
@@ -1,229 +0,0 @@
1
- # = Peddler
2
- # Peddler is a Ruby wrapper to the {Amazon Inventory management API}[https://images-na.ssl-images-amazon.com/images/G/01/Amazon_AIM/Amazon_AIM.pdf].
3
- #
4
- # Peddler::Client contains some detailed explanation and examples of usage.
5
- module Peddler
6
- # This is the public interface of the Peddler library.
7
- class Client
8
- # Creates a client.
9
- #
10
- # client = Peddler::Client.new(
11
- # :username => 'foo@bar.com',
12
- # :password => 'secret',
13
- # :region => :us
14
- # )
15
- #
16
- # Alternatively, set attributes after creating the client:
17
- #
18
- # client = Peddler::Client.new
19
- # client.username = 'foo@bar.co.uk'
20
- # client.password = 'tad_more_secret'
21
- # client.region = 'uk'
22
- #
23
- def initialize(params={})
24
- [:username=, :password=, :region=].each do |method|
25
- self.class.send(:define_method, method, lambda { |value| transport.send(method, value) })
26
- end
27
- params.each_pair { |k, v| self.send("#{k}=", v) }
28
- end
29
-
30
- # Creates an inventory batch.
31
- #
32
- # batch = client.new_inventory_batch
33
- # book = new_inventory_item(
34
- #  :product_id => '1234567890',
35
- # :sku => 'SKU-001',
36
- # :price => 10.00,
37
- # :quantity => 1)
38
- # batch << book
39
- # batch.upload
40
- #
41
- # Once the batch is processed, you may view the report:
42
- #
43
- # report = client.new_report :upload, :id => batch.id
44
- # p report.body
45
- # => "Feed Processing Summary:\n\tNumber of records processed\t\t1\n\tNumber of records successful\t\t1\n\n"
46
- #
47
- def new_inventory_batch
48
- Peddler::Inventory::Batch.new(transport.dup)
49
- end
50
-
51
- # A short-hand method to purge inventory.
52
- #
53
- # client.purge_inventory
54
- #
55
- def purge_inventory
56
- empty_batch = Peddler::Inventory::Batch.new(transport.dup)
57
- empty_batch.upload(:method => 'purge')
58
-
59
- end
60
-
61
- # Creates an inventory item. Parameter keys are lowercased and underscored but otherwise the same as
62
- # the colum titles in the tab-delimited upload templates provided by Amazon.
63
- def new_inventory_item(params={})
64
- Peddler::Inventory::Item.new(params)
65
- end
66
-
67
- # Returns count of pending inventory uploads queued at Amazon.
68
- def inventory_queue
69
- Peddler::Inventory::Queue.count(transport)
70
- end
71
-
72
- # Creates an order fulfillment batch.
73
- #
74
- # feed = client.new_order_fulfillment_feed
75
- # fulfilled_order = client.new_fulfilled_order(
76
- # :order_id => "123-1234567-1234567",
77
- # :order_date => "2009-08-01")
78
- # feed << fulfilled_order
79
- # feed.upload
80
- # feed.status
81
- # => "_SUBMITTED_"
82
- # sleep(60)
83
- # feed.status!
84
- # => "_DONE_"
85
- # p feed.download.to_s
86
- #
87
- def new_order_fulfillment_feed
88
- Peddler::Feeds::OrderFulfillment::Batch.new(transport.dup)
89
- end
90
-
91
- # Creates an item that can then be added to an order fulfillment feed. Keys are lowercased and underscored but
92
- # otherwise the same as Amazon's headers. See section 7.1 in the API docs.
93
- def new_fulfilled_order(params={})
94
- Peddler::Feeds::OrderFulfillment::Item.new(params)
95
- end
96
-
97
- # Creates an order cancellation batch.
98
- #
99
- # feed = client.new_order_cancellation_feed
100
- # cancelled_order = client.new_cancelled_order(
101
- # :order_id => "123-1234567-1234567",
102
- # :cancellation_reason_code => "NoInventory",
103
- # :amazon_order_item_code => "12341234567890")
104
- # feed << cancelled_order
105
- # feed.upload
106
- # feed.status
107
- # => "_SUBMITTED_"
108
- # sleep(60)
109
- # feed.status!
110
- # => "_DONE_"
111
- # p feed.download.to_s
112
- #
113
- def new_order_cancellation_feed
114
- Peddler::Feeds::OrderCancellation::Batch.new(transport.dup)
115
- end
116
-
117
- # Creates an item that can then be added to an order cancellation feed. Keys are lowercased and underscored but
118
- # otherwise the same as Amazon's headers. See section 7.4 in the API docs.
119
- def new_cancelled_order(params={})
120
- Peddler::Feeds::OrderCancellation::Item.new(params)
121
- end
122
-
123
- # Creates a refund batch.
124
- #
125
- # batch = client.new_refund_batch
126
- # refund = client.new_refund(
127
- # :order_id => "123-1234567-1234567",
128
- # :payments_transaction_id => "12341234567890",
129
- # :refund_amount => 10.00,
130
- # :reason => "CouldNotShip",
131
- # :message => "With our apologies.")
132
- # batch << refund
133
- # batch.upload
134
- # sleep(60)
135
- # status = client.latest_reports :batch_refund, :count => 1
136
- # report = client.new_report(
137
- # :batch_refund,
138
- # :id => status[0].id)
139
- # p report.body
140
- # => "123-1234567-1234567order-item-id: 12341234567890\tSUCCESS 10.00 is Refunded.\r\n"
141
- #
142
- def new_refund_batch
143
- Peddler::Refunds::Batch.new(transport.dup)
144
- end
145
-
146
- # Creates a refund item that can then be added to a refund batch.
147
- #
148
- # Possible reasons: ["GeneralAdjustment", "CouldNotShip", "DifferentItem", "MerchandiseNotReceived", "MerchandiseNotAsDescribed"]
149
- def new_refund(params={})
150
- Peddler::Refunds::Item.new(params)
151
- end
152
-
153
- # Creates an instance for an already-generated report. Works only with
154
- # legacy reports, meaning anything that comes before section 7 in the API
155
- # docs.
156
- #
157
- # Possible report names: [:upload, :order, :preorder, :batch_refund,
158
- # :open_listings, :open_listings_lite, :open_listings_liter]
159
- #
160
- # You can download a specific report by using its ID. Otherwise, the
161
- # instance will fetch the latest available report. One oddball exception:
162
- # Upload reports do require an ID and will return nil if you don't provide
163
- # one.
164
- #
165
- # orders_report = client.new_report :order
166
- # orders = client.detab(orders_report.body)
167
- # orders[0].buyer_name
168
- # => "John Doe"
169
- #
170
- # preorders_report = client.new_report(
171
- #  :preorder,
172
- # :product_line => "Books",
173
- # :frequency => 2)
174
- # preorders = client.detab(preorders_report.body)
175
- # preorders[0].average_asking_price
176
- # => "100"
177
- #
178
- def new_report(name,params={})
179
- Peddler::LegacyReports::Report.new(transport.dup, name, params)
180
- end
181
-
182
- # Requests a report. Returns true when successful.
183
- #
184
- # Possible report names: [:order, :open_listings, :open_listings_lite, :open_listings_liter]
185
- #
186
- # client.generate_report :order, :number_of_days => 15
187
- #
188
- # A word of caution. Open listings may crap up with larger inventories.
189
- def generate_report(name,params={})
190
- Peddler::LegacyReports.generate(transport, name, params)
191
- end
192
-
193
- # Creates an unshipped order report. Takes on some optional parameters, such as :id, :starts_at, :ends_at. By default,
194
- # it will request a new unshipped order report for the past seven days.
195
- #
196
- # report = client.new_unshipped_orders_report
197
- # report.status
198
- # => "_SUBMITTED_"
199
- # sleep(60)
200
- # report.status!
201
- # => "_DONE_"
202
- # p report.unshipped_orders
203
- #
204
- def new_unshipped_orders_report(params={})
205
- Peddler::Reports::UnshippedOrdersReport.new(transport.dup, params)
206
- end
207
-
208
- # Returns status of most recent reports. Optional "count" defaults to 10. Name can be [ :upload, :order, :batch_refund, :open_listings, :open_listings_lite, :open_listings_liter ].
209
- #
210
- # reports = client.latest_reports :order, :count => 1
211
- # reports[0]
212
- # => #<Peddler::LegacyReports::ReportStatus starts_at="07-29-2009:10-00-06" ...
213
- #
214
- def latest_reports(name,params={})
215
- Peddler::LegacyReports.latest(transport, name, params)
216
- end
217
-
218
- # Decodes tab-delimited content into an array of OpenStruct objects.
219
- def detab(msg)
220
- Peddler::Handlers::TabDelimitedHandler.decode_response(msg)
221
- end
222
-
223
- private
224
-
225
- def transport #:nodoc:all
226
- @transport ||= Peddler::Transport.new
227
- end
228
- end
229
- end
@@ -1,38 +0,0 @@
1
- module Peddler
2
- module Handlers
3
- class XMLHandler
4
-
5
- # Parses legacy responses to queries on statuses of generated reports and inventory uploads.
6
- def self.parse_legacy(hash)
7
- if hash['Batches']
8
- [hash['Batches']['Batch']].flatten.collect { |input| Peddler::LegacyReports::UploadStatus.new(input) }
9
- elsif hash['Reports']
10
- [hash['Reports']['Report']].flatten.collect { |input| Peddler::LegacyReports::ReportStatus.new(input) }
11
- end
12
- end
13
- end
14
-
15
- class TabDelimitedHandler
16
- # Decodes tab-delimited content into an array of OpenStruct objects. It
17
- # assumes first line contains parameter names.
18
- def self.decode_response(res, &block)
19
- if block_given?
20
- res.scan(/[^\n]+/, &block)
21
- else
22
- lines = res.split("\n")
23
- if lines.size > 1
24
- params = lines[0].split("\t").collect{ |value| value.gsub(/-/, '_') }
25
- params_size = params.size
26
- (1..(lines.size - 1)).collect do |line_key|
27
- values = lines[line_key].split("\t")
28
- data = (0..(params_size - 1)).inject({}) { |memo, key| memo.merge( { params[key] => values[key] } ) }
29
- OpenStruct.new(data)
30
- end
31
- else
32
- res
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end