sucker 2.0.0.pre.4 → 2.0.0.pre.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +74 -38
- data/lib/sucker.rb +14 -2
- data/lib/sucker/config.rb +18 -0
- data/lib/sucker/parameters.rb +3 -3
- data/lib/sucker/request.rb +40 -51
- data/lib/sucker/synchrony.rb +2 -2
- data/lib/sucker/version.rb +1 -1
- data/spec/sucker/config_spec.rb +6 -0
- data/spec/sucker/request_spec.rb +11 -17
- data/spec/sucker/response_spec.rb +4 -4
- data/spec/sucker_spec.rb +9 -2
- metadata +20 -45
data/README.md
CHANGED
@@ -1,55 +1,91 @@
|
|
1
|
-
Sucker
|
2
|
-
======
|
1
|
+
# Sucker
|
3
2
|
|
4
|
-
Sucker is a Nokogiri-based, optionally-evented Ruby wrapper to the
|
3
|
+
Sucker is a Nokogiri-based, optionally-evented Ruby wrapper to the
|
4
|
+
[Amazon Product Advertising API](https://affiliate-program.amazon.co.uk/gp/advertising/api/detail/main.html).
|
5
5
|
|
6
6
|
![Hoover](https://github.com/papercavalier/sucker/raw/master/hoover.jpg)
|
7
7
|
|
8
|
-
|
8
|
+
> Workers queuing to download data from Amazon.
|
9
9
|
|
10
|
-
Usage
|
11
|
-
-----
|
10
|
+
## Usage
|
12
11
|
|
13
|
-
|
14
|
-
Check out [these examples](http://relishapp.com/papercavalier/sucker) if in a hurry.
|
12
|
+
_Note_: For the README of version 1.6.1 and earlier, [click here](https://github.com/papercavalier/sucker/tree/v1.6.1).
|
15
13
|
|
16
|
-
|
14
|
+
1. Define your Amazon credentials.
|
17
15
|
|
18
|
-
```ruby
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
16
|
+
```ruby
|
17
|
+
Sucker.configure do |c|
|
18
|
+
c.locale = :us
|
19
|
+
c.key = amazon_key
|
20
|
+
c.secret = amazon_secret
|
21
|
+
c.associate_tag = associate_tag
|
22
|
+
end
|
24
23
|
|
25
|
-
|
24
|
+
2. Set up a request.
|
26
25
|
|
27
|
-
```ruby
|
28
|
-
request
|
29
|
-
|
30
|
-
'IdType' => 'ASIN',
|
31
|
-
'ItemId' => 10.asins,
|
32
|
-
'ResponseGroup' => 'ItemAttributes' }
|
33
|
-
```
|
26
|
+
```ruby
|
27
|
+
request = Sucker.new
|
28
|
+
```
|
34
29
|
|
35
|
-
|
30
|
+
Alternatively, you may your credentials when initializing the request.
|
36
31
|
|
37
|
-
```ruby
|
38
|
-
|
39
|
-
|
32
|
+
```ruby
|
33
|
+
request = Sucker.new(
|
34
|
+
:locale => :us,
|
35
|
+
:key => amazon_key,
|
36
|
+
:secret => amazon_secret)
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
2. Build a request.
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
request << {
|
44
|
+
'Operation' => 'ItemLookup',
|
45
|
+
'IdType' => 'ASIN',
|
46
|
+
'ItemId' => 10.asins,
|
47
|
+
'ResponseGroup' => 'ItemAttributes' }
|
48
|
+
```
|
49
|
+
|
50
|
+
Amazon provides countless configuration options to fine-tune your query. Read
|
51
|
+
[their API](http://aws.amazon.com/archives/Product%20Advertising%20API) or
|
52
|
+
check out [these common scenarios](http://relishapp.com/papercavalier/sucker)
|
53
|
+
if in a hurry.
|
54
|
+
|
55
|
+
3. Get a response.
|
40
56
|
|
41
|
-
|
57
|
+
```ruby
|
58
|
+
response = request.get
|
59
|
+
```
|
60
|
+
|
61
|
+
Fulfill a business value.
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
if response.valid?
|
65
|
+
response.find('Item').each do |item|
|
66
|
+
# consume
|
67
|
+
end
|
68
|
+
end
|
69
|
+
```
|
70
|
+
|
71
|
+
4. Repeat ad infinitum.
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
request << { 'ItemId' => 10.new.asins }
|
75
|
+
request.get["Item"].each do |item|
|
76
|
+
# consume
|
77
|
+
end
|
78
|
+
```
|
79
|
+
|
80
|
+
|
81
|
+
## Some tips
|
82
|
+
|
83
|
+
Inspect the response as a hash to find out nodes you are interested in.
|
42
84
|
|
43
85
|
```ruby
|
44
|
-
|
45
|
-
response.each('Item') do |item|
|
46
|
-
consume(item)
|
47
|
-
end
|
48
|
-
end
|
86
|
+
p response.to_hash
|
49
87
|
```
|
50
88
|
|
51
|
-
Repeat ad infinitum.
|
52
|
-
|
53
89
|
The following are all valid ways to query a response:
|
54
90
|
|
55
91
|
```ruby
|
@@ -67,7 +103,6 @@ p response.valid?,
|
|
67
103
|
response.code,
|
68
104
|
response.errors,
|
69
105
|
response.has_errors?,
|
70
|
-
response.to_hash,
|
71
106
|
response.xml
|
72
107
|
```
|
73
108
|
|
@@ -83,7 +118,8 @@ adapter.socket_local.host = '10.0.0.2'
|
|
83
118
|
Evented Requests
|
84
119
|
----------------
|
85
120
|
|
86
|
-
I am including
|
121
|
+
Large responses can block! I am including an EM:Synchrony patch in the 2.0
|
122
|
+
release.
|
87
123
|
|
88
124
|
```ruby
|
89
125
|
require 'sucker/synchrony'
|
@@ -95,8 +131,8 @@ EM.synchrony do
|
|
95
131
|
EM.stop
|
96
132
|
end
|
97
133
|
|
98
|
-
For more meaningful examples, read [these examples](http://relishapp.com/papercavalier/sucker/evented-requests).
|
99
134
|
```
|
135
|
+
For more meaningful examples, read [here](http://relishapp.com/papercavalier/sucker/evented-requests).
|
100
136
|
|
101
137
|
Stubbing Tests
|
102
138
|
--------------
|
data/lib/sucker.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'sucker/config'
|
1
2
|
require 'sucker/request'
|
2
3
|
require 'sucker/response'
|
3
4
|
|
@@ -5,9 +6,7 @@ require 'sucker/response'
|
|
5
6
|
#
|
6
7
|
# Sucker is a Ruby wrapper to the Amazon Product Advertising API.
|
7
8
|
module Sucker
|
8
|
-
|
9
9
|
class << self
|
10
|
-
|
11
10
|
# Initializes a request object.
|
12
11
|
#
|
13
12
|
# request = Sucker.new(
|
@@ -18,5 +17,18 @@ module Sucker
|
|
18
17
|
def new(args={})
|
19
18
|
Request.new(args)
|
20
19
|
end
|
20
|
+
|
21
|
+
# Configures locale-specific details.
|
22
|
+
#
|
23
|
+
# Sucker.configure do |c|
|
24
|
+
# c.locale = :us
|
25
|
+
# c.key = api_key
|
26
|
+
# c.secret = api_secret
|
27
|
+
# c.associate_tag = associate_tag
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
def configure(&block)
|
31
|
+
block.call(Config)
|
32
|
+
end
|
21
33
|
end
|
22
34
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Sucker
|
2
|
+
# Amazon credentials.
|
3
|
+
module Config
|
4
|
+
extend self
|
5
|
+
|
6
|
+
# The Amazon locale.
|
7
|
+
attr_accessor :locale
|
8
|
+
|
9
|
+
# The Amazon Web Services access key.
|
10
|
+
attr_accessor :key
|
11
|
+
|
12
|
+
# The Amazon Web Services secret.
|
13
|
+
attr_accessor :secret
|
14
|
+
|
15
|
+
# The Amazon associate tag.
|
16
|
+
attr_accessor :associate_tag
|
17
|
+
end
|
18
|
+
end
|
data/lib/sucker/parameters.rb
CHANGED
data/lib/sucker/request.rb
CHANGED
@@ -5,6 +5,8 @@ require 'sucker/parameters'
|
|
5
5
|
module Sucker
|
6
6
|
# A wrapper around the API request.
|
7
7
|
class Request
|
8
|
+
extend Forwardable
|
9
|
+
|
8
10
|
HOSTS = {
|
9
11
|
:us => 'ecs.amazonaws.com',
|
10
12
|
:uk => 'ecs.amazonaws.co.uk',
|
@@ -13,27 +15,14 @@ module Sucker
|
|
13
15
|
:fr => 'ecs.amazonaws.fr',
|
14
16
|
:jp => 'ecs.amazonaws.jp' }
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
-
# Available Amazon locales.
|
19
|
-
def locales
|
20
|
-
@locales ||= HOSTS.keys
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# The Amazon associate tag.
|
25
|
-
attr_accessor :associate_tag
|
26
|
-
|
27
|
-
# The Amazon Web Services access key.
|
28
|
-
attr_accessor :key
|
29
|
-
|
30
|
-
# The Amazon locale.
|
31
|
-
attr_accessor :locale
|
18
|
+
LOCALES = HOSTS.keys
|
32
19
|
|
33
|
-
|
34
|
-
|
20
|
+
def_delegators :@config, :associate_tag, :associate_tag=,
|
21
|
+
:key, :key=,
|
22
|
+
:locale, :locale=,
|
23
|
+
:secret, :secret=
|
35
24
|
|
36
|
-
#
|
25
|
+
# Creates a new a request.
|
37
26
|
#
|
38
27
|
# Takes an optional hash of attribute and value pairs.
|
39
28
|
#
|
@@ -43,13 +32,9 @@ module Sucker
|
|
43
32
|
# :secret => amazon_secret)
|
44
33
|
# :associate_tag => amazon_tag)
|
45
34
|
#
|
46
|
-
def initialize(args={})
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
# The HTTP adapter.
|
51
|
-
def adapter
|
52
|
-
@adapter ||= HTTPClient.new
|
35
|
+
def initialize(args = {})
|
36
|
+
@config = Config
|
37
|
+
args.each { |k, v| self.send("#{k}=", v) }
|
53
38
|
end
|
54
39
|
|
55
40
|
# Merges a hash into the existing parameters.
|
@@ -63,6 +48,11 @@ module Sucker
|
|
63
48
|
parameters.merge!(hash)
|
64
49
|
end
|
65
50
|
|
51
|
+
# The HTTP adapter.
|
52
|
+
def adapter
|
53
|
+
@adapter ||= HTTPClient.new
|
54
|
+
end
|
55
|
+
|
66
56
|
# Performs a request and returns a response.
|
67
57
|
#
|
68
58
|
# response = request.get
|
@@ -80,7 +70,6 @@ module Sucker
|
|
80
70
|
# Resets parameters and returns self.
|
81
71
|
def reset
|
82
72
|
parameters.reset
|
83
|
-
|
84
73
|
self
|
85
74
|
end
|
86
75
|
|
@@ -100,33 +89,33 @@ module Sucker
|
|
100
89
|
|
101
90
|
private
|
102
91
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
def sign(query_string)
|
114
|
-
digest = OpenSSL::Digest::Digest.new('sha256')
|
115
|
-
url_string = ['GET', host, '/onca/xml', query_string].join("\n")
|
116
|
-
hmac = OpenSSL::HMAC.digest(digest, secret, url_string)
|
117
|
-
signature = escape([hmac].pack('m').chomp)
|
92
|
+
def build_query_string
|
93
|
+
parameters.
|
94
|
+
normalize.
|
95
|
+
merge({ 'AWSAccessKeyId' => key,
|
96
|
+
'AssociateTag' => associate_tag.to_s }).
|
97
|
+
sort.
|
98
|
+
map { |k, v| "#{k}=" + escape(v) }.
|
99
|
+
join('&')
|
100
|
+
end
|
118
101
|
|
119
|
-
|
102
|
+
def escape(value)
|
103
|
+
value.gsub(/([^a-zA-Z0-9_.~-]+)/) do
|
104
|
+
'%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
|
120
105
|
end
|
106
|
+
end
|
121
107
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
end
|
126
|
-
end
|
108
|
+
def host
|
109
|
+
HOSTS[locale.to_sym]
|
110
|
+
end
|
127
111
|
|
128
|
-
|
129
|
-
|
130
|
-
|
112
|
+
def sign(query_string)
|
113
|
+
digest = OpenSSL::Digest::Digest.new('sha256')
|
114
|
+
url_string = ['GET', host, '/onca/xml', query_string].join("\n")
|
115
|
+
hmac = OpenSSL::HMAC.digest(digest, secret, url_string)
|
116
|
+
signature = escape([hmac].pack('m').chomp)
|
117
|
+
|
118
|
+
query_string + '&Signature=' + signature
|
119
|
+
end
|
131
120
|
end
|
132
121
|
end
|
data/lib/sucker/synchrony.rb
CHANGED
@@ -3,13 +3,13 @@ require 'em-synchrony'
|
|
3
3
|
require 'em-synchrony/em-http'
|
4
4
|
|
5
5
|
module Sucker
|
6
|
-
#
|
6
|
+
# We minimally patch Request and Response to make them fiber-aware.
|
7
7
|
class Request
|
8
8
|
def adapter
|
9
9
|
@adapter ||= EM::HttpRequest
|
10
10
|
end
|
11
11
|
|
12
|
-
# Performs an evented request and yields a response to
|
12
|
+
# Performs an evented request and yields a response to given block.
|
13
13
|
def aget(&block)
|
14
14
|
http = EM::HttpRequest.new(url).aget
|
15
15
|
http.callback { block.call(Response.new(http)) }
|
data/lib/sucker/version.rb
CHANGED
data/spec/sucker/request_spec.rb
CHANGED
@@ -5,16 +5,10 @@ module Sucker
|
|
5
5
|
use_vcr_cassette 'spec/sucker/request', :record => :new_episodes
|
6
6
|
|
7
7
|
let(:request) do
|
8
|
-
Request.new(
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
describe ".locales" do
|
15
|
-
it "returns available locales" do
|
16
|
-
Request.locales.should =~ [:us, :uk, :de, :ca, :fr, :jp]
|
17
|
-
end
|
8
|
+
Request.new(:locale => :us,
|
9
|
+
:key => 'key',
|
10
|
+
:secret => 'secret',
|
11
|
+
:associate_tag => 'tag')
|
18
12
|
end
|
19
13
|
|
20
14
|
describe '#<<' do
|
@@ -39,8 +33,8 @@ module Sucker
|
|
39
33
|
request.parameters['foo'].should be_nil
|
40
34
|
end
|
41
35
|
|
42
|
-
it "returns
|
43
|
-
request.reset.should
|
36
|
+
it "returns itself" do
|
37
|
+
request.reset.should eql request
|
44
38
|
end
|
45
39
|
end
|
46
40
|
|
@@ -63,7 +57,7 @@ module Sucker
|
|
63
57
|
end
|
64
58
|
|
65
59
|
it 'canonicalizes query' do
|
66
|
-
query.should match /AWSAccessKeyId=key&AssociateTag
|
60
|
+
query.should match /AWSAccessKeyId=key&AssociateTag=tag&Service=([^&]+)&Timestamp=([^&]+)&Version=([^&]+)/
|
67
61
|
end
|
68
62
|
|
69
63
|
it 'includes a timestamp' do
|
@@ -90,10 +84,10 @@ module Sucker
|
|
90
84
|
end
|
91
85
|
end
|
92
86
|
|
93
|
-
describe
|
94
|
-
it
|
95
|
-
request.locale = :
|
96
|
-
request.send(:host).should eql
|
87
|
+
describe "#host" do
|
88
|
+
it "returns the host for specified locale" do
|
89
|
+
request.locale = :uk
|
90
|
+
request.send(:host).should eql Request::HOSTS[request.locale]
|
97
91
|
end
|
98
92
|
end
|
99
93
|
end
|
@@ -9,10 +9,10 @@ module Sucker
|
|
9
9
|
let(:asins) { ['0816614024', '0143105825'] }
|
10
10
|
|
11
11
|
let(:response) do
|
12
|
-
request =
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
request = Request.new(:locale => :us,
|
13
|
+
:key => 'key',
|
14
|
+
:secret => 'secret',
|
15
|
+
:associate_tag => 'tag')
|
16
16
|
request << {
|
17
17
|
'Operation' => 'ItemLookup',
|
18
18
|
'IdType' => 'ASIN',
|
data/spec/sucker_spec.rb
CHANGED
@@ -2,8 +2,15 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Sucker do
|
4
4
|
describe ".new" do
|
5
|
-
it "returns a
|
6
|
-
|
5
|
+
it "returns a request" do
|
6
|
+
subject.new.should be_a Sucker::Request
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe ".configure" do
|
11
|
+
it "yields a configuration object" do
|
12
|
+
subject.should_receive(:configure).and_yield(Sucker::Config)
|
13
|
+
subject.configure { |c| }
|
7
14
|
end
|
8
15
|
end
|
9
16
|
end
|
metadata
CHANGED
@@ -7,8 +7,8 @@ version: !ruby/object:Gem::Version
|
|
7
7
|
- 0
|
8
8
|
- 0
|
9
9
|
- pre
|
10
|
-
-
|
11
|
-
version: 2.0.0.pre.
|
10
|
+
- 5
|
11
|
+
version: 2.0.0.pre.5
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Paper Cavalier
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-07-04 00:00:00 +01:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -43,28 +43,14 @@ dependencies:
|
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
segments:
|
45
45
|
- 1
|
46
|
-
-
|
47
|
-
version: "1.
|
46
|
+
- 5
|
47
|
+
version: "1.5"
|
48
48
|
type: :runtime
|
49
49
|
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: bundler
|
52
|
-
prerelease: false
|
53
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
-
none: false
|
55
|
-
requirements:
|
56
|
-
- - ~>
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
segments:
|
59
|
-
- 1
|
60
|
-
- 0
|
61
|
-
version: "1.0"
|
62
|
-
type: :development
|
63
|
-
version_requirements: *id003
|
64
50
|
- !ruby/object:Gem::Dependency
|
65
51
|
name: cucumber
|
66
52
|
prerelease: false
|
67
|
-
requirement: &
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
68
54
|
none: false
|
69
55
|
requirements:
|
70
56
|
- - ~>
|
@@ -74,11 +60,11 @@ dependencies:
|
|
74
60
|
- 10
|
75
61
|
version: "0.10"
|
76
62
|
type: :development
|
77
|
-
version_requirements: *
|
63
|
+
version_requirements: *id003
|
78
64
|
- !ruby/object:Gem::Dependency
|
79
65
|
name: em-http-request
|
80
66
|
prerelease: false
|
81
|
-
requirement: &
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
82
68
|
none: false
|
83
69
|
requirements:
|
84
70
|
- - ~>
|
@@ -91,11 +77,11 @@ dependencies:
|
|
91
77
|
- 4
|
92
78
|
version: 1.0.0.beta.4
|
93
79
|
type: :development
|
94
|
-
version_requirements: *
|
80
|
+
version_requirements: *id004
|
95
81
|
- !ruby/object:Gem::Dependency
|
96
82
|
name: em-synchrony
|
97
83
|
prerelease: false
|
98
|
-
requirement: &
|
84
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
99
85
|
none: false
|
100
86
|
requirements:
|
101
87
|
- - ~>
|
@@ -108,25 +94,11 @@ dependencies:
|
|
108
94
|
- 1
|
109
95
|
version: 0.3.0.beta.1
|
110
96
|
type: :development
|
111
|
-
version_requirements: *
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: relish
|
114
|
-
prerelease: false
|
115
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
116
|
-
none: false
|
117
|
-
requirements:
|
118
|
-
- - ~>
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
segments:
|
121
|
-
- 0
|
122
|
-
- 4
|
123
|
-
version: "0.4"
|
124
|
-
type: :development
|
125
|
-
version_requirements: *id007
|
97
|
+
version_requirements: *id005
|
126
98
|
- !ruby/object:Gem::Dependency
|
127
99
|
name: rspec
|
128
100
|
prerelease: false
|
129
|
-
requirement: &
|
101
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
130
102
|
none: false
|
131
103
|
requirements:
|
132
104
|
- - ~>
|
@@ -136,11 +108,11 @@ dependencies:
|
|
136
108
|
- 6
|
137
109
|
version: "2.6"
|
138
110
|
type: :development
|
139
|
-
version_requirements: *
|
111
|
+
version_requirements: *id006
|
140
112
|
- !ruby/object:Gem::Dependency
|
141
113
|
name: vcr
|
142
114
|
prerelease: false
|
143
|
-
requirement: &
|
115
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
144
116
|
none: false
|
145
117
|
requirements:
|
146
118
|
- - ~>
|
@@ -150,11 +122,11 @@ dependencies:
|
|
150
122
|
- 10
|
151
123
|
version: "1.10"
|
152
124
|
type: :development
|
153
|
-
version_requirements: *
|
125
|
+
version_requirements: *id007
|
154
126
|
- !ruby/object:Gem::Dependency
|
155
127
|
name: webmock
|
156
128
|
prerelease: false
|
157
|
-
requirement: &
|
129
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
158
130
|
none: false
|
159
131
|
requirements:
|
160
132
|
- - ~>
|
@@ -164,7 +136,7 @@ dependencies:
|
|
164
136
|
- 6
|
165
137
|
version: "1.6"
|
166
138
|
type: :development
|
167
|
-
version_requirements: *
|
139
|
+
version_requirements: *id008
|
168
140
|
description: A Nokogiri-based, optionally-evented Ruby wrapper to the Amazon Product Advertising API
|
169
141
|
email:
|
170
142
|
- code@papercavalier.com
|
@@ -175,6 +147,7 @@ extensions: []
|
|
175
147
|
extra_rdoc_files: []
|
176
148
|
|
177
149
|
files:
|
150
|
+
- lib/sucker/config.rb
|
178
151
|
- lib/sucker/hash_builder.rb
|
179
152
|
- lib/sucker/parameters.rb
|
180
153
|
- lib/sucker/request.rb
|
@@ -203,6 +176,7 @@ files:
|
|
203
176
|
- spec/fixtures/cassette_library/spec/sucker/request.yml
|
204
177
|
- spec/fixtures/cassette_library/spec/sucker/response.yml
|
205
178
|
- spec/spec_helper.rb
|
179
|
+
- spec/sucker/config_spec.rb
|
206
180
|
- spec/sucker/hash_builder_spec.rb
|
207
181
|
- spec/sucker/parameters_spec.rb
|
208
182
|
- spec/sucker/request_spec.rb
|
@@ -266,6 +240,7 @@ test_files:
|
|
266
240
|
- spec/fixtures/cassette_library/spec/sucker/request.yml
|
267
241
|
- spec/fixtures/cassette_library/spec/sucker/response.yml
|
268
242
|
- spec/spec_helper.rb
|
243
|
+
- spec/sucker/config_spec.rb
|
269
244
|
- spec/sucker/hash_builder_spec.rb
|
270
245
|
- spec/sucker/parameters_spec.rb
|
271
246
|
- spec/sucker/request_spec.rb
|