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 CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2009 Hakan Şenol Ensari
3
+ Copyright (c) 2009 Paper Cavalier
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
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 => "foo@bar.com",
11
- :password => "secret",
12
- :region => "us")
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 => "1234567890",
18
+ :product_id => '1234567890',
19
19
  :price => 100.00,
20
- :sku => "SKU-123",
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 => "123-1234567-1234567",
51
- :order_date => "2009-08-01",
52
- :carrier_code => "USPS",
53
- :tracking_number => "0308 0330 0000 0000 0000")
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 => "123-1234567-1234567",
80
- :cancellation_reason_code => "NoInventory",
81
- :amazon_order_item_code => "12341234567890")
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
- Need to post a partial refund? You'll have to revert to the older batch refund API method:
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 => "123-1234567-1234567",
95
- :payments_transaction_id => "12341234567890",
94
+ :order_id => '123-1234567-1234567',
95
+ :payments_transaction_id => '12341234567890',
96
96
  :refund_amount => 1.00,
97
- :reason => "GeneralAdjustment",
98
- :message => "With our apologies.")
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 => "Books",
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 Hakan Şenol Ensari, released under the MIT license
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://snl.github.com/peddler'
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.2.9'
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
@@ -1,5 +1,5 @@
1
1
  ---
2
- :patch: 3
3
- :major: 0
4
2
  :minor: 2
5
3
  :build:
4
+ :patch: 4
5
+ :major: 0
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'
@@ -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 instance.
8
+ # Creates a client.
9
9
  #
10
10
  # client = Peddler::Client.new(
11
11
  # :username => 'foo@bar.com',
12
12
  # :password => 'secret',
13
- # :region => 'us'
13
+ # :region => :us
14
14
  # )
15
15
  #
16
- def initialize(params={})
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
- # client.region = :jp
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 region=(region)
35
- transport.region = region.to_s
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 => "1234567890",
43
- # :sku => "SKU-001",
34
+ #  :product_id => '1234567890',
35
+ # :sku => 'SKU-001',
44
36
  # :price => 10.00,
45
37
  # :quantity => 1)
46
38
  # batch << book
@@ -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
- lines = res.split("\n")
20
- if lines.size > 1
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 << "catalog-upload/get-batches"
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 << "manual-reports/get-report-status"
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 << "manual-reports/generate-report-now"
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
- private
45
+ private
46
+
46
47
  def download
47
48
  return false if @name.nil? && @id.nil?
48
49
  case @name.to_s
49
- when "upload"
50
+ when 'upload'
50
51
  @transport.legacize_request
51
- @transport.path << "download/errorlog"
52
- @transport.headers["BatchID"] = @id
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 << "download/report"
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["productline"] = @product_line if @product_line
61
- @transport.headers["frequency"] = @frequency if @frequency
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["ReportID"] = @id
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
- "reportstarttime" => "starts_at",
88
- "reportendtime" => "ends_at",
89
- "reportid" => "id"}
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
- "status" => "status",
98
- "batchid" => "id",
99
- "numberofwarnings" => "number_of_warnings",
100
- "activateditems" => "activated_items",
101
- "itemsnotacivated" => "items_not_activated",
102
- "itemsnotactivated" => "items_not_activated",
103
- "dateandtime" => "datetime"}
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
@@ -12,16 +12,16 @@ module Peddler
12
12
  attr_accessor :starts_at, :ends_at, :scheduled
13
13
 
14
14
  MAPPED_PARAMS = {
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"}
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
- "Action" => "generateReport",
56
- "startDate" => @starts_at,
57
- "endDate" => @ends_at,
58
- "downloadType" => @type})
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
@@ -1,24 +1,29 @@
1
1
  module Peddler
2
2
  class PeddlerError < StandardError
3
3
  def initialize(msg)
4
- super("#{msg}")
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 = {:us => "secure.amazon.com",
11
- :uk => "secure.amazon.co.uk",
12
- :de => "secure.amazon.de",
13
- :ca => "secure.amazon.ca",
14
- :fr => "secure.amazon.fr",
15
- :jp => "vendornet.amazon.co.jp" }
16
- BASE_HEADERS = {"User-Agent" => "Peddler/#{Peddler::VERSION}",
17
- "Content-Type" => "text/xml;charset=utf-8",
18
- "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"}
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
- "Service" => "MerchantQueryService"
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("#{self.path.gsub(/\/$/, "")}/#{self.query_string}")
30
- self.headers.each do |header, value|
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(/_/, "")] = value
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 = self.body unless self.body.empty?
43
+ req.body = body if body
39
44
  req
40
45
  end
41
46
 
42
47
  def execute_request
43
48
  begin
44
- self.conn.start do |http|
45
- res = http.request(self.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
- self.clear_request
63
- self.path = "/exec/panama/seller-admin/"
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
- self.clear_request
69
- self.path = "/query/"
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("Region not recognized")
84
+ raise PeddlerError.new('Region not recognized')
80
85
  end
81
86
  end
82
87
 
83
88
  def url
84
- URI.parse("https://#{self.host}#{self.path.gsub(/\/$/, "")}/#{self.query_string}")
89
+ URI.parse("https://#{host}#{path}#{query_string}")
85
90
  end
86
91
 
87
92
  def dump_headers(msg)
88
- msg.each_header do |key, value|
89
- p "#{key}=#{value}"
93
+ msg.each_header do |k, v|
94
+ p "#{k}=#{v}"
90
95
  end
91
96
  end
92
97
 
93
- protected
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 !self.body.empty? || !self.query_params.empty?
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
- unless query_params.empty?
120
- query_params.inject("?") do |out, pair|
121
- key, value = pair
122
- key = key.to_s.gsub(/_([a-z])/) { $1.upcase } if key.kind_of? Symbol
123
- value = value.httpdate if value.respond_to? :httpdate
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__), "/../spec_helper")
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 = "user"
10
- @transport.password = "secret"
11
- @transport.region = "us"
9
+ @transport.username = 'user'
10
+ @transport.password = 'secret'
11
+ @transport.region = :us
12
12
  end
13
13
 
14
- it "should switch regions" do
14
+ it 'should switch regions' do
15
15
  @transport.legacize_request
16
- @transport.region = "uk"
17
- @transport.url.host.should == "secure.amazon.co.uk"
16
+ @transport.region = :uk
17
+ @transport.url.host.should == 'secure.amazon.co.uk'
18
18
  end
19
19
 
20
- it "should raise error when region is invalid" do
21
- lambda { @transport.region = "foo" }.should raise_error(PeddlerError)
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 "should add path to legacy URL" do
24
+ it 'should add path to legacy URL' do
25
25
  @transport.legacize_request
26
- @transport.path << "foo"
27
- @transport.url.to_s.should == "https://secure.amazon.com/exec/panama/seller-admin/foo/"
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 "should add path to modern URL" do
30
+ it 'should add path to modern URL' do
31
31
  @transport.modernize_request
32
- @transport.path << "foo"
33
- @transport.url.to_s.should == "https://secure.amazon.com/query/foo/?Service=MerchantQueryService"
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 "should add query parameters to the modern URL" do
36
+ it 'should add query parameters to the modern URL' do
37
37
  @transport.modernize_request
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"
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 "should url_encode query parameters" do
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["authorization"].should_not be(nil)
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__), "/../lib")
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
- version: 0.2.3
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-11 00:00:00 +00:00
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
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
35
+ type: :runtime
36
+ version_requirements: *id001
25
37
  - !ruby/object:Gem::Dependency
26
38
  name: rspec
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
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
- version: 1.2.9
34
- version:
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://snl.github.com/peddler
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.5
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