sucker 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,6 +10,7 @@ module Sucker
10
10
  :ca => 'ecs.amazonaws.ca',
11
11
  :fr => 'ecs.amazonaws.fr',
12
12
  :jp => 'ecs.amazonaws.jp' }
13
+ PATH = "/onca/xml"
13
14
 
14
15
  # The Amazon locale to query
15
16
  attr_accessor :locale
@@ -69,25 +70,18 @@ module Sucker
69
70
  join("&")
70
71
  end
71
72
 
72
- def digest
73
- OpenSSL::Digest::Digest.new("sha256")
74
- end
75
-
76
73
  def host
77
74
  HOSTS[locale.to_sym]
78
75
  end
79
76
 
80
- def path
81
- "/onca/xml"
82
- end
83
-
84
77
  # Returns a signed and timestamped query string
85
- def sign_query
78
+ def build_signed_query
86
79
  timestamp_parameters
87
80
 
88
81
  query = build_query
89
82
 
90
- string = ["GET", host, path, query].join("\n")
83
+ digest = OpenSSL::Digest::Digest.new("sha256")
84
+ string = ["GET", host, PATH, query].join("\n")
91
85
  hmac = OpenSSL::HMAC.digest(digest, secret, string)
92
86
 
93
87
  query + "&Signature=" + CGI.escape([hmac].pack("m").chomp)
@@ -96,8 +90,8 @@ module Sucker
96
90
  def uri
97
91
  URI::HTTP.build(
98
92
  :host => host,
99
- :path => path,
100
- :query => sign_query)
93
+ :path => PATH,
94
+ :query => build_signed_query)
101
95
  end
102
96
 
103
97
  def timestamp_parameters
data/lib/sucker.rb CHANGED
@@ -4,8 +4,7 @@ require "curb"
4
4
  require "sucker/request"
5
5
 
6
6
  module Sucker
7
- VERSION = "0.2.0".freeze
8
- AMAZON_API_VERSION = "2009-11-01".freeze
7
+ AMAZON_API_VERSION = "2009-11-01"
9
8
 
10
9
  def self.new(args={})
11
10
  Sucker::Request.new(args)
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ module Sucker
4
+ describe "Japan" do
5
+ before do
6
+ @worker = Sucker.new(
7
+ :locale => "jp",
8
+ :key => amazon["key"],
9
+ :secret => amazon["secret"])
10
+
11
+ @worker << {
12
+ "Operation" => "ItemLookup",
13
+ "IdType" => "ASIN" }
14
+ end
15
+
16
+ context "single item" do
17
+ before do
18
+ @worker << { "ItemId" => "0816614024" }
19
+ @item = @worker.get["ItemLookupResponse"]["Items"]["Item"]
20
+ end
21
+
22
+ it "returns an item" do
23
+ @item.should be_an_instance_of Hash
24
+ end
25
+ end
26
+ end
27
+ end
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,8 @@ unless defined?(Bundler)
3
3
  require "bundler/setup"
4
4
  end
5
5
 
6
+ require "rspec"
7
+
6
8
  require File.expand_path("../../lib/sucker", __FILE__)
7
9
 
8
10
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each{ |f| require f }
@@ -54,6 +54,13 @@ module Sucker
54
54
  end
55
55
  end
56
56
 
57
+ context "#key=" do
58
+ it "sets the Amazon AWS access key in the parameters" do
59
+ @worker.key = "key"
60
+ @worker.parameters["AWSAccessKeyId"].should eql "key"
61
+ end
62
+ end
63
+
57
64
  context "private methods" do
58
65
  context "#build_query" do
59
66
  it "canonicalizes parameters" do
@@ -74,19 +81,6 @@ module Sucker
74
81
  end
75
82
  end
76
83
 
77
- context "#digest" do
78
- it "returns a digest object" do
79
- @worker.send(:digest).should be_an_instance_of OpenSSL::Digest::Digest
80
- end
81
- end
82
-
83
- context "#key=" do
84
- it "sets the Amazon AWS access key in the parameters" do
85
- @worker.key = "key"
86
- @worker.parameters["AWSAccessKeyId"].should eql "key"
87
- end
88
- end
89
-
90
84
  context "#host" do
91
85
  it "returns a host" do
92
86
  @worker.locale = "us"
@@ -94,17 +88,11 @@ module Sucker
94
88
  end
95
89
  end
96
90
 
97
- context "#path" do
98
- it "returns a path" do
99
- @worker.send(:path).should eql "/onca/xml"
100
- end
101
- end
102
-
103
- context "#sign_query" do
91
+ context "#build_signed_query" do
104
92
  it "returns a signed query string" do
105
93
  @worker.secret = "secret"
106
94
  @worker.locale = "us"
107
- query = @worker.send :sign_query
95
+ query = @worker.send :build_signed_query
108
96
  query.should match /&Signature=.*/
109
97
  end
110
98
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sucker
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
9
+ - 2
10
+ version: 0.2.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Hakan Ensari
@@ -67,6 +67,7 @@ files:
67
67
  - lib/sucker/request.rb
68
68
  - README.md
69
69
  - spec/integration/item_lookup_spec.rb
70
+ - spec/integration/japan_spec.rb
70
71
  - spec/integration/seller_listing_search_spec.rb
71
72
  - spec/spec_helper.rb
72
73
  - spec/support/amazon_credentials.rb
@@ -109,6 +110,7 @@ specification_version: 3
109
110
  summary: A thin Ruby wrapper to the Amazon Product Advertising API
110
111
  test_files:
111
112
  - spec/integration/item_lookup_spec.rb
113
+ - spec/integration/japan_spec.rb
112
114
  - spec/integration/seller_listing_search_spec.rb
113
115
  - spec/spec_helper.rb
114
116
  - spec/support/amazon_credentials.rb