peddler 0.2.3 → 0.2.4
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/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
|