monkey_wrench 0.1.2 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,18 @@
1
1
  # MonkeyWrench
2
- MonkeyWrench is a rubyesque API for interfacing with [Mailchimp](http://www.mailchimp.com) (or show me some love by registering [via my affiliate link](http://eepurl.com/Ge71)).
2
+ MonkeyWrench is a rubyesque API for interfacing with [Mailchimp](http://www.mailchimp.com) (or show me some love by registering [via my affiliate link](http://eepurl.com/Ge71)). It makes managing a mailing list, adding/removing subscribers, and setting up autoresponders so easy that even a monkey could do it.
3
+
4
+ The API provided by MonkeyWrench takes an idiomatic ruby approach where possible, so supported parameters and options may differ slightly to what is documented in the official Mailchimp API documentation. Where possible, refer to the MonkeyWrench docs.
3
5
 
4
6
  ## Getting Started
5
7
 
8
+ ### Installation
9
+
10
+ The easiest way to get started is to install the gem:
11
+
12
+ gem install monkey_wrench
13
+
14
+ ### Usage
15
+
6
16
  To get started, you need to first connect to the appropriate datacenter with your API key:
7
17
 
8
18
  MonkeyWrench::Config.new(:datacenter => "us1",
@@ -17,7 +27,52 @@ From there you've got a rich API for managing Lists and Members. To subscribe a
17
27
 
18
28
  For more information, [check the documentation](http://rdoc.info/projects/rubypond/monkeywrench)
19
29
 
30
+ ## Compatibility
31
+
32
+ Tested on the following versions:
33
+
34
+ * 1.8.7
35
+ * 1.9.2
36
+ * Ruby Enterprise Edition 1.8.7
37
+ * Rubinius 1.1.1
38
+ * JRuby 1.5.5
39
+
40
+ It may work in 1.8.6 too, but a test dependency (WebMock) won't work so tests aren't currently automated against that version.
41
+
42
+ ## Status
43
+
44
+ The library is currently under development, but in production use for many clients. It's still currently using the 1.2 version of the Mailchimp API (Mailchimp haven't made any deprecation announcements yet, and they still support 1.1 so it shouldn't be an issue any time soon). I'm working towards a switch to 1.3.
45
+
46
+ ## Contributing
47
+
48
+ Patches and pull requests are gladly accepted. Please make sure that you include associated tests and documentation and that your commit messages are brief but descriptive.
49
+
20
50
  ## Credits & Contributions
21
51
 
22
- * [David Heath](http://davidheath.org/)
23
- * [Maxime Guilbot](http://github.com/maxime)
52
+ * [David Heath](https://davidheath.org/)
53
+ * [Maxime Guilbot](https://github.com/maxime)
54
+ * [Keith Marcum](https://github.com/kamarcum)
55
+
56
+ ## License
57
+
58
+ MonkeyWrench is released under the MIT license.
59
+
60
+ Copyright (c) 2010 Glenn Gillen
61
+
62
+ Permission is hereby granted, free of charge, to any person obtaining a copy
63
+ of this software and associated documentation files (the "Software"), to deal
64
+ in the Software without restriction, including without limitation the rights
65
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
66
+ copies of the Software, and to permit persons to whom the Software is
67
+ furnished to do so, subject to the following conditions:
68
+
69
+ The above copyright notice and this permission notice shall be included in
70
+ all copies or substantial portions of the Software.
71
+
72
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
73
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
74
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
75
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
76
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
77
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
78
+ THE SOFTWARE.
@@ -1,8 +1,3 @@
1
- begin
2
- require 'yajl'
3
- rescue LoadError
4
- require 'json'
5
- end
6
1
  require 'ostruct'
7
2
  module MonkeyWrench
8
3
  class Base < OpenStruct
@@ -11,12 +6,12 @@ module MonkeyWrench
11
6
  @@apikey = nil
12
7
  @@datacenter = nil
13
8
  @@dryrun = false
14
-
9
+
15
10
  class << self
16
11
  def default_query_params
17
12
  { :output => "json", :apikey=> @@apikey}
18
13
  end
19
-
14
+
20
15
  def base_uri
21
16
  "http://#{datacenter}.api.mailchimp.com/1.2/"
22
17
  end
@@ -36,7 +31,7 @@ module MonkeyWrench
36
31
  end
37
32
  end
38
33
  end
39
-
34
+
40
35
  def post(params, http_options = {})
41
36
  if @@dryrun
42
37
  puts "POST #{base_uri} #{params.merge(default_query_params).inspect}"
@@ -50,10 +45,10 @@ module MonkeyWrench
50
45
  end
51
46
  end
52
47
  end
53
-
48
+
54
49
  def handle_errors(objects)
55
50
  return objects unless objects.respond_to?(:has_key?)
56
-
51
+
57
52
  if objects.has_key?("error")
58
53
  objects.replace({ "error" => MonkeyWrench::Error.new(objects['error'], objects['code']) })
59
54
  elsif objects.has_key?("errors")
@@ -69,12 +64,12 @@ module MonkeyWrench
69
64
  def apikey
70
65
  @@apikey
71
66
  end
72
-
67
+
73
68
  def datacenter
74
69
  @@datacenter
75
70
  end
76
71
  end
77
-
72
+
78
73
  private
79
74
  def self.robustly(http_options, &block)
80
75
  retry_limit = http_options[:retry_limit] || default_retry_limit
@@ -94,10 +89,9 @@ module MonkeyWrench
94
89
  def get(*args)
95
90
  self.class.get(*args)
96
91
  end
97
-
92
+
98
93
  def post(*args)
99
94
  self.class.post(*args)
100
95
  end
101
-
102
96
  end
103
97
  end
@@ -3,7 +3,7 @@ require 'cgi'
3
3
  module MonkeyWrench
4
4
  class List < MonkeyWrench::Base
5
5
  # Finds a given list by name
6
- #
6
+ #
7
7
  # @example
8
8
  # MonkeyWrench::List.find_by_name("My Example List")
9
9
  #
@@ -13,14 +13,6 @@ module MonkeyWrench
13
13
  lists = find_all.detect{|list| list.name == list_name}
14
14
  end
15
15
 
16
- def ==(other_list)
17
- other_list.is_a?(self.class) && self.id == other_list.id
18
- end
19
-
20
- def self.find(id)
21
- new(:id => id)
22
- end
23
-
24
16
  # Will compare another list against the current one and return true if
25
17
  # they are the same (based on list ID)
26
18
  #
@@ -44,25 +36,36 @@ module MonkeyWrench
44
36
  # @param [String] id the unique Mailchimp list ID
45
37
  # @return [MonkeyWrench::List] the list
46
38
  def self.find(id)
47
- new(:id => id)
39
+ find_all.find{|e| e.id == id}
48
40
  end
49
-
41
+
50
42
  # Finds all lists
51
43
  #
52
44
  # @example
53
45
  # MonkeyWrench::List.find_all
54
46
  #
55
- # @return [Array<MonkeyWrench::List>]
47
+ # @return [Array<MonkeyWrench::List>]
56
48
  def self.find_all
57
49
  @@lists ||= post({ :method => "lists" }).map do |list|
58
50
  List.new(list)
59
51
  end
60
52
  end
61
-
53
+
62
54
  class << self
63
55
  alias :all :find_all
64
56
  end
65
-
57
+
58
+ # Clears the List cache (results from List.find_all are cached for
59
+ # performance reasons)
60
+ #
61
+ # @example
62
+ # MonkeyWrench::List.clear!
63
+ #
64
+ # @return nil
65
+ def self.clear!
66
+ @@lists = nil
67
+ end
68
+
66
69
  # Returns all members for this list
67
70
  #
68
71
  # @example Find all members that have unsubscribed in the last 24 hours:
@@ -91,7 +94,7 @@ module MonkeyWrench
91
94
  MonkeyWrench::Member.new(response_user)
92
95
  end
93
96
  end
94
- end
97
+ end
95
98
 
96
99
  # Enumerates over each member and executes the provided block. Will
97
100
  # automatically page and batch requests for members.
@@ -104,7 +107,7 @@ module MonkeyWrench
104
107
  # end
105
108
  #
106
109
  # @param [Proc] &block code to execute for each member
107
- def each_member(&block)
110
+ def each_member(&block)
108
111
  page = 0
109
112
  loop do
110
113
  batch = members(:start => page, :limit => 15000)
@@ -115,7 +118,7 @@ module MonkeyWrench
115
118
  page += 1
116
119
  end
117
120
  end
118
-
121
+
119
122
  # Updates details of list members
120
123
  #
121
124
  # @example Update a single member's email address
@@ -148,7 +151,7 @@ module MonkeyWrench
148
151
  post(options.merge(mailchimp_args))
149
152
  end
150
153
  end
151
-
154
+
152
155
  # Find a member in this list with the given email address
153
156
  #
154
157
  # @example
@@ -166,6 +169,23 @@ module MonkeyWrench
166
169
  end
167
170
  end
168
171
 
172
+ # Check if an email has subscribed to the list
173
+ #
174
+ # @example
175
+ # list = MonkeyWrench::List.find("0a649eafc3")
176
+ # list.member?("glenn@rubypond.com")
177
+ #
178
+ # @param [String] email members email address
179
+ # @return [Boolean]
180
+ def member?(email)
181
+ response = post(:id => self.id, :method => "listMemberInfo", :email_address => email)
182
+ if response['error']
183
+ false
184
+ else
185
+ true
186
+ end
187
+ end
188
+
169
189
  # Subscribes a new member to the list
170
190
  #
171
191
  # @example Subscribe a new email address
@@ -201,7 +221,7 @@ module MonkeyWrench
201
221
  return { :success => 1, :errors => []}
202
222
  end
203
223
  end
204
-
224
+
205
225
  # Unsubscribes a person (or list of people) from the list
206
226
  #
207
227
  # @example Unsubscribe a single user
@@ -230,7 +250,7 @@ module MonkeyWrench
230
250
  return { :success => response["success_count"],
231
251
  :errors => response["errors"] }
232
252
  end
233
-
253
+
234
254
  # Will flag the email(s) as opted-out for all future mailing for this list
235
255
  #
236
256
  # @example Opt-out a single user
@@ -244,17 +264,17 @@ module MonkeyWrench
244
264
  # @param [String, Array<String>] email address(es) of people to opt-out.
245
265
  # @return [Hash] contains 2 keys. :success contains the number of successful actions, :error a list of all errors.
246
266
  def opt_out(emails)
247
- emails = [*emails]
267
+ emails = [*emails]
248
268
  subscribe(emails.map{|email| { :email => email }})
249
269
  unsubscribe(emails, :send_goodbye => false, :send_notify => false)
250
270
  end
251
-
271
+
252
272
  private
253
273
  def self.reserved_keys
254
274
  [:email, :type, :double_optin, :update_existing, :replace_interests,
255
275
  :send_welcome, :emails, :send_notify, :send_goodbye, :delete_member]
256
276
  end
257
-
277
+
258
278
  def subscribe_many(subscribers, opts = {})
259
279
  if opts[:send_welcome]
260
280
  subscribe_one_at_a_time(subscribers, opts)
@@ -0,0 +1,1758 @@
1
+ !RBIX
2
+ 0
3
+ x
4
+ M
5
+ 1
6
+ n
7
+ n
8
+ x
9
+ 10
10
+ __script__
11
+ i
12
+ 77
13
+ 99
14
+ 43
15
+ 0
16
+ 7
17
+ 1
18
+ 49
19
+ 2
20
+ 1
21
+ 45
22
+ 3
23
+ 4
24
+ 7
25
+ 5
26
+ 64
27
+ 45
28
+ 3
29
+ 6
30
+ 65
31
+ 49
32
+ 7
33
+ 0
34
+ 49
35
+ 8
36
+ 1
37
+ 49
38
+ 9
39
+ 2
40
+ 49
41
+ 10
42
+ 1
43
+ 15
44
+ 5
45
+ 7
46
+ 11
47
+ 64
48
+ 47
49
+ 49
50
+ 12
51
+ 1
52
+ 15
53
+ 99
54
+ 7
55
+ 13
56
+ 45
57
+ 14
58
+ 15
59
+ 43
60
+ 16
61
+ 43
62
+ 17
63
+ 45
64
+ 18
65
+ 19
66
+ 49
67
+ 20
68
+ 3
69
+ 13
70
+ 99
71
+ 12
72
+ 7
73
+ 21
74
+ 12
75
+ 7
76
+ 22
77
+ 12
78
+ 65
79
+ 12
80
+ 49
81
+ 23
82
+ 4
83
+ 15
84
+ 49
85
+ 21
86
+ 0
87
+ 15
88
+ 2
89
+ 11
90
+ I
91
+ 6
92
+ I
93
+ 0
94
+ I
95
+ 0
96
+ I
97
+ 0
98
+ n
99
+ p
100
+ 24
101
+ x
102
+ 7
103
+ Globals
104
+ x
105
+ 2
106
+ $:
107
+ x
108
+ 2
109
+ []
110
+ x
111
+ 4
112
+ File
113
+ n
114
+ s
115
+ 2
116
+ ..
117
+ n
118
+ x
119
+ 11
120
+ active_path
121
+ x
122
+ 7
123
+ dirname
124
+ x
125
+ 11
126
+ expand_path
127
+ x
128
+ 7
129
+ unshift
130
+ s
131
+ 11
132
+ test_helper
133
+ x
134
+ 7
135
+ require
136
+ x
137
+ 8
138
+ BaseTest
139
+ x
140
+ 4
141
+ Test
142
+ n
143
+ x
144
+ 4
145
+ Unit
146
+ x
147
+ 8
148
+ TestCase
149
+ x
150
+ 12
151
+ MonkeyWrench
152
+ n
153
+ x
154
+ 16
155
+ open_class_under
156
+ x
157
+ 14
158
+ __class_init__
159
+ M
160
+ 1
161
+ n
162
+ n
163
+ x
164
+ 8
165
+ BaseTest
166
+ i
167
+ 24
168
+ 5
169
+ 66
170
+ 5
171
+ 7
172
+ 0
173
+ 64
174
+ 56
175
+ 1
176
+ 47
177
+ 50
178
+ 2
179
+ 1
180
+ 15
181
+ 5
182
+ 7
183
+ 3
184
+ 64
185
+ 56
186
+ 4
187
+ 47
188
+ 50
189
+ 2
190
+ 1
191
+ 11
192
+ I
193
+ 3
194
+ I
195
+ 0
196
+ I
197
+ 0
198
+ I
199
+ 0
200
+ n
201
+ p
202
+ 5
203
+ s
204
+ 18
205
+ making an HTTP GET
206
+ M
207
+ 1
208
+ p
209
+ 2
210
+ x
211
+ 9
212
+ for_block
213
+ t
214
+ n
215
+ x
216
+ 8
217
+ BaseTest
218
+ i
219
+ 22
220
+ 5
221
+ 7
222
+ 0
223
+ 64
224
+ 56
225
+ 1
226
+ 47
227
+ 50
228
+ 2
229
+ 1
230
+ 15
231
+ 5
232
+ 7
233
+ 3
234
+ 64
235
+ 56
236
+ 4
237
+ 47
238
+ 50
239
+ 2
240
+ 1
241
+ 11
242
+ I
243
+ 4
244
+ I
245
+ 0
246
+ I
247
+ 0
248
+ I
249
+ 0
250
+ I
251
+ -2
252
+ p
253
+ 5
254
+ s
255
+ 27
256
+ retry if HTTP GET times out
257
+ M
258
+ 1
259
+ p
260
+ 2
261
+ x
262
+ 9
263
+ for_block
264
+ t
265
+ n
266
+ x
267
+ 8
268
+ BaseTest
269
+ i
270
+ 155
271
+ 5
272
+ 7
273
+ 0
274
+ 64
275
+ 47
276
+ 49
277
+ 1
278
+ 1
279
+ 19
280
+ 0
281
+ 15
282
+ 5
283
+ 7
284
+ 2
285
+ 64
286
+ 47
287
+ 49
288
+ 3
289
+ 1
290
+ 19
291
+ 1
292
+ 15
293
+ 20
294
+ 1
295
+ 7
296
+ 4
297
+ 49
298
+ 5
299
+ 1
300
+ 7
301
+ 6
302
+ 64
303
+ 49
304
+ 7
305
+ 1
306
+ 15
307
+ 45
308
+ 8
309
+ 9
310
+ 43
311
+ 10
312
+ 7
313
+ 11
314
+ 49
315
+ 5
316
+ 1
317
+ 7
318
+ 12
319
+ 64
320
+ 49
321
+ 7
322
+ 1
323
+ 15
324
+ 45
325
+ 13
326
+ 14
327
+ 43
328
+ 15
329
+ 49
330
+ 16
331
+ 0
332
+ 7
333
+ 17
334
+ 49
335
+ 18
336
+ 1
337
+ 20
338
+ 0
339
+ 49
340
+ 19
341
+ 1
342
+ 45
343
+ 20
344
+ 21
345
+ 43
346
+ 22
347
+ 49
348
+ 23
349
+ 1
350
+ 15
351
+ 45
352
+ 13
353
+ 24
354
+ 43
355
+ 15
356
+ 49
357
+ 16
358
+ 0
359
+ 7
360
+ 17
361
+ 49
362
+ 18
363
+ 1
364
+ 20
365
+ 0
366
+ 49
367
+ 19
368
+ 1
369
+ 45
370
+ 20
371
+ 25
372
+ 43
373
+ 22
374
+ 49
375
+ 23
376
+ 1
377
+ 15
378
+ 45
379
+ 13
380
+ 26
381
+ 43
382
+ 15
383
+ 49
384
+ 16
385
+ 0
386
+ 7
387
+ 17
388
+ 49
389
+ 18
390
+ 1
391
+ 20
392
+ 0
393
+ 49
394
+ 19
395
+ 1
396
+ 20
397
+ 1
398
+ 49
399
+ 7
400
+ 1
401
+ 15
402
+ 5
403
+ 45
404
+ 8
405
+ 27
406
+ 43
407
+ 10
408
+ 44
409
+ 43
410
+ 28
411
+ 78
412
+ 49
413
+ 29
414
+ 1
415
+ 49
416
+ 30
417
+ 1
418
+ 7
419
+ 6
420
+ 64
421
+ 47
422
+ 49
423
+ 31
424
+ 2
425
+ 11
426
+ I
427
+ 7
428
+ I
429
+ 2
430
+ I
431
+ 0
432
+ I
433
+ 0
434
+ I
435
+ -2
436
+ p
437
+ 32
438
+ s
439
+ 7
440
+ retries
441
+ x
442
+ 8
443
+ sequence
444
+ s
445
+ 0
446
+
447
+ x
448
+ 4
449
+ mock
450
+ x
451
+ 15
452
+ parsed_response
453
+ x
454
+ 5
455
+ stubs
456
+ s
457
+ 12
458
+ the response
459
+ x
460
+ 7
461
+ returns
462
+ x
463
+ 12
464
+ MonkeyWrench
465
+ n
466
+ x
467
+ 4
468
+ Base
469
+ x
470
+ 8
471
+ base_uri
472
+ s
473
+ 18
474
+ http://example.com
475
+ x
476
+ 8
477
+ HTTParty
478
+ n
479
+ x
480
+ 7
481
+ Request
482
+ x
483
+ 12
484
+ any_instance
485
+ x
486
+ 7
487
+ perform
488
+ x
489
+ 7
490
+ expects
491
+ x
492
+ 11
493
+ in_sequence
494
+ x
495
+ 7
496
+ Timeout
497
+ n
498
+ x
499
+ 5
500
+ Error
501
+ x
502
+ 6
503
+ raises
504
+ n
505
+ n
506
+ n
507
+ n
508
+ x
509
+ 4
510
+ Hash
511
+ x
512
+ 16
513
+ new_from_literal
514
+ x
515
+ 3
516
+ get
517
+ x
518
+ 12
519
+ assert_equal
520
+ p
521
+ 19
522
+ I
523
+ 0
524
+ I
525
+ 7
526
+ I
527
+ 0
528
+ I
529
+ 8
530
+ I
531
+ b
532
+ I
533
+ 9
534
+ I
535
+ 16
536
+ I
537
+ a
538
+ I
539
+ 24
540
+ I
541
+ b
542
+ I
543
+ 35
544
+ I
545
+ c
546
+ I
547
+ 50
548
+ I
549
+ d
550
+ I
551
+ 6b
552
+ I
553
+ e
554
+ I
555
+ 83
556
+ I
557
+ f
558
+ I
559
+ 9b
560
+ x
561
+ 82
562
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
563
+ p
564
+ 2
565
+ x
566
+ 7
567
+ retries
568
+ x
569
+ 8
570
+ response
571
+ x
572
+ 6
573
+ should
574
+ s
575
+ 46
576
+ rethrow Timeout::Error if retry limit exceeded
577
+ M
578
+ 1
579
+ p
580
+ 2
581
+ x
582
+ 9
583
+ for_block
584
+ t
585
+ n
586
+ x
587
+ 8
588
+ BaseTest
589
+ i
590
+ 120
591
+ 5
592
+ 7
593
+ 0
594
+ 64
595
+ 47
596
+ 49
597
+ 1
598
+ 1
599
+ 19
600
+ 0
601
+ 15
602
+ 5
603
+ 7
604
+ 2
605
+ 64
606
+ 47
607
+ 49
608
+ 3
609
+ 1
610
+ 19
611
+ 1
612
+ 15
613
+ 20
614
+ 1
615
+ 7
616
+ 4
617
+ 49
618
+ 5
619
+ 1
620
+ 7
621
+ 6
622
+ 64
623
+ 49
624
+ 7
625
+ 1
626
+ 15
627
+ 45
628
+ 8
629
+ 9
630
+ 43
631
+ 10
632
+ 7
633
+ 11
634
+ 49
635
+ 5
636
+ 1
637
+ 7
638
+ 12
639
+ 64
640
+ 49
641
+ 7
642
+ 1
643
+ 15
644
+ 45
645
+ 13
646
+ 14
647
+ 43
648
+ 15
649
+ 49
650
+ 16
651
+ 0
652
+ 7
653
+ 17
654
+ 49
655
+ 18
656
+ 1
657
+ 20
658
+ 0
659
+ 49
660
+ 19
661
+ 1
662
+ 45
663
+ 20
664
+ 21
665
+ 43
666
+ 22
667
+ 49
668
+ 23
669
+ 1
670
+ 15
671
+ 45
672
+ 13
673
+ 24
674
+ 43
675
+ 15
676
+ 49
677
+ 16
678
+ 0
679
+ 7
680
+ 17
681
+ 49
682
+ 18
683
+ 1
684
+ 20
685
+ 0
686
+ 49
687
+ 19
688
+ 1
689
+ 45
690
+ 20
691
+ 25
692
+ 43
693
+ 22
694
+ 49
695
+ 23
696
+ 1
697
+ 15
698
+ 5
699
+ 45
700
+ 20
701
+ 26
702
+ 43
703
+ 22
704
+ 56
705
+ 27
706
+ 47
707
+ 50
708
+ 28
709
+ 1
710
+ 11
711
+ I
712
+ 6
713
+ I
714
+ 2
715
+ I
716
+ 0
717
+ I
718
+ 0
719
+ I
720
+ -2
721
+ p
722
+ 29
723
+ s
724
+ 7
725
+ retries
726
+ x
727
+ 8
728
+ sequence
729
+ s
730
+ 0
731
+
732
+ x
733
+ 4
734
+ mock
735
+ x
736
+ 15
737
+ parsed_response
738
+ x
739
+ 5
740
+ stubs
741
+ s
742
+ 12
743
+ the response
744
+ x
745
+ 7
746
+ returns
747
+ x
748
+ 12
749
+ MonkeyWrench
750
+ n
751
+ x
752
+ 4
753
+ Base
754
+ x
755
+ 8
756
+ base_uri
757
+ s
758
+ 18
759
+ http://example.com
760
+ x
761
+ 8
762
+ HTTParty
763
+ n
764
+ x
765
+ 7
766
+ Request
767
+ x
768
+ 12
769
+ any_instance
770
+ x
771
+ 7
772
+ perform
773
+ x
774
+ 7
775
+ expects
776
+ x
777
+ 11
778
+ in_sequence
779
+ x
780
+ 7
781
+ Timeout
782
+ n
783
+ x
784
+ 5
785
+ Error
786
+ x
787
+ 6
788
+ raises
789
+ n
790
+ n
791
+ n
792
+ M
793
+ 1
794
+ p
795
+ 2
796
+ x
797
+ 9
798
+ for_block
799
+ t
800
+ n
801
+ x
802
+ 8
803
+ BaseTest
804
+ i
805
+ 31
806
+ 45
807
+ 0
808
+ 1
809
+ 43
810
+ 2
811
+ 44
812
+ 43
813
+ 3
814
+ 78
815
+ 49
816
+ 4
817
+ 1
818
+ 44
819
+ 43
820
+ 3
821
+ 79
822
+ 49
823
+ 4
824
+ 1
825
+ 13
826
+ 7
827
+ 5
828
+ 80
829
+ 49
830
+ 6
831
+ 2
832
+ 15
833
+ 49
834
+ 7
835
+ 2
836
+ 11
837
+ I
838
+ 7
839
+ I
840
+ 0
841
+ I
842
+ 0
843
+ I
844
+ 0
845
+ I
846
+ -2
847
+ p
848
+ 8
849
+ x
850
+ 12
851
+ MonkeyWrench
852
+ n
853
+ x
854
+ 4
855
+ Base
856
+ x
857
+ 4
858
+ Hash
859
+ x
860
+ 16
861
+ new_from_literal
862
+ x
863
+ 11
864
+ retry_limit
865
+ x
866
+ 3
867
+ []=
868
+ x
869
+ 3
870
+ get
871
+ p
872
+ 5
873
+ I
874
+ 0
875
+ I
876
+ 19
877
+ I
878
+ 0
879
+ I
880
+ 1a
881
+ I
882
+ 1f
883
+ x
884
+ 82
885
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
886
+ p
887
+ 0
888
+ x
889
+ 12
890
+ assert_raise
891
+ p
892
+ 17
893
+ I
894
+ 0
895
+ I
896
+ 12
897
+ I
898
+ 0
899
+ I
900
+ 13
901
+ I
902
+ b
903
+ I
904
+ 14
905
+ I
906
+ 16
907
+ I
908
+ 15
909
+ I
910
+ 24
911
+ I
912
+ 16
913
+ I
914
+ 35
915
+ I
916
+ 17
917
+ I
918
+ 50
919
+ I
920
+ 18
921
+ I
922
+ 6b
923
+ I
924
+ 19
925
+ I
926
+ 78
927
+ x
928
+ 82
929
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
930
+ p
931
+ 2
932
+ x
933
+ 7
934
+ retries
935
+ x
936
+ 8
937
+ response
938
+ p
939
+ 7
940
+ I
941
+ 0
942
+ I
943
+ 6
944
+ I
945
+ 0
946
+ I
947
+ 7
948
+ I
949
+ b
950
+ I
951
+ 12
952
+ I
953
+ 16
954
+ x
955
+ 82
956
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
957
+ p
958
+ 0
959
+ x
960
+ 7
961
+ context
962
+ s
963
+ 19
964
+ making an HTTP POST
965
+ M
966
+ 1
967
+ p
968
+ 2
969
+ x
970
+ 9
971
+ for_block
972
+ t
973
+ n
974
+ x
975
+ 8
976
+ BaseTest
977
+ i
978
+ 22
979
+ 5
980
+ 7
981
+ 0
982
+ 64
983
+ 56
984
+ 1
985
+ 47
986
+ 50
987
+ 2
988
+ 1
989
+ 15
990
+ 5
991
+ 7
992
+ 3
993
+ 64
994
+ 56
995
+ 4
996
+ 47
997
+ 50
998
+ 2
999
+ 1
1000
+ 11
1001
+ I
1002
+ 4
1003
+ I
1004
+ 0
1005
+ I
1006
+ 0
1007
+ I
1008
+ 0
1009
+ I
1010
+ -2
1011
+ p
1012
+ 5
1013
+ s
1014
+ 28
1015
+ retry if HTTP POST times out
1016
+ M
1017
+ 1
1018
+ p
1019
+ 2
1020
+ x
1021
+ 9
1022
+ for_block
1023
+ t
1024
+ n
1025
+ x
1026
+ 8
1027
+ BaseTest
1028
+ i
1029
+ 155
1030
+ 5
1031
+ 7
1032
+ 0
1033
+ 64
1034
+ 47
1035
+ 49
1036
+ 1
1037
+ 1
1038
+ 19
1039
+ 0
1040
+ 15
1041
+ 5
1042
+ 7
1043
+ 2
1044
+ 64
1045
+ 47
1046
+ 49
1047
+ 3
1048
+ 1
1049
+ 19
1050
+ 1
1051
+ 15
1052
+ 20
1053
+ 1
1054
+ 7
1055
+ 4
1056
+ 49
1057
+ 5
1058
+ 1
1059
+ 7
1060
+ 6
1061
+ 64
1062
+ 49
1063
+ 7
1064
+ 1
1065
+ 15
1066
+ 45
1067
+ 8
1068
+ 9
1069
+ 43
1070
+ 10
1071
+ 7
1072
+ 11
1073
+ 49
1074
+ 5
1075
+ 1
1076
+ 7
1077
+ 12
1078
+ 64
1079
+ 49
1080
+ 7
1081
+ 1
1082
+ 15
1083
+ 45
1084
+ 13
1085
+ 14
1086
+ 43
1087
+ 15
1088
+ 49
1089
+ 16
1090
+ 0
1091
+ 7
1092
+ 17
1093
+ 49
1094
+ 18
1095
+ 1
1096
+ 20
1097
+ 0
1098
+ 49
1099
+ 19
1100
+ 1
1101
+ 45
1102
+ 20
1103
+ 21
1104
+ 43
1105
+ 22
1106
+ 49
1107
+ 23
1108
+ 1
1109
+ 15
1110
+ 45
1111
+ 13
1112
+ 24
1113
+ 43
1114
+ 15
1115
+ 49
1116
+ 16
1117
+ 0
1118
+ 7
1119
+ 17
1120
+ 49
1121
+ 18
1122
+ 1
1123
+ 20
1124
+ 0
1125
+ 49
1126
+ 19
1127
+ 1
1128
+ 45
1129
+ 20
1130
+ 25
1131
+ 43
1132
+ 22
1133
+ 49
1134
+ 23
1135
+ 1
1136
+ 15
1137
+ 45
1138
+ 13
1139
+ 26
1140
+ 43
1141
+ 15
1142
+ 49
1143
+ 16
1144
+ 0
1145
+ 7
1146
+ 17
1147
+ 49
1148
+ 18
1149
+ 1
1150
+ 20
1151
+ 0
1152
+ 49
1153
+ 19
1154
+ 1
1155
+ 20
1156
+ 1
1157
+ 49
1158
+ 7
1159
+ 1
1160
+ 15
1161
+ 5
1162
+ 45
1163
+ 8
1164
+ 27
1165
+ 43
1166
+ 10
1167
+ 44
1168
+ 43
1169
+ 28
1170
+ 78
1171
+ 49
1172
+ 29
1173
+ 1
1174
+ 49
1175
+ 30
1176
+ 1
1177
+ 7
1178
+ 6
1179
+ 64
1180
+ 47
1181
+ 49
1182
+ 31
1183
+ 2
1184
+ 11
1185
+ I
1186
+ 7
1187
+ I
1188
+ 2
1189
+ I
1190
+ 0
1191
+ I
1192
+ 0
1193
+ I
1194
+ -2
1195
+ p
1196
+ 32
1197
+ s
1198
+ 7
1199
+ retries
1200
+ x
1201
+ 8
1202
+ sequence
1203
+ s
1204
+ 0
1205
+
1206
+ x
1207
+ 4
1208
+ mock
1209
+ x
1210
+ 15
1211
+ parsed_response
1212
+ x
1213
+ 5
1214
+ stubs
1215
+ s
1216
+ 12
1217
+ the response
1218
+ x
1219
+ 7
1220
+ returns
1221
+ x
1222
+ 12
1223
+ MonkeyWrench
1224
+ n
1225
+ x
1226
+ 4
1227
+ Base
1228
+ x
1229
+ 8
1230
+ base_uri
1231
+ s
1232
+ 18
1233
+ http://example.com
1234
+ x
1235
+ 8
1236
+ HTTParty
1237
+ n
1238
+ x
1239
+ 7
1240
+ Request
1241
+ x
1242
+ 12
1243
+ any_instance
1244
+ x
1245
+ 7
1246
+ perform
1247
+ x
1248
+ 7
1249
+ expects
1250
+ x
1251
+ 11
1252
+ in_sequence
1253
+ x
1254
+ 7
1255
+ Timeout
1256
+ n
1257
+ x
1258
+ 5
1259
+ Error
1260
+ x
1261
+ 6
1262
+ raises
1263
+ n
1264
+ n
1265
+ n
1266
+ n
1267
+ x
1268
+ 4
1269
+ Hash
1270
+ x
1271
+ 16
1272
+ new_from_literal
1273
+ x
1274
+ 4
1275
+ post
1276
+ x
1277
+ 12
1278
+ assert_equal
1279
+ p
1280
+ 19
1281
+ I
1282
+ 0
1283
+ I
1284
+ 20
1285
+ I
1286
+ 0
1287
+ I
1288
+ 21
1289
+ I
1290
+ b
1291
+ I
1292
+ 22
1293
+ I
1294
+ 16
1295
+ I
1296
+ 23
1297
+ I
1298
+ 24
1299
+ I
1300
+ 24
1301
+ I
1302
+ 35
1303
+ I
1304
+ 25
1305
+ I
1306
+ 50
1307
+ I
1308
+ 26
1309
+ I
1310
+ 6b
1311
+ I
1312
+ 27
1313
+ I
1314
+ 83
1315
+ I
1316
+ 28
1317
+ I
1318
+ 9b
1319
+ x
1320
+ 82
1321
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
1322
+ p
1323
+ 2
1324
+ x
1325
+ 7
1326
+ retries
1327
+ x
1328
+ 8
1329
+ response
1330
+ x
1331
+ 6
1332
+ should
1333
+ s
1334
+ 46
1335
+ rethrow Timeout::Error if retry limit exceeded
1336
+ M
1337
+ 1
1338
+ p
1339
+ 2
1340
+ x
1341
+ 9
1342
+ for_block
1343
+ t
1344
+ n
1345
+ x
1346
+ 8
1347
+ BaseTest
1348
+ i
1349
+ 120
1350
+ 5
1351
+ 7
1352
+ 0
1353
+ 64
1354
+ 47
1355
+ 49
1356
+ 1
1357
+ 1
1358
+ 19
1359
+ 0
1360
+ 15
1361
+ 5
1362
+ 7
1363
+ 2
1364
+ 64
1365
+ 47
1366
+ 49
1367
+ 3
1368
+ 1
1369
+ 19
1370
+ 1
1371
+ 15
1372
+ 20
1373
+ 1
1374
+ 7
1375
+ 4
1376
+ 49
1377
+ 5
1378
+ 1
1379
+ 7
1380
+ 6
1381
+ 64
1382
+ 49
1383
+ 7
1384
+ 1
1385
+ 15
1386
+ 45
1387
+ 8
1388
+ 9
1389
+ 43
1390
+ 10
1391
+ 7
1392
+ 11
1393
+ 49
1394
+ 5
1395
+ 1
1396
+ 7
1397
+ 12
1398
+ 64
1399
+ 49
1400
+ 7
1401
+ 1
1402
+ 15
1403
+ 45
1404
+ 13
1405
+ 14
1406
+ 43
1407
+ 15
1408
+ 49
1409
+ 16
1410
+ 0
1411
+ 7
1412
+ 17
1413
+ 49
1414
+ 18
1415
+ 1
1416
+ 20
1417
+ 0
1418
+ 49
1419
+ 19
1420
+ 1
1421
+ 45
1422
+ 20
1423
+ 21
1424
+ 43
1425
+ 22
1426
+ 49
1427
+ 23
1428
+ 1
1429
+ 15
1430
+ 45
1431
+ 13
1432
+ 24
1433
+ 43
1434
+ 15
1435
+ 49
1436
+ 16
1437
+ 0
1438
+ 7
1439
+ 17
1440
+ 49
1441
+ 18
1442
+ 1
1443
+ 20
1444
+ 0
1445
+ 49
1446
+ 19
1447
+ 1
1448
+ 45
1449
+ 20
1450
+ 25
1451
+ 43
1452
+ 22
1453
+ 49
1454
+ 23
1455
+ 1
1456
+ 15
1457
+ 5
1458
+ 45
1459
+ 20
1460
+ 26
1461
+ 43
1462
+ 22
1463
+ 56
1464
+ 27
1465
+ 47
1466
+ 50
1467
+ 28
1468
+ 1
1469
+ 11
1470
+ I
1471
+ 6
1472
+ I
1473
+ 2
1474
+ I
1475
+ 0
1476
+ I
1477
+ 0
1478
+ I
1479
+ -2
1480
+ p
1481
+ 29
1482
+ s
1483
+ 7
1484
+ retries
1485
+ x
1486
+ 8
1487
+ sequence
1488
+ s
1489
+ 0
1490
+
1491
+ x
1492
+ 4
1493
+ mock
1494
+ x
1495
+ 15
1496
+ parsed_response
1497
+ x
1498
+ 5
1499
+ stubs
1500
+ s
1501
+ 12
1502
+ the response
1503
+ x
1504
+ 7
1505
+ returns
1506
+ x
1507
+ 12
1508
+ MonkeyWrench
1509
+ n
1510
+ x
1511
+ 4
1512
+ Base
1513
+ x
1514
+ 8
1515
+ base_uri
1516
+ s
1517
+ 18
1518
+ http://example.com
1519
+ x
1520
+ 8
1521
+ HTTParty
1522
+ n
1523
+ x
1524
+ 7
1525
+ Request
1526
+ x
1527
+ 12
1528
+ any_instance
1529
+ x
1530
+ 7
1531
+ perform
1532
+ x
1533
+ 7
1534
+ expects
1535
+ x
1536
+ 11
1537
+ in_sequence
1538
+ x
1539
+ 7
1540
+ Timeout
1541
+ n
1542
+ x
1543
+ 5
1544
+ Error
1545
+ x
1546
+ 6
1547
+ raises
1548
+ n
1549
+ n
1550
+ n
1551
+ M
1552
+ 1
1553
+ p
1554
+ 2
1555
+ x
1556
+ 9
1557
+ for_block
1558
+ t
1559
+ n
1560
+ x
1561
+ 8
1562
+ BaseTest
1563
+ i
1564
+ 31
1565
+ 45
1566
+ 0
1567
+ 1
1568
+ 43
1569
+ 2
1570
+ 44
1571
+ 43
1572
+ 3
1573
+ 78
1574
+ 49
1575
+ 4
1576
+ 1
1577
+ 44
1578
+ 43
1579
+ 3
1580
+ 79
1581
+ 49
1582
+ 4
1583
+ 1
1584
+ 13
1585
+ 7
1586
+ 5
1587
+ 80
1588
+ 49
1589
+ 6
1590
+ 2
1591
+ 15
1592
+ 49
1593
+ 7
1594
+ 2
1595
+ 11
1596
+ I
1597
+ 7
1598
+ I
1599
+ 0
1600
+ I
1601
+ 0
1602
+ I
1603
+ 0
1604
+ I
1605
+ -2
1606
+ p
1607
+ 8
1608
+ x
1609
+ 12
1610
+ MonkeyWrench
1611
+ n
1612
+ x
1613
+ 4
1614
+ Base
1615
+ x
1616
+ 4
1617
+ Hash
1618
+ x
1619
+ 16
1620
+ new_from_literal
1621
+ x
1622
+ 11
1623
+ retry_limit
1624
+ x
1625
+ 3
1626
+ []=
1627
+ x
1628
+ 4
1629
+ post
1630
+ p
1631
+ 5
1632
+ I
1633
+ 0
1634
+ I
1635
+ 32
1636
+ I
1637
+ 0
1638
+ I
1639
+ 33
1640
+ I
1641
+ 1f
1642
+ x
1643
+ 82
1644
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
1645
+ p
1646
+ 0
1647
+ x
1648
+ 12
1649
+ assert_raise
1650
+ p
1651
+ 17
1652
+ I
1653
+ 0
1654
+ I
1655
+ 2b
1656
+ I
1657
+ 0
1658
+ I
1659
+ 2c
1660
+ I
1661
+ b
1662
+ I
1663
+ 2d
1664
+ I
1665
+ 16
1666
+ I
1667
+ 2e
1668
+ I
1669
+ 24
1670
+ I
1671
+ 2f
1672
+ I
1673
+ 35
1674
+ I
1675
+ 30
1676
+ I
1677
+ 50
1678
+ I
1679
+ 31
1680
+ I
1681
+ 6b
1682
+ I
1683
+ 32
1684
+ I
1685
+ 78
1686
+ x
1687
+ 82
1688
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
1689
+ p
1690
+ 2
1691
+ x
1692
+ 7
1693
+ retries
1694
+ x
1695
+ 8
1696
+ response
1697
+ p
1698
+ 7
1699
+ I
1700
+ 0
1701
+ I
1702
+ 1f
1703
+ I
1704
+ 0
1705
+ I
1706
+ 20
1707
+ I
1708
+ b
1709
+ I
1710
+ 2b
1711
+ I
1712
+ 16
1713
+ x
1714
+ 82
1715
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
1716
+ p
1717
+ 0
1718
+ p
1719
+ 5
1720
+ I
1721
+ 2
1722
+ I
1723
+ 6
1724
+ I
1725
+ d
1726
+ I
1727
+ 1f
1728
+ I
1729
+ 18
1730
+ x
1731
+ 82
1732
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
1733
+ p
1734
+ 0
1735
+ x
1736
+ 13
1737
+ attach_method
1738
+ p
1739
+ 7
1740
+ I
1741
+ 0
1742
+ I
1743
+ 1
1744
+ I
1745
+ 1f
1746
+ I
1747
+ 2
1748
+ I
1749
+ 28
1750
+ I
1751
+ 4
1752
+ I
1753
+ 4d
1754
+ x
1755
+ 82
1756
+ /Volumes/Personal/Documents/glenn-dev/monkeywrench/test/monkey_wrench/base_test.rb
1757
+ p
1758
+ 0