sucker 1.3.1 → 1.4.0

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/README.md CHANGED
@@ -10,47 +10,90 @@ Sucker is fast and supports __the entire Amazon API__.
10
10
  Usage
11
11
  -----
12
12
 
13
+ Read the [API](http://aws.amazon.com/archives/Product%20Advertising%20API). Jump to the __Operations__ section if in a hurry.
14
+
13
15
  Set up.
14
16
 
15
- worker = Sucker.new(
17
+ worker = Sucker.new \
16
18
  :locale => :us,
17
- :key => 'API KEY',
18
- :secret => 'API SECRET')
19
+ :key => api_key,
20
+ :secret => api_secret
19
21
 
20
22
  Build a request.
21
23
 
22
24
  worker << {
23
25
  'Operation' => 'ItemLookup',
24
26
  'IdType' => 'ASIN',
25
- 'ItemId' => '0816614024',
27
+ 'ItemId' => 10.asins,
26
28
  'ResponseGroup' => 'ItemAttributes' }
27
29
 
28
30
  Get a response.
29
31
 
30
32
  response = worker.get
31
33
 
32
- Do something with it.
34
+ Fulfill a business value.
33
35
 
34
- items = response['Item'] if response.valid? # and so on
36
+ if response.valid?
37
+ response.each('Item') do |item|
38
+ consume item
39
+ end
40
+ end
35
41
 
36
42
  Repeat ad infinitum.
37
43
 
44
+ The following are all valid ways to query a response:
45
+
46
+ items = response.find('Item')
47
+ items = response['Item']
48
+ items = response.map('Item') { |item| ... }
49
+ response.each('Item') { |item| ... }
50
+
51
+ To dig further into the response object:
52
+
53
+ p response.valid?,
54
+ response.body,
55
+ response.code,
56
+ response.errors,
57
+ response.has_errors?,
58
+ response.to_hash,
59
+ response.xml
60
+
38
61
  Read further [here](http://rdoc.info/github/papercavalier/sucker/master/frames) and [here](http://relishapp.com/papercavalier/sucker).
39
62
 
40
- Multiple IPs
41
- ------------
63
+ API Usage
64
+ ---------
65
+
66
+ I have a growing cottage industry of gems we use to manage our
67
+ consumption of the Amazon API.
68
+
69
+ * [Multiplex](http://github.com/papercavalier/multiplex) binds a request
70
+ to a specified local IP.
71
+ * [Throttler](http://github.com/papercavalier/throttler) throttles
72
+ requests to a venue to one per second per IP.
42
73
 
43
- Amazon limits calls to a venue to one per second per IP address.
44
74
 
45
- If your server has multiple local interfaces, use them simultaneously like so:
75
+ A hypothetical setup:
46
76
 
47
- your_ips.each do |ip|
77
+ require 'multiplex'
78
+ require 'throttler'
79
+
80
+ ips.each do |ip|
48
81
  Thread.new do
49
- worker.local_ip = ip
50
- worker.get
82
+ scope = "#{ip}-#{locale}"
83
+ Throttler.throttle(scope) do
84
+ Net::HTTP.bind ip do
85
+ # Set up worker
86
+ response = worker.get
87
+ # Consume response
88
+ end
89
+ end
51
90
  end
52
91
  end
53
92
 
93
+ We prefer to use [Resque](http://github.com/defunkt/resque) to manage
94
+ multiple requests. Generally, four or five workers per venue per IP
95
+ should provide optimum throughput.
96
+
54
97
  Stubbing in Tests
55
98
  -----------------
56
99
 
data/lib/sucker.rbc CHANGED
@@ -1,5 +1,5 @@
1
1
  !RBIX
2
- 10937318184790222022
2
+ 0
3
3
  x
4
4
  M
5
5
  1
@@ -9,7 +9,7 @@ x
9
9
  10
10
10
  __script__
11
11
  i
12
- 46
12
+ 55
13
13
  5
14
14
  7
15
15
  0
@@ -28,30 +28,39 @@ i
28
28
  1
29
29
  1
30
30
  15
31
- 99
31
+ 5
32
32
  7
33
33
  3
34
- 65
34
+ 64
35
+ 47
35
36
  49
37
+ 1
38
+ 1
39
+ 15
40
+ 99
41
+ 7
36
42
  4
43
+ 65
44
+ 49
45
+ 5
37
46
  2
38
47
  13
39
48
  99
40
49
  12
41
50
  7
42
- 5
51
+ 6
43
52
  12
44
53
  7
45
- 6
54
+ 7
46
55
  12
47
56
  65
48
57
  12
49
58
  49
50
- 7
59
+ 8
51
60
  4
52
61
  15
53
62
  49
54
- 5
63
+ 6
55
64
  0
56
65
  15
57
66
  2
@@ -66,14 +75,17 @@ I
66
75
  0
67
76
  n
68
77
  p
69
- 8
78
+ 9
70
79
  s
71
- 14
72
- sucker/request
80
+ 17
81
+ sucker/parameters
73
82
  x
74
83
  7
75
84
  require
76
85
  s
86
+ 14
87
+ sucker/request
88
+ s
77
89
  15
78
90
  sucker/response
79
91
  x
@@ -208,16 +220,16 @@ p
208
220
  I
209
221
  -1
210
222
  I
211
- 10
223
+ 13
212
224
  I
213
225
  e
214
226
  I
215
- 11
227
+ 14
216
228
  I
217
229
  2b
218
230
  x
219
- 36
220
- /Users/snl/code/sucker/lib/sucker.rb
231
+ 44
232
+ /Users/hakanensari/code/sucker/lib/sucker.rb
221
233
  p
222
234
  1
223
235
  x
@@ -231,35 +243,39 @@ p
231
243
  I
232
244
  2
233
245
  I
234
- 10
246
+ 13
235
247
  I
236
248
  d
237
249
  x
238
- 36
239
- /Users/snl/code/sucker/lib/sucker.rb
250
+ 44
251
+ /Users/hakanensari/code/sucker/lib/sucker.rb
240
252
  p
241
253
  0
242
254
  x
243
255
  13
244
256
  attach_method
245
257
  p
246
- 7
258
+ 9
247
259
  I
248
260
  0
249
261
  I
250
- 1
262
+ 3
251
263
  I
252
264
  9
253
265
  I
254
- 2
266
+ 4
255
267
  I
256
268
  12
257
269
  I
258
- 7
270
+ 5
271
+ I
272
+ 1b
259
273
  I
260
- 2e
274
+ a
275
+ I
276
+ 37
261
277
  x
262
- 36
263
- /Users/snl/code/sucker/lib/sucker.rb
278
+ 44
279
+ /Users/hakanensari/code/sucker/lib/sucker.rb
264
280
  p
265
281
  0
@@ -1,5 +1,5 @@
1
1
  !RBIX
2
- 10937318184790222022
2
+ 0
3
3
  x
4
4
  M
5
5
  1
@@ -9,31 +9,40 @@ x
9
9
  10
10
10
  __script__
11
11
  i
12
- 28
13
- 99
12
+ 37
13
+ 5
14
14
  7
15
15
  0
16
- 65
16
+ 64
17
+ 47
17
18
  49
18
19
  1
20
+ 1
21
+ 15
22
+ 99
23
+ 7
24
+ 2
25
+ 65
26
+ 49
27
+ 3
19
28
  2
20
29
  13
21
30
  99
22
31
  12
23
32
  7
24
- 2
33
+ 4
25
34
  12
26
35
  7
27
- 3
36
+ 5
28
37
  12
29
38
  65
30
39
  12
31
40
  49
32
- 4
41
+ 6
33
42
  4
34
43
  15
35
44
  49
36
- 2
45
+ 4
37
46
  0
38
47
  15
39
48
  2
@@ -48,7 +57,13 @@ I
48
57
  0
49
58
  n
50
59
  p
51
- 5
60
+ 7
61
+ s
62
+ 24
63
+ active_support/inflector
64
+ x
65
+ 7
66
+ require
52
67
  x
53
68
  6
54
69
  Sucker
@@ -72,30 +87,30 @@ i
72
87
  99
73
88
  7
74
89
  0
75
- 44
76
- 43
90
+ 45
77
91
  1
92
+ 2
78
93
  65
79
94
  49
80
- 2
95
+ 3
81
96
  3
82
97
  13
83
98
  99
84
99
  12
85
100
  7
86
- 3
101
+ 4
87
102
  12
88
103
  7
89
- 4
104
+ 5
90
105
  12
91
106
  65
92
107
  12
93
108
  49
94
- 5
109
+ 6
95
110
  4
96
111
  15
97
112
  49
98
- 3
113
+ 4
99
114
  0
100
115
  11
101
116
  I
@@ -108,13 +123,14 @@ I
108
123
  0
109
124
  n
110
125
  p
111
- 6
126
+ 7
112
127
  x
113
128
  10
114
129
  Parameters
115
130
  x
116
131
  4
117
132
  Hash
133
+ n
118
134
  x
119
135
  10
120
136
  open_class
@@ -308,24 +324,24 @@ p
308
324
  I
309
325
  -1
310
326
  I
311
- 6
327
+ b
312
328
  I
313
329
  0
314
330
  I
315
- 7
331
+ c
316
332
  I
317
333
  b
318
334
  I
319
- 8
335
+ d
320
336
  I
321
337
  16
322
338
  I
323
- 9
339
+ e
324
340
  I
325
341
  21
326
342
  x
327
- 47
328
- /Users/snl/code/sucker/lib/sucker/parameters.rb
343
+ 55
344
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
329
345
  p
330
346
  0
331
347
  x
@@ -391,7 +407,7 @@ x
391
407
  9
392
408
  normalize
393
409
  i
394
- 86
410
+ 75
395
411
  58
396
412
  37
397
413
  19
@@ -451,19 +467,8 @@ i
451
467
  49
452
468
  5
453
469
  0
454
- 7
455
- 6
456
- 64
457
470
  49
458
- 7
459
- 1
460
- 56
461
- 8
462
- 50
463
- 9
464
- 0
465
- 49
466
- 4
471
+ 6
467
472
  0
468
473
  20
469
474
  3
@@ -471,7 +476,7 @@ i
471
476
  18
472
477
  3
473
478
  49
474
- 10
479
+ 7
475
480
  2
476
481
  15
477
482
  15
@@ -488,7 +493,7 @@ I
488
493
  2
489
494
  n
490
495
  p
491
- 11
496
+ 8
492
497
  x
493
498
  5
494
499
  Array
@@ -505,94 +510,9 @@ join
505
510
  x
506
511
  4
507
512
  to_s
508
- s
509
- 1
510
- _
511
513
  x
512
- 5
513
- split
514
- M
515
- 1
516
- p
517
- 2
518
- x
519
- 9
520
- for_block
521
- t
522
- n
523
- x
524
- 9
525
- normalize
526
- i
527
- 29
528
- 57
529
- 19
530
- 0
531
- 15
532
- 20
533
- 0
534
- 78
535
- 79
536
- 20
537
- 0
538
- 78
539
- 79
540
- 49
541
- 0
542
- 2
543
- 49
544
- 1
545
- 0
546
- 13
547
- 18
548
- 4
549
- 49
550
- 2
551
- 3
552
- 15
553
- 15
554
- 20
555
- 0
556
- 11
557
- I
558
514
  8
559
- I
560
- 1
561
- I
562
- 1
563
- I
564
- 1
565
- n
566
- p
567
- 3
568
- x
569
- 2
570
- []
571
- x
572
- 6
573
- upcase
574
- x
575
- 3
576
- []=
577
- p
578
- 3
579
- I
580
- 0
581
- I
582
- 11
583
- I
584
- 1d
585
- x
586
- 47
587
- /Users/snl/code/sucker/lib/sucker/parameters.rb
588
- p
589
- 1
590
- x
591
- 1
592
- w
593
- x
594
- 3
595
- map
515
+ camelize
596
516
  x
597
517
  3
598
518
  []=
@@ -601,28 +521,28 @@ p
601
521
  I
602
522
  0
603
523
  I
604
- e
524
+ 12
605
525
  I
606
526
  a
607
527
  I
608
- f
528
+ 13
609
529
  I
610
530
  18
611
531
  I
612
- 10
532
+ 14
613
533
  I
614
534
  34
615
535
  I
616
- 11
536
+ 15
617
537
  I
618
- 53
538
+ 48
619
539
  I
620
- 12
540
+ 16
621
541
  I
622
- 56
542
+ 4b
623
543
  x
624
- 47
625
- /Users/snl/code/sucker/lib/sucker/parameters.rb
544
+ 55
545
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
626
546
  p
627
547
  4
628
548
  x
@@ -645,16 +565,16 @@ p
645
565
  I
646
566
  -1
647
567
  I
648
- d
568
+ 11
649
569
  I
650
570
  0
651
571
  I
652
- e
572
+ 12
653
573
  I
654
574
  f
655
575
  x
656
- 47
657
- /Users/snl/code/sucker/lib/sucker/parameters.rb
576
+ 55
577
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
658
578
  p
659
579
  0
660
580
  x
@@ -720,16 +640,16 @@ p
720
640
  I
721
641
  -1
722
642
  I
723
- 18
643
+ 1c
724
644
  I
725
645
  0
726
646
  I
727
- 19
647
+ 1d
728
648
  I
729
649
  10
730
650
  x
731
- 47
732
- /Users/snl/code/sucker/lib/sucker/parameters.rb
651
+ 55
652
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
733
653
  p
734
654
  0
735
655
  p
@@ -737,32 +657,32 @@ p
737
657
  I
738
658
  2
739
659
  I
740
- 3
660
+ 8
741
661
  I
742
662
  c
743
663
  I
744
- 4
664
+ 9
745
665
  I
746
666
  16
747
667
  I
748
- 6
668
+ b
749
669
  I
750
670
  24
751
671
  I
752
- d
672
+ 11
753
673
  I
754
674
  32
755
675
  I
756
- 16
676
+ 1a
757
677
  I
758
678
  36
759
679
  I
760
- 18
680
+ 1c
761
681
  I
762
682
  44
763
683
  x
764
- 47
765
- /Users/snl/code/sucker/lib/sucker/parameters.rb
684
+ 55
685
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
766
686
  p
767
687
  0
768
688
  x
@@ -773,27 +693,31 @@ p
773
693
  I
774
694
  2
775
695
  I
776
- 2
696
+ 7
777
697
  I
778
698
  1f
779
699
  x
780
- 47
781
- /Users/snl/code/sucker/lib/sucker/parameters.rb
700
+ 55
701
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
782
702
  p
783
703
  0
784
704
  x
785
705
  13
786
706
  attach_method
787
707
  p
788
- 3
708
+ 5
789
709
  I
790
710
  0
791
711
  I
792
- 1
712
+ 3
793
713
  I
794
- 1c
714
+ 9
715
+ I
716
+ 5
717
+ I
718
+ 25
795
719
  x
796
- 47
797
- /Users/snl/code/sucker/lib/sucker/parameters.rb
720
+ 55
721
+ /Users/hakanensari/code/sucker/lib/sucker/parameters.rb
798
722
  p
799
723
  0