sucker 1.0.0.beta.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +12 -2
- data/README.md +5 -2
- data/lib/sucker.rbc +341 -0
- data/lib/sucker/request.rb +1 -1
- data/lib/sucker/request.rbc +2481 -0
- data/lib/sucker/response.rb +19 -7
- data/lib/sucker/response.rbc +1554 -0
- data/lib/sucker/version.rb +2 -2
- data/lib/sucker/version.rbc +130 -0
- data/spec/fixtures/asins.txt +9406 -406
- data/spec/fixtures/cassette_library/integration/alternate_versions.yml +27 -0
- data/spec/fixtures/cassette_library/integration/errors.yml +27 -0
- data/spec/fixtures/cassette_library/integration/france.yml +27 -0
- data/spec/fixtures/cassette_library/integration/images.yml +27 -0
- data/spec/fixtures/cassette_library/integration/item_lookup/multiple.yml +27 -0
- data/spec/fixtures/cassette_library/integration/item_lookup/single.yml +27 -0
- data/spec/fixtures/cassette_library/integration/item_search.yml +27 -0
- data/spec/fixtures/cassette_library/integration/japan.yml +27 -0
- data/spec/fixtures/cassette_library/integration/keyword_search.yml +27 -0
- data/spec/fixtures/cassette_library/integration/kindle.yml +27 -0
- data/spec/fixtures/cassette_library/integration/kindle_2.yml +27 -0
- data/spec/fixtures/cassette_library/integration/multiple_locales.yml +157 -0
- data/spec/fixtures/cassette_library/integration/power_search.yml +27 -0
- data/spec/fixtures/cassette_library/integration/related_items/child.yml +27 -0
- data/spec/fixtures/cassette_library/integration/related_items/parent.yml +27 -0
- data/spec/fixtures/cassette_library/integration/seller_listings_search.yml +27 -0
- data/spec/fixtures/cassette_library/integration/twenty_items.yml +27 -0
- data/spec/fixtures/cassette_library/unit/sucker/request.yml +29 -0
- data/spec/fixtures/cassette_library/unit/sucker/response.yml +27 -0
- data/spec/integration/alternate_versions_spec.rb +28 -20
- data/spec/integration/alternate_versions_spec.rbc +843 -0
- data/spec/integration/errors_spec.rb +10 -6
- data/spec/integration/errors_spec.rbc +964 -0
- data/spec/integration/france_spec.rb +33 -25
- data/spec/integration/france_spec.rbc +1012 -0
- data/spec/integration/images_spec.rb +32 -24
- data/spec/integration/images_spec.rbc +1047 -0
- data/spec/integration/item_lookup_spec.rb +11 -3
- data/spec/integration/item_lookup_spec.rbc +1723 -0
- data/spec/integration/item_search_spec.rb +6 -2
- data/spec/integration/item_search_spec.rbc +926 -0
- data/spec/integration/japan_spec.rb +27 -19
- data/spec/integration/japan_spec.rbc +849 -0
- data/spec/integration/keyword_search_spec.rb +5 -0
- data/spec/integration/keyword_search_spec.rbc +838 -0
- data/spec/integration/kindle_spec.rb +13 -5
- data/spec/integration/kindle_spec.rbc +1425 -0
- data/spec/integration/multiple_locales_spec.rb +34 -26
- data/spec/integration/multiple_locales_spec.rbc +1090 -0
- data/spec/integration/power_search_spec.rb +5 -0
- data/spec/integration/power_search_spec.rbc +838 -0
- data/spec/integration/related_items_spec.rb +41 -29
- data/spec/integration/related_items_spec.rbc +1228 -0
- data/spec/integration/seller_listing_search_spec.rb +3 -0
- data/spec/integration/seller_listing_search_spec.rbc +852 -0
- data/spec/integration/twenty_items_spec.rb +41 -34
- data/spec/integration/twenty_items_spec.rbc +1166 -0
- data/spec/spec_helper.rbc +231 -0
- data/spec/support/amazon.yml +3 -0
- data/spec/support/amazon.yml.example +1 -0
- data/spec/support/amazon_credentials.rbc +154 -0
- data/spec/support/asins.rb +6 -1
- data/spec/support/asins.rbc +335 -0
- data/spec/support/vcr.rbc +360 -0
- data/spec/unit/sucker/request_spec.rb +57 -23
- data/spec/unit/sucker/request_spec.rbc +4031 -0
- data/spec/unit/sucker/response_spec.rb +100 -26
- data/spec/unit/sucker/response_spec.rbc +3787 -0
- data/spec/unit/sucker_spec.rb +5 -1
- data/spec/unit/sucker_spec.rbc +299 -0
- metadata +94 -12
@@ -0,0 +1,360 @@
|
|
1
|
+
!RBIX
|
2
|
+
0
|
3
|
+
x
|
4
|
+
M
|
5
|
+
1
|
6
|
+
n
|
7
|
+
n
|
8
|
+
x
|
9
|
+
10
|
10
|
+
__script__
|
11
|
+
i
|
12
|
+
29
|
13
|
+
5
|
14
|
+
7
|
15
|
+
0
|
16
|
+
64
|
17
|
+
47
|
18
|
+
49
|
19
|
+
1
|
20
|
+
1
|
21
|
+
15
|
22
|
+
45
|
23
|
+
2
|
24
|
+
3
|
25
|
+
56
|
26
|
+
4
|
27
|
+
50
|
28
|
+
5
|
29
|
+
0
|
30
|
+
15
|
31
|
+
45
|
32
|
+
6
|
33
|
+
7
|
34
|
+
56
|
35
|
+
8
|
36
|
+
50
|
37
|
+
9
|
38
|
+
0
|
39
|
+
15
|
40
|
+
2
|
41
|
+
11
|
42
|
+
I
|
43
|
+
2
|
44
|
+
I
|
45
|
+
0
|
46
|
+
I
|
47
|
+
0
|
48
|
+
I
|
49
|
+
0
|
50
|
+
n
|
51
|
+
p
|
52
|
+
10
|
53
|
+
s
|
54
|
+
3
|
55
|
+
vcr
|
56
|
+
x
|
57
|
+
7
|
58
|
+
require
|
59
|
+
x
|
60
|
+
3
|
61
|
+
VCR
|
62
|
+
n
|
63
|
+
M
|
64
|
+
1
|
65
|
+
p
|
66
|
+
2
|
67
|
+
x
|
68
|
+
9
|
69
|
+
for_block
|
70
|
+
t
|
71
|
+
n
|
72
|
+
x
|
73
|
+
9
|
74
|
+
__block__
|
75
|
+
i
|
76
|
+
78
|
77
|
+
57
|
78
|
+
19
|
79
|
+
0
|
80
|
+
15
|
81
|
+
20
|
82
|
+
0
|
83
|
+
45
|
84
|
+
0
|
85
|
+
1
|
86
|
+
65
|
87
|
+
49
|
88
|
+
2
|
89
|
+
0
|
90
|
+
49
|
91
|
+
3
|
92
|
+
1
|
93
|
+
7
|
94
|
+
4
|
95
|
+
64
|
96
|
+
81
|
97
|
+
5
|
98
|
+
13
|
99
|
+
18
|
100
|
+
2
|
101
|
+
49
|
102
|
+
6
|
103
|
+
1
|
104
|
+
15
|
105
|
+
15
|
106
|
+
20
|
107
|
+
0
|
108
|
+
7
|
109
|
+
7
|
110
|
+
13
|
111
|
+
18
|
112
|
+
2
|
113
|
+
49
|
114
|
+
8
|
115
|
+
1
|
116
|
+
15
|
117
|
+
15
|
118
|
+
20
|
119
|
+
0
|
120
|
+
44
|
121
|
+
43
|
122
|
+
9
|
123
|
+
80
|
124
|
+
49
|
125
|
+
10
|
126
|
+
1
|
127
|
+
13
|
128
|
+
7
|
129
|
+
11
|
130
|
+
7
|
131
|
+
12
|
132
|
+
49
|
133
|
+
13
|
134
|
+
2
|
135
|
+
15
|
136
|
+
13
|
137
|
+
7
|
138
|
+
14
|
139
|
+
7
|
140
|
+
15
|
141
|
+
35
|
142
|
+
1
|
143
|
+
49
|
144
|
+
13
|
145
|
+
2
|
146
|
+
15
|
147
|
+
13
|
148
|
+
18
|
149
|
+
2
|
150
|
+
49
|
151
|
+
16
|
152
|
+
1
|
153
|
+
15
|
154
|
+
11
|
155
|
+
I
|
156
|
+
7
|
157
|
+
I
|
158
|
+
1
|
159
|
+
I
|
160
|
+
1
|
161
|
+
I
|
162
|
+
1
|
163
|
+
n
|
164
|
+
p
|
165
|
+
17
|
166
|
+
x
|
167
|
+
4
|
168
|
+
File
|
169
|
+
n
|
170
|
+
x
|
171
|
+
11
|
172
|
+
active_path
|
173
|
+
x
|
174
|
+
7
|
175
|
+
dirname
|
176
|
+
s
|
177
|
+
29
|
178
|
+
/../fixtures/cassette_library
|
179
|
+
x
|
180
|
+
1
|
181
|
+
+
|
182
|
+
x
|
183
|
+
21
|
184
|
+
cassette_library_dir=
|
185
|
+
x
|
186
|
+
7
|
187
|
+
webmock
|
188
|
+
x
|
189
|
+
22
|
190
|
+
http_stubbing_library=
|
191
|
+
x
|
192
|
+
4
|
193
|
+
Hash
|
194
|
+
x
|
195
|
+
16
|
196
|
+
new_from_literal
|
197
|
+
x
|
198
|
+
6
|
199
|
+
record
|
200
|
+
x
|
201
|
+
12
|
202
|
+
new_episodes
|
203
|
+
x
|
204
|
+
3
|
205
|
+
[]=
|
206
|
+
x
|
207
|
+
17
|
208
|
+
match_requests_on
|
209
|
+
x
|
210
|
+
4
|
211
|
+
host
|
212
|
+
x
|
213
|
+
25
|
214
|
+
default_cassette_options=
|
215
|
+
p
|
216
|
+
15
|
217
|
+
I
|
218
|
+
0
|
219
|
+
I
|
220
|
+
3
|
221
|
+
I
|
222
|
+
4
|
223
|
+
I
|
224
|
+
4
|
225
|
+
I
|
226
|
+
1d
|
227
|
+
I
|
228
|
+
5
|
229
|
+
I
|
230
|
+
29
|
231
|
+
I
|
232
|
+
6
|
233
|
+
I
|
234
|
+
2b
|
235
|
+
I
|
236
|
+
8
|
237
|
+
I
|
238
|
+
33
|
239
|
+
I
|
240
|
+
7
|
241
|
+
I
|
242
|
+
3c
|
243
|
+
I
|
244
|
+
8
|
245
|
+
I
|
246
|
+
4e
|
247
|
+
x
|
248
|
+
42
|
249
|
+
/Users/snl/code/sucker/spec/support/vcr.rb
|
250
|
+
p
|
251
|
+
1
|
252
|
+
x
|
253
|
+
1
|
254
|
+
c
|
255
|
+
x
|
256
|
+
6
|
257
|
+
config
|
258
|
+
x
|
259
|
+
5
|
260
|
+
RSpec
|
261
|
+
n
|
262
|
+
M
|
263
|
+
1
|
264
|
+
p
|
265
|
+
2
|
266
|
+
x
|
267
|
+
9
|
268
|
+
for_block
|
269
|
+
t
|
270
|
+
n
|
271
|
+
x
|
272
|
+
9
|
273
|
+
__block__
|
274
|
+
i
|
275
|
+
17
|
276
|
+
57
|
277
|
+
19
|
278
|
+
0
|
279
|
+
15
|
280
|
+
20
|
281
|
+
0
|
282
|
+
45
|
283
|
+
0
|
284
|
+
1
|
285
|
+
43
|
286
|
+
2
|
287
|
+
43
|
288
|
+
3
|
289
|
+
49
|
290
|
+
4
|
291
|
+
1
|
292
|
+
11
|
293
|
+
I
|
294
|
+
4
|
295
|
+
I
|
296
|
+
1
|
297
|
+
I
|
298
|
+
1
|
299
|
+
I
|
300
|
+
1
|
301
|
+
n
|
302
|
+
p
|
303
|
+
5
|
304
|
+
x
|
305
|
+
3
|
306
|
+
VCR
|
307
|
+
n
|
308
|
+
x
|
309
|
+
5
|
310
|
+
RSpec
|
311
|
+
x
|
312
|
+
6
|
313
|
+
Macros
|
314
|
+
x
|
315
|
+
6
|
316
|
+
extend
|
317
|
+
p
|
318
|
+
5
|
319
|
+
I
|
320
|
+
0
|
321
|
+
I
|
322
|
+
b
|
323
|
+
I
|
324
|
+
4
|
325
|
+
I
|
326
|
+
c
|
327
|
+
I
|
328
|
+
11
|
329
|
+
x
|
330
|
+
42
|
331
|
+
/Users/snl/code/sucker/spec/support/vcr.rb
|
332
|
+
p
|
333
|
+
1
|
334
|
+
x
|
335
|
+
6
|
336
|
+
config
|
337
|
+
x
|
338
|
+
9
|
339
|
+
configure
|
340
|
+
p
|
341
|
+
7
|
342
|
+
I
|
343
|
+
0
|
344
|
+
I
|
345
|
+
1
|
346
|
+
I
|
347
|
+
9
|
348
|
+
I
|
349
|
+
3
|
350
|
+
I
|
351
|
+
12
|
352
|
+
I
|
353
|
+
b
|
354
|
+
I
|
355
|
+
1d
|
356
|
+
x
|
357
|
+
42
|
358
|
+
/Users/snl/code/sucker/spec/support/vcr.rb
|
359
|
+
p
|
360
|
+
0
|
@@ -1,7 +1,9 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
module Sucker
|
4
|
+
|
4
5
|
describe Request do
|
6
|
+
|
5
7
|
use_vcr_cassette "unit/sucker/request", :record => :new_episodes
|
6
8
|
|
7
9
|
let(:worker) do
|
@@ -11,59 +13,66 @@ module Sucker
|
|
11
13
|
:secret => "secret")
|
12
14
|
end
|
13
15
|
|
14
|
-
|
16
|
+
describe ".new" do
|
17
|
+
|
15
18
|
it "sets default parameters" do
|
16
19
|
default_parameters = {
|
17
20
|
"Service" => "AWSECommerceService",
|
18
21
|
"Version" => Sucker::CURRENT_AMAZON_API_VERSION }
|
19
22
|
worker.parameters.should include default_parameters
|
20
23
|
end
|
24
|
+
|
21
25
|
end
|
22
26
|
|
23
|
-
|
27
|
+
describe "#<<" do
|
28
|
+
|
24
29
|
it "merges a hash into the parameters" do
|
25
30
|
worker << { "foo" => "bar" }
|
26
31
|
worker.parameters["foo"].should eql "bar"
|
27
32
|
end
|
33
|
+
|
28
34
|
end
|
29
35
|
|
30
|
-
|
36
|
+
describe "#version=" do
|
37
|
+
|
31
38
|
it "sets the Amazon API version" do
|
32
39
|
worker.version = "foo"
|
33
40
|
worker.parameters["Version"].should eql "foo"
|
34
41
|
end
|
42
|
+
|
35
43
|
end
|
36
44
|
|
37
|
-
|
45
|
+
describe "#associate_tag=" do
|
46
|
+
|
38
47
|
it "sets the associate tag in the parameters" do
|
39
48
|
worker.associate_tag = "foo"
|
40
49
|
worker.parameters["AssociateTag"].should eql "foo"
|
41
50
|
end
|
51
|
+
|
42
52
|
end
|
43
53
|
|
44
|
-
|
45
|
-
|
54
|
+
describe "#curl" do
|
55
|
+
|
56
|
+
it "returns curl" do
|
46
57
|
worker.curl.should be_an_instance_of Curl::Easy
|
47
58
|
end
|
48
59
|
|
49
|
-
|
50
|
-
worker.curl.interface.should be_nil
|
60
|
+
context "when given a block" do
|
51
61
|
|
52
|
-
|
53
|
-
curl.interface
|
62
|
+
it "yields curl" do
|
63
|
+
worker.curl.interface.should be_nil
|
64
|
+
|
65
|
+
worker.curl { |curl| curl.interface = "eth1" }
|
66
|
+
|
67
|
+
worker.curl.interface.should eql "eth1"
|
54
68
|
end
|
55
69
|
|
56
|
-
worker.curl.interface.should eql "eth1"
|
57
70
|
end
|
58
|
-
end
|
59
71
|
|
60
|
-
context "#get" do
|
61
|
-
it "returns a response" do
|
62
|
-
worker.get.class.ancestors.should include Response
|
63
|
-
end
|
64
72
|
end
|
65
73
|
|
66
|
-
|
74
|
+
describe "#get!" do
|
75
|
+
|
67
76
|
it "raises if response is not valid" do
|
68
77
|
worker << {
|
69
78
|
"Operation" => "ItemLookup",
|
@@ -71,17 +80,30 @@ module Sucker
|
|
71
80
|
"ItemId" => "0816614024" }
|
72
81
|
lambda { worker.get! }.should raise_error ResponseError
|
73
82
|
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#get" do
|
87
|
+
|
88
|
+
it "returns a response" do
|
89
|
+
worker.get.class.ancestors.should include Response
|
90
|
+
end
|
91
|
+
|
74
92
|
end
|
75
93
|
|
76
|
-
|
94
|
+
describe "#key=" do
|
95
|
+
|
77
96
|
it "sets the Amazon AWS access key in the parameters" do
|
78
97
|
worker.key = "foo"
|
79
98
|
worker.parameters["AWSAccessKeyId"].should eql "foo"
|
80
99
|
end
|
100
|
+
|
81
101
|
end
|
82
102
|
|
83
103
|
context "private methods" do
|
84
|
-
|
104
|
+
|
105
|
+
describe "#build_query" do
|
106
|
+
|
85
107
|
it "canonicalizes parameters" do
|
86
108
|
query = worker.send(:build_query)
|
87
109
|
query.should match /Service=([^&]+)&Timestamp=([^&]+)&Version=([^&]+)/
|
@@ -110,33 +132,45 @@ module Sucker
|
|
110
132
|
query = worker.send(:build_query)
|
111
133
|
query.should match /Foo=1/
|
112
134
|
end
|
135
|
+
|
113
136
|
end
|
114
137
|
|
115
|
-
|
138
|
+
describe "#host" do
|
139
|
+
|
116
140
|
it "returns a host" do
|
117
141
|
worker.locale = "fr"
|
118
142
|
worker.send(:host).should eql "ecs.amazonaws.fr"
|
119
143
|
end
|
144
|
+
|
120
145
|
end
|
121
146
|
|
122
|
-
|
147
|
+
describe "#build_signed_query" do
|
148
|
+
|
123
149
|
it "returns a signed query string" do
|
124
150
|
query = worker.send :build_signed_query
|
125
151
|
query.should match /&Signature=.*/
|
126
152
|
end
|
153
|
+
|
127
154
|
end
|
128
155
|
|
129
|
-
|
156
|
+
describe "#timestamp" do
|
157
|
+
|
130
158
|
it "returns a timestamp" do
|
131
159
|
worker.send(:timestamp)["Timestamp"].should match /^\d+-\d+-\d+T\d+:\d+:\d+Z$/
|
132
160
|
end
|
161
|
+
|
133
162
|
end
|
134
163
|
|
135
|
-
|
164
|
+
describe "#uri" do
|
165
|
+
|
136
166
|
it "returns the URI with which to query Amazon" do
|
137
167
|
worker.send(:uri).should be_an_instance_of URI::HTTP
|
138
168
|
end
|
169
|
+
|
139
170
|
end
|
171
|
+
|
140
172
|
end
|
173
|
+
|
141
174
|
end
|
175
|
+
|
142
176
|
end
|