peddler 0.3.1 → 0.4.1

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