peddler 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/README.rdoc +20 -20
- data/Rakefile +2 -2
- data/VERSION.yml +2 -2
- data/lib/peddler.rb +4 -5
- data/lib/peddler/client.rb +14 -22
- data/lib/peddler/handlers.rb +15 -11
- data/lib/peddler/legacy_reports.rb +24 -23
- data/lib/peddler/reports.rb +14 -14
- data/lib/peddler/transport.rb +40 -40
- data/spec/peddler/transport_spec.rb +34 -27
- data/spec/spec_helper.rb +3 -3
- metadata +39 -15
data/LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -7,17 +7,17 @@ Peddler is a Ruby wrapper to the Amazon Inventory management API.
|
|
7
7
|
Fire off a client:
|
8
8
|
|
9
9
|
client = Peddler::Client.new(
|
10
|
-
:username =>
|
11
|
-
:password =>
|
12
|
-
:region =>
|
10
|
+
:username => 'foo@bar.com',
|
11
|
+
:password => 'secret',
|
12
|
+
:region => :us)
|
13
13
|
|
14
14
|
Create an inventory file:
|
15
15
|
|
16
16
|
batch = client.new_inventory_batch
|
17
17
|
item = client.new_inventory_item(
|
18
|
-
:product_id =>
|
18
|
+
:product_id => '1234567890',
|
19
19
|
:price => 100.00,
|
20
|
-
:sku =>
|
20
|
+
:sku => 'SKU-123',
|
21
21
|
:quantity => 10)
|
22
22
|
batch << item
|
23
23
|
...
|
@@ -47,10 +47,10 @@ Now that you have diligently processed the orders, post back the results to Amaz
|
|
47
47
|
|
48
48
|
feed = client.new_order_fulfillment_feed
|
49
49
|
fulfilled_order = client.new_fulfilled_order(
|
50
|
-
:order_id =>
|
51
|
-
:order_date =>
|
52
|
-
:carrier_code =>
|
53
|
-
:tracking_number =>
|
50
|
+
:order_id => '123-1234567-1234567',
|
51
|
+
:order_date => '2009-08-01',
|
52
|
+
:carrier_code => 'USPS',
|
53
|
+
:tracking_number => '0308 0330 0000 0000 0000')
|
54
54
|
feed << fulfilled_order
|
55
55
|
|
56
56
|
Again, repeat until done and upload:
|
@@ -72,13 +72,13 @@ Finally, check the report:
|
|
72
72
|
p feed.download.to_s
|
73
73
|
=> ...
|
74
74
|
|
75
|
-
Sadly, you also have an order you can't fulfill. No problem. The workflow is similar:
|
75
|
+
Sadly, you also have an order you can't fulfill and haven't shipped yet. No problem. The workflow is similar:
|
76
76
|
|
77
77
|
feed = client.new_order_cancellation_feed
|
78
78
|
cancelled_order = client.new_cancelled_order(
|
79
|
-
:order_id
|
80
|
-
:cancellation_reason_code =>
|
81
|
-
:amazon_order_item_code
|
79
|
+
:order_id => '123-1234567-1234567',
|
80
|
+
:cancellation_reason_code => 'NoInventory',
|
81
|
+
:amazon_order_item_code => '12341234567890')
|
82
82
|
feed << cancelled_order
|
83
83
|
feed.upload
|
84
84
|
sleep(60)
|
@@ -87,15 +87,15 @@ Sadly, you also have an order you can't fulfill. No problem. The workflow is sim
|
|
87
87
|
p feed.download.to_s
|
88
88
|
=> ...
|
89
89
|
|
90
|
-
|
90
|
+
Have already confirmed and need to post a partial refund? You'll have to revert to the older batch refund method:
|
91
91
|
|
92
92
|
refunds = client.new_refund_batch
|
93
93
|
refund = client.new_refund(
|
94
|
-
:order_id =>
|
95
|
-
:payments_transaction_id =>
|
94
|
+
:order_id => '123-1234567-1234567',
|
95
|
+
:payments_transaction_id => '12341234567890',
|
96
96
|
:refund_amount => 1.00,
|
97
|
-
:reason =>
|
98
|
-
:message =>
|
97
|
+
:reason => 'GeneralAdjustment',
|
98
|
+
:message => 'With our apologies.')
|
99
99
|
refunds << refund
|
100
100
|
refunds.upload
|
101
101
|
|
@@ -103,7 +103,7 @@ Great sales. For a change, let's download something different from Amazon. Here'
|
|
103
103
|
|
104
104
|
preorder_report = client.new_report(
|
105
105
|
:preorder,
|
106
|
-
:product_line =>
|
106
|
+
:product_line => 'Books',
|
107
107
|
:frequency => 2)
|
108
108
|
preorders = client.detab(preorder_report.body)
|
109
109
|
p preorders.size
|
@@ -115,4 +115,4 @@ Great sales. For a change, let's download something different from Amazon. Here'
|
|
115
115
|
|
116
116
|
Run rdoc and check the source for more detailed info.
|
117
117
|
|
118
|
-
Copyright © 2009
|
118
|
+
Copyright © 2009 Paper Cavalier, released under the MIT license
|
data/Rakefile
CHANGED
@@ -6,11 +6,11 @@ begin
|
|
6
6
|
s.name = 'peddler'
|
7
7
|
s.summary = 'A Ruby wrapper to the Amazon Inventory Management API'
|
8
8
|
s.email = 'hakan.ensari@papercavalier.com'
|
9
|
-
s.homepage = 'http://
|
9
|
+
s.homepage = 'http://papercavalier.github.com/peddler'
|
10
10
|
s.description = 'Peddler is a Ruby wrapper to the Amazon Inventory Management API.'
|
11
11
|
s.authors = ['Hakan Şenol Ensari']
|
12
12
|
s.add_dependency 'activesupport', '>= 2.3.5'
|
13
|
-
s.add_development_dependency 'rspec', '>= 1.
|
13
|
+
s.add_development_dependency 'rspec', '>= 1.3.0'
|
14
14
|
end
|
15
15
|
Jeweler::GemcutterTasks.new
|
16
16
|
rescue LoadError
|
data/VERSION.yml
CHANGED
data/lib/peddler.rb
CHANGED
@@ -3,12 +3,9 @@ module Peddler
|
|
3
3
|
VERSION = '0.2.3'
|
4
4
|
end
|
5
5
|
|
6
|
+
require 'active_support'
|
6
7
|
require 'net/https'
|
7
8
|
require 'ostruct'
|
8
|
-
require 'tempfile'
|
9
|
-
require 'time'
|
10
|
-
require 'active_support'
|
11
|
-
|
12
9
|
require File.dirname(__FILE__) + '/peddler/client'
|
13
10
|
require File.dirname(__FILE__) + '/peddler/handlers'
|
14
11
|
require File.dirname(__FILE__) + '/peddler/feeds'
|
@@ -16,4 +13,6 @@ require File.dirname(__FILE__) + '/peddler/inventory'
|
|
16
13
|
require File.dirname(__FILE__) + '/peddler/legacy_reports'
|
17
14
|
require File.dirname(__FILE__) + '/peddler/refunds'
|
18
15
|
require File.dirname(__FILE__) + '/peddler/reports'
|
19
|
-
require File.dirname(__FILE__) + '/peddler/transport'
|
16
|
+
require File.dirname(__FILE__) + '/peddler/transport'
|
17
|
+
require 'tempfile'
|
18
|
+
require 'time'
|
data/lib/peddler/client.rb
CHANGED
@@ -5,42 +5,34 @@
|
|
5
5
|
module Peddler
|
6
6
|
# This is the public interface of the Peddler library.
|
7
7
|
class Client
|
8
|
-
# Creates a client
|
8
|
+
# Creates a client.
|
9
9
|
#
|
10
10
|
# client = Peddler::Client.new(
|
11
11
|
# :username => 'foo@bar.com',
|
12
12
|
# :password => 'secret',
|
13
|
-
# :region =>
|
13
|
+
# :region => :us
|
14
14
|
# )
|
15
15
|
#
|
16
|
-
|
17
|
-
params.each_pair { |key, value| self.send("#{key}=", value.to_s) }
|
18
|
-
end
|
19
|
-
|
20
|
-
# Sets username.
|
21
|
-
def username=(username)
|
22
|
-
transport.username = username
|
23
|
-
end
|
24
|
-
|
25
|
-
# Sets password.
|
26
|
-
def password=(password)
|
27
|
-
transport.password = password
|
28
|
-
end
|
29
|
-
|
30
|
-
# Sets Amazon region.
|
16
|
+
# Alternatively, set attributes after creating the client:
|
31
17
|
#
|
32
|
-
#
|
18
|
+
# client = Peddler::Client.new
|
19
|
+
# client.username = 'foo@bar.co.uk'
|
20
|
+
# client.password = 'tad_more_secret'
|
21
|
+
# client.region = 'uk'
|
33
22
|
#
|
34
|
-
def
|
35
|
-
|
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) }
|
36
28
|
end
|
37
29
|
|
38
30
|
# Creates an inventory batch.
|
39
31
|
#
|
40
32
|
# batch = client.new_inventory_batch
|
41
33
|
# book = new_inventory_item(
|
42
|
-
# :product_id =>
|
43
|
-
# :sku =>
|
34
|
+
# :product_id => '1234567890',
|
35
|
+
# :sku => 'SKU-001',
|
44
36
|
# :price => 10.00,
|
45
37
|
# :quantity => 1)
|
46
38
|
# batch << book
|
data/lib/peddler/handlers.rb
CHANGED
@@ -15,18 +15,22 @@ module Peddler
|
|
15
15
|
class TabDelimitedHandler
|
16
16
|
# Decodes tab-delimited content into an array of OpenStruct objects. It
|
17
17
|
# assumes first line contains parameter names.
|
18
|
-
def self.decode_response(res)
|
19
|
-
|
20
|
-
|
21
|
-
params = lines[0].split("\t").collect{ |value| value.gsub(/-/, '_') }
|
22
|
-
params_size = params.size
|
23
|
-
(1..(lines.size - 1)).collect do |line_key|
|
24
|
-
values = lines[line_key].split("\t")
|
25
|
-
data = (0..(params_size - 1)).inject({}) { |memo, key| memo.merge( { params[key] => values[key] } ) }
|
26
|
-
OpenStruct.new(data)
|
27
|
-
end
|
18
|
+
def self.decode_response(res, &block)
|
19
|
+
if block_given?
|
20
|
+
res.scan(/[^\n]+/, &block)
|
28
21
|
else
|
29
|
-
res
|
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
|
30
34
|
end
|
31
35
|
end
|
32
36
|
end
|
@@ -7,21 +7,21 @@ module Peddler
|
|
7
7
|
def self.latest(transport,name,params={})
|
8
8
|
transport.legacize_request
|
9
9
|
if name == :upload
|
10
|
-
transport.path <<
|
10
|
+
transport.path << 'catalog-upload/get-batches'
|
11
11
|
transport.headers[:number_of_batches] = params[:count] if params[:count]
|
12
12
|
else
|
13
|
-
transport.path <<
|
13
|
+
transport.path << 'manual-reports/get-report-status'
|
14
14
|
transport.headers[:report_name] = name.to_s.camelize
|
15
15
|
transport.headers[:number_of_reports] = params[:count] if params[:count]
|
16
16
|
end
|
17
17
|
res = transport.execute_request
|
18
|
-
Peddler::Handlers::XMLHandler.parse_legacy(Hash.from_xml(res))
|
18
|
+
Peddler::Handlers::XMLHandler.parse_legacy(Hash.from_xml(res)) || []
|
19
19
|
end
|
20
20
|
|
21
21
|
# Requests a report to be generated and returns the report instance if request is successful.
|
22
22
|
def self.generate(transport,name,params={})
|
23
23
|
transport.legacize_request
|
24
|
-
transport.path <<
|
24
|
+
transport.path << 'manual-reports/generate-report-now'
|
25
25
|
transport.headers[:report_name] = name.to_s.camelize
|
26
26
|
transport.headers.merge!(params)
|
27
27
|
res = transport.execute_request
|
@@ -42,26 +42,27 @@ module Peddler
|
|
42
42
|
@body ||= download
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
private
|
46
|
+
|
46
47
|
def download
|
47
48
|
return false if @name.nil? && @id.nil?
|
48
49
|
case @name.to_s
|
49
|
-
when
|
50
|
+
when 'upload'
|
50
51
|
@transport.legacize_request
|
51
|
-
@transport.path <<
|
52
|
-
@transport.headers[
|
52
|
+
@transport.path << 'download/errorlog'
|
53
|
+
@transport.headers['BatchID'] = @id
|
53
54
|
@transport.execute_request
|
54
55
|
else
|
55
56
|
@transport.legacize_request
|
56
|
-
@transport.path <<
|
57
|
+
@transport.path << 'download/report'
|
57
58
|
if @id.nil?
|
58
59
|
@transport.headers[:report_name] = @name.to_s.camelize
|
59
60
|
if @name == :preorder
|
60
|
-
@transport.headers[
|
61
|
-
@transport.headers[
|
61
|
+
@transport.headers['productline'] = @product_line if @product_line
|
62
|
+
@transport.headers['frequency'] = @frequency if @frequency
|
62
63
|
end
|
63
64
|
else
|
64
|
-
@transport.headers[
|
65
|
+
@transport.headers['ReportID'] = @id
|
65
66
|
end
|
66
67
|
@transport.execute_request
|
67
68
|
end
|
@@ -84,9 +85,9 @@ module Peddler
|
|
84
85
|
class ReportStatus < Status
|
85
86
|
def initialize(input)
|
86
87
|
@keymap = {
|
87
|
-
|
88
|
-
|
89
|
-
|
88
|
+
'reportstarttime' => 'starts_at',
|
89
|
+
'reportendtime' => 'ends_at',
|
90
|
+
'reportid' => 'id' }
|
90
91
|
super(input)
|
91
92
|
end
|
92
93
|
end
|
@@ -94,15 +95,15 @@ module Peddler
|
|
94
95
|
class UploadStatus < Status
|
95
96
|
def initialize(input)
|
96
97
|
@keymap = {
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
98
|
+
'status' => 'status',
|
99
|
+
'batchid' => 'id',
|
100
|
+
'numberofwarnings' => 'number_of_warnings',
|
101
|
+
'activateditems' => 'activated_items',
|
102
|
+
'itemsnotacivated' => 'items_not_activated',
|
103
|
+
'itemsnotactivated' => 'items_not_activated',
|
104
|
+
'dateandtime' => 'datetime' }
|
104
105
|
super(input)
|
105
106
|
end
|
106
107
|
end
|
107
108
|
end
|
108
|
-
end
|
109
|
+
end
|
data/lib/peddler/reports.rb
CHANGED
@@ -12,16 +12,16 @@ module Peddler
|
|
12
12
|
attr_accessor :starts_at, :ends_at, :scheduled
|
13
13
|
|
14
14
|
MAPPED_PARAMS = {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
'ReportID' => 'id',
|
16
|
+
'StartDate' => 'starts_at',
|
17
|
+
'EndDate' => 'ends_at',
|
18
|
+
'DownloadType' => 'type',
|
19
|
+
'Scheduled' => 'scheduled',
|
20
|
+
'ReportStatus' => 'status',
|
21
|
+
'SubmittedDate' => 'submitted_at',
|
22
|
+
'StartedProcessingDate' => 'started_processing_at',
|
23
|
+
'CompletedProcessingDate' => 'completed_processing_at',
|
24
|
+
'CompletedProcesssingDate' => 'completed_processing_at'}
|
25
25
|
|
26
26
|
# Creates new unshipped order report. It will send a request to
|
27
27
|
# Amazon to generate the report if the report ID is not already set.
|
@@ -52,10 +52,10 @@ module Peddler
|
|
52
52
|
def generate_report
|
53
53
|
@transport.modernize_request
|
54
54
|
@transport.query_params.merge!({
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
'Action' => 'generateReport',
|
56
|
+
'startDate' => @starts_at,
|
57
|
+
'endDate' => @ends_at,
|
58
|
+
'downloadType' => @type})
|
59
59
|
res = @transport.execute_request
|
60
60
|
process_response(res)
|
61
61
|
end
|
data/lib/peddler/transport.rb
CHANGED
@@ -1,24 +1,29 @@
|
|
1
1
|
module Peddler
|
2
2
|
class PeddlerError < StandardError
|
3
3
|
def initialize(msg)
|
4
|
-
super(
|
4
|
+
super(msg)
|
5
5
|
end
|
6
6
|
end
|
7
7
|
|
8
8
|
# Our work horse. Runs on top of Net::HTTP.
|
9
9
|
class Transport
|
10
|
-
API_HOSTS
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
10
|
+
API_HOSTS = {
|
11
|
+
:us => 'secure.amazon.com',
|
12
|
+
:uk => 'secure.amazon.co.uk',
|
13
|
+
:de => 'secure.amazon.de',
|
14
|
+
:ca => 'secure.amazon.ca',
|
15
|
+
:fr => 'secure.amazon.fr',
|
16
|
+
:jp => 'vendornet.amazon.co.jp'
|
17
|
+
}
|
18
|
+
|
19
|
+
BASE_HEADERS = {
|
20
|
+
'User-Agent' => "Peddler/#{Peddler::VERSION}",
|
21
|
+
'Content-Type' => 'text/xml;charset=utf-8',
|
22
|
+
'Cookie' => 'x-main=YvjPkwfntqDKun0QEmVRPcTTZDMe?Tn?; ubid-main=002-8989859-9917520; ubid-tacbus=019-5423258-4241018;x-tacbus=vtm4d53DvX@Sc9LxTnAnxsFL3DorwxJa; ubid-tcmacb=087-8055947-0795529; ubid-ty2kacbus=161-5477122-2773524; session-id=087-178254-5924832;session-id-time=950660664'
|
23
|
+
}
|
19
24
|
|
20
25
|
BASE_PARAMS = {
|
21
|
-
|
26
|
+
'Service' => 'MerchantQueryService'
|
22
27
|
}
|
23
28
|
|
24
29
|
attr_writer :username, :password
|
@@ -26,23 +31,23 @@ module Peddler
|
|
26
31
|
|
27
32
|
#Returns request instance
|
28
33
|
def request
|
29
|
-
req = request_method.new("#{
|
30
|
-
|
34
|
+
req = request_method.new("#{path.gsub(/\/$/, "")}/#{query_string}")
|
35
|
+
headers.each do |header, value|
|
31
36
|
if header.kind_of? Symbol
|
32
|
-
req[header.to_s.gsub(/_/,
|
37
|
+
req[header.to_s.gsub(/_/, '')] = value
|
33
38
|
else
|
34
39
|
req[header] = value
|
35
40
|
end
|
36
41
|
end
|
37
42
|
req.basic_auth(@username, @password) if @username && @password
|
38
|
-
req.body =
|
43
|
+
req.body = body if body
|
39
44
|
req
|
40
45
|
end
|
41
46
|
|
42
47
|
def execute_request
|
43
48
|
begin
|
44
|
-
|
45
|
-
res = http.request(
|
49
|
+
conn.start do |http|
|
50
|
+
res = http.request(request)
|
46
51
|
case res
|
47
52
|
when Net::HTTPSuccess
|
48
53
|
res.body
|
@@ -55,18 +60,18 @@ module Peddler
|
|
55
60
|
|
56
61
|
def clear_request
|
57
62
|
self.headers = BASE_HEADERS.dup
|
58
|
-
self.body =
|
63
|
+
self.body = nil
|
59
64
|
end
|
60
65
|
|
61
66
|
def legacize_request
|
62
|
-
|
63
|
-
self.path =
|
67
|
+
clear_request
|
68
|
+
self.path = '/exec/panama/seller-admin/'
|
64
69
|
self.query_params = {}
|
65
70
|
end
|
66
71
|
|
67
72
|
def modernize_request
|
68
|
-
|
69
|
-
self.path =
|
73
|
+
clear_request
|
74
|
+
self.path = '/query/'
|
70
75
|
self.query_params = BASE_PARAMS.dup
|
71
76
|
end
|
72
77
|
|
@@ -76,21 +81,22 @@ module Peddler
|
|
76
81
|
if API_HOSTS.has_key?(region)
|
77
82
|
@region = region
|
78
83
|
else
|
79
|
-
raise PeddlerError.new(
|
84
|
+
raise PeddlerError.new('Region not recognized')
|
80
85
|
end
|
81
86
|
end
|
82
87
|
|
83
88
|
def url
|
84
|
-
URI.parse("https://#{
|
89
|
+
URI.parse("https://#{host}#{path}#{query_string}")
|
85
90
|
end
|
86
91
|
|
87
92
|
def dump_headers(msg)
|
88
|
-
msg.each_header do |
|
89
|
-
p "#{
|
93
|
+
msg.each_header do |k, v|
|
94
|
+
p "#{k}=#{v}"
|
90
95
|
end
|
91
96
|
end
|
92
97
|
|
93
|
-
|
98
|
+
private
|
99
|
+
|
94
100
|
#Returns the Net::HTTP instance.
|
95
101
|
def conn
|
96
102
|
if @conn
|
@@ -104,7 +110,7 @@ module Peddler
|
|
104
110
|
end
|
105
111
|
|
106
112
|
def request_method
|
107
|
-
if !
|
113
|
+
if !body.nil? || (query_params && !query_params.empty?)
|
108
114
|
Net::HTTP::Post
|
109
115
|
else
|
110
116
|
Net::HTTP::Get
|
@@ -116,20 +122,14 @@ module Peddler
|
|
116
122
|
end
|
117
123
|
|
118
124
|
def query_string
|
119
|
-
|
120
|
-
query_params.
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
out += "&" if out.size > 1
|
125
|
-
"#{out}#{url_encode(key)}=#{url_encode(value)}"
|
125
|
+
if query_params && !query_params.empty?
|
126
|
+
params = query_params.collect do |k, v|
|
127
|
+
k = k.to_s.gsub(/_([a-z])/) { $1.upcase } if k.kind_of? Symbol
|
128
|
+
v = v.httpdate if v.respond_to? :httpdate
|
129
|
+
"#{k}=#{v}"
|
126
130
|
end
|
131
|
+
"?#{params.join('&')}"
|
127
132
|
end
|
128
133
|
end
|
129
|
-
|
130
|
-
def url_encode(value)
|
131
|
-
require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
|
132
|
-
CGI.escape(value.to_s)
|
133
|
-
end
|
134
134
|
end
|
135
135
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),
|
1
|
+
require File.join(File.dirname(__FILE__), '/../spec_helper')
|
2
2
|
|
3
3
|
module Peddler
|
4
4
|
|
@@ -6,52 +6,59 @@ module Peddler
|
|
6
6
|
|
7
7
|
before(:each) do
|
8
8
|
@transport = Peddler::Transport.new
|
9
|
-
@transport.username =
|
10
|
-
@transport.password =
|
11
|
-
@transport.region =
|
9
|
+
@transport.username = 'user'
|
10
|
+
@transport.password = 'secret'
|
11
|
+
@transport.region = :us
|
12
12
|
end
|
13
13
|
|
14
|
-
it
|
14
|
+
it 'should switch regions' do
|
15
15
|
@transport.legacize_request
|
16
|
-
@transport.region =
|
17
|
-
@transport.url.host.should ==
|
16
|
+
@transport.region = :uk
|
17
|
+
@transport.url.host.should == 'secure.amazon.co.uk'
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
21
|
-
lambda { @transport.region =
|
20
|
+
it 'should raise error when region is invalid' do
|
21
|
+
lambda { @transport.region = 'foo' }.should raise_error(PeddlerError)
|
22
22
|
end
|
23
23
|
|
24
|
-
it
|
24
|
+
it 'should add path to legacy URL' do
|
25
25
|
@transport.legacize_request
|
26
|
-
@transport.path <<
|
27
|
-
@transport.url.to_s.should ==
|
26
|
+
@transport.path << 'foo'
|
27
|
+
@transport.url.to_s.should == 'https://secure.amazon.com/exec/panama/seller-admin/foo'
|
28
28
|
end
|
29
29
|
|
30
|
-
it
|
30
|
+
it 'should add path to modern URL' do
|
31
31
|
@transport.modernize_request
|
32
|
-
@transport.path <<
|
33
|
-
@transport.url.to_s.should ==
|
32
|
+
@transport.path << 'foo'
|
33
|
+
@transport.url.to_s.should == 'https://secure.amazon.com/query/foo?Service=MerchantQueryService'
|
34
34
|
end
|
35
35
|
|
36
|
-
it
|
36
|
+
it 'should add query parameters to the modern URL' do
|
37
37
|
@transport.modernize_request
|
38
|
-
@transport.query_params[
|
39
|
-
@transport.query_params[
|
40
|
-
@transport.url.to_s.should ==
|
38
|
+
@transport.query_params['key1'] = 'val1'
|
39
|
+
@transport.query_params['key2'] = 'val2'
|
40
|
+
@transport.url.to_s.should == 'https://secure.amazon.com/query/?key1=val1&key2=val2&Service=MerchantQueryService'
|
41
41
|
end
|
42
42
|
|
43
|
-
it
|
44
|
-
@transport.modernize_request
|
45
|
-
@transport.query_params["key"] = "!@#"
|
46
|
-
@transport.url.to_s.should == "https://secure.amazon.com/query/?key=%21%40%23&Service=MerchantQueryService"
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should authenticate request" do
|
43
|
+
it 'should authenticate request' do
|
50
44
|
@transport.legacize_request
|
51
45
|
req = @transport.request
|
52
|
-
req[
|
46
|
+
req['authorization'].should_not be(nil)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should post if there is a body' do
|
50
|
+
@transport.body = 'foo'
|
51
|
+
@transport.send(:request_method).should == Net::HTTP::Post
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should post if there is a query parameter' do
|
55
|
+
@transport.query_params = { :foo => 'bar' }
|
56
|
+
@transport.send(:request_method).should == Net::HTTP::Post
|
53
57
|
end
|
54
58
|
|
59
|
+
it 'should get if there is no body or query parameter' do
|
60
|
+
@transport.send(:request_method).should == Net::HTTP::Get
|
61
|
+
end
|
55
62
|
end
|
56
63
|
|
57
64
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
$: << File.join(File.dirname(__FILE__),
|
2
|
-
require 'spec'
|
3
|
-
require 'peddler'
|
1
|
+
$: << File.join(File.dirname(__FILE__), '/../lib')
|
2
|
+
require 'spec'
|
3
|
+
require 'peddler'
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: peddler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 31
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 4
|
10
|
+
version: 0.2.4
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- "Hakan \xC5\x9Eenol Ensari"
|
@@ -9,29 +15,41 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-01
|
18
|
+
date: 2010-07-01 00:00:00 +01:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: activesupport
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 9
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 3
|
33
|
+
- 5
|
23
34
|
version: 2.3.5
|
24
|
-
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
25
37
|
- !ruby/object:Gem::Dependency
|
26
38
|
name: rspec
|
27
|
-
|
28
|
-
|
29
|
-
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
30
42
|
requirements:
|
31
43
|
- - ">="
|
32
44
|
- !ruby/object:Gem::Version
|
33
|
-
|
34
|
-
|
45
|
+
hash: 27
|
46
|
+
segments:
|
47
|
+
- 1
|
48
|
+
- 3
|
49
|
+
- 0
|
50
|
+
version: 1.3.0
|
51
|
+
type: :development
|
52
|
+
version_requirements: *id002
|
35
53
|
description: Peddler is a Ruby wrapper to the Amazon Inventory Management API.
|
36
54
|
email: hakan.ensari@papercavalier.com
|
37
55
|
executables: []
|
@@ -68,7 +86,7 @@ files:
|
|
68
86
|
- spec/peddler/transport_spec.rb
|
69
87
|
- spec/spec_helper.rb
|
70
88
|
has_rdoc: true
|
71
|
-
homepage: http://
|
89
|
+
homepage: http://papercavalier.github.com/peddler
|
72
90
|
licenses: []
|
73
91
|
|
74
92
|
post_install_message:
|
@@ -77,21 +95,27 @@ rdoc_options:
|
|
77
95
|
require_paths:
|
78
96
|
- lib
|
79
97
|
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
80
99
|
requirements:
|
81
100
|
- - ">="
|
82
101
|
- !ruby/object:Gem::Version
|
102
|
+
hash: 3
|
103
|
+
segments:
|
104
|
+
- 0
|
83
105
|
version: "0"
|
84
|
-
version:
|
85
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
86
108
|
requirements:
|
87
109
|
- - ">="
|
88
110
|
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
112
|
+
segments:
|
113
|
+
- 0
|
89
114
|
version: "0"
|
90
|
-
version:
|
91
115
|
requirements: []
|
92
116
|
|
93
117
|
rubyforge_project:
|
94
|
-
rubygems_version: 1.3.
|
118
|
+
rubygems_version: 1.3.7
|
95
119
|
signing_key:
|
96
120
|
specification_version: 3
|
97
121
|
summary: A Ruby wrapper to the Amazon Inventory Management API
|