rest-client 2.0.2 → 2.1.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.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.mailmap +10 -0
  4. data/.rubocop +2 -0
  5. data/.rubocop-disables.yml +46 -44
  6. data/.rubocop.yml +5 -0
  7. data/.travis.yml +31 -17
  8. data/AUTHORS +8 -0
  9. data/README.md +126 -9
  10. data/Rakefile +12 -4
  11. data/history.md +53 -0
  12. data/lib/restclient.rb +0 -1
  13. data/lib/restclient/abstract_response.rb +28 -2
  14. data/lib/restclient/exceptions.rb +3 -3
  15. data/lib/restclient/payload.rb +29 -4
  16. data/lib/restclient/raw_response.rb +17 -6
  17. data/lib/restclient/request.rb +94 -67
  18. data/lib/restclient/resource.rb +16 -6
  19. data/lib/restclient/response.rb +14 -4
  20. data/lib/restclient/utils.rb +47 -8
  21. data/lib/restclient/version.rb +2 -2
  22. data/rest-client.gemspec +3 -2
  23. data/spec/ISS.jpg +0 -0
  24. data/spec/helpers.rb +37 -5
  25. data/spec/integration/capath_digicert/3513523f.0 +22 -0
  26. data/spec/integration/capath_digicert/399e7759.0 +22 -0
  27. data/spec/integration/capath_digicert/digicert.crt +20 -17
  28. data/spec/integration/certs/digicert.crt +20 -17
  29. data/spec/integration/httpbin_spec.rb +41 -0
  30. data/spec/integration/integration_spec.rb +0 -7
  31. data/spec/unit/abstract_response_spec.rb +7 -7
  32. data/spec/unit/payload_spec.rb +51 -19
  33. data/spec/unit/raw_response_spec.rb +6 -2
  34. data/spec/unit/request2_spec.rb +8 -8
  35. data/spec/unit/request_spec.rb +53 -65
  36. data/spec/unit/resource_spec.rb +7 -7
  37. data/spec/unit/response_spec.rb +33 -22
  38. data/spec/unit/restclient_spec.rb +3 -2
  39. data/spec/unit/utils_spec.rb +10 -10
  40. metadata +34 -13
  41. data/spec/integration/capath_digicert/244b5494.0 +0 -19
  42. data/spec/integration/capath_digicert/81b9768f.0 +0 -19
  43. data/spec/unit/master_shake.jpg +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 10312217af6f5a0312bdce748c8fd82f428fce64
4
- data.tar.gz: 67846732a7926b335a7082eb1fba0b7178f0c5c4
2
+ SHA256:
3
+ metadata.gz: e61fb064d966989b00da05fc3e16e3c389cebb68de302d1436e9e2be10dbef8c
4
+ data.tar.gz: fa5deab3c8c4a44e2d5478e212dd24221d37812f818d4e8cb63e65ebafd8e85c
5
5
  SHA512:
6
- metadata.gz: 56d9d3140ee5418e9b4e877e9756bbb1a1858314c4487b5d7e41ca5fc72f70532f764dcf480c8c3098f4297025fa66c7d8db0bd890e9ae46459e7478a34a685a
7
- data.tar.gz: 812f11c8a6c2c4ac5ec68852e75f64ae2d7416ae4683f5ff6525055dbf8e472baed3cc01a85eb76e5da2cb39233ff2dc2129cbdab7165dec89637987b346359b
6
+ metadata.gz: ca5026c1f26f1c465c0e2ed869c1a6f6f0dc3b229843d972f9c0267d2f25e98565a672a91b899796d5494391bac73b35d3f36782f0b4afdade1b4d525e09307a
7
+ data.tar.gz: 8ce3970ab67e95e68cfce154ed6865285f04f0e493c694a7014dee54901a9d64759299bf43c542ce23baf05e15676c9daebd5fa4c53703891cdf179a6a0cf769
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg
7
7
  /rdoc
8
8
  /.yardoc
9
+ /tmp
@@ -0,0 +1,10 @@
1
+ Blake Mizerany <blake.mizerany@gmail.com>
2
+ Lawrence Leonard Gilbert <larry@l2g.to>
3
+ <larry@l2g.to> <larry@L2G.to>
4
+ Marc-André Cournoyer <macournoyer@gmail.com>
5
+ Matthew Manning <matt.manning@gmail.com>
6
+ Nicholas Wieland <nicholas.wieland@gmail.com>
7
+ Rafael Ssouza <rafael.ssouza@gmail.com>
8
+ Richard Schneeman <richard.schneeman@gmail.com>
9
+ Rick Olson <technoweenie@gmail.com>
10
+ T. Watanabe <wtnabe@wt-srv.watanabe>
@@ -0,0 +1,2 @@
1
+ --display-cop-names
2
+ --fail-level=W
@@ -17,7 +17,7 @@ Lint/StringConversionInInterpolation:
17
17
  Lint/UnusedBlockArgument:
18
18
  Enabled: false
19
19
 
20
- Lint/Eval:
20
+ Security/Eval:
21
21
  Exclude:
22
22
  - rest-client.windows.gemspec
23
23
 
@@ -53,8 +53,9 @@ Style/BracesAroundHashParameters:
53
53
  Enabled: false
54
54
 
55
55
  # Offense count: 1
56
- Style/ClassAndModuleCamelCase:
57
- Enabled: false
56
+ Naming/ClassAndModuleCamelCase:
57
+ Exclude:
58
+ - lib/restclient/windows/root_certs.rb
58
59
 
59
60
  # Offense count: 2
60
61
  # Configuration parameters: EnforcedStyle, SupportedStyles.
@@ -102,7 +103,7 @@ Style/ConditionalAssignment:
102
103
  EnforcedStyle: assign_inside_condition
103
104
 
104
105
  # Offense count: 2
105
- Style/ConstantName:
106
+ Naming/ConstantName:
106
107
  Enabled: false
107
108
 
108
109
  # TODO: eh?
@@ -110,10 +111,8 @@ Style/ConstantName:
110
111
  Metrics/CyclomaticComplexity:
111
112
  Max: 22
112
113
 
113
- # Offense count: 1
114
- # Cop supports --auto-correct.
115
- Style/DeprecatedHashMethods:
116
- Enabled: false
114
+ Style/PreferredHashMethods:
115
+ EnforcedStyle: verbose
117
116
 
118
117
  # TODO: docs
119
118
  # Offense count: 17
@@ -122,7 +121,7 @@ Style/Documentation:
122
121
 
123
122
  # Offense count: 9
124
123
  # Configuration parameters: EnforcedStyle, SupportedStyles.
125
- Style/DotPosition:
124
+ Layout/DotPosition:
126
125
  Enabled: false
127
126
 
128
127
  # Offense count: 1
@@ -136,24 +135,27 @@ Style/EachWithObject:
136
135
 
137
136
  # Offense count: 5
138
137
  # Cop supports --auto-correct.
139
- Style/EmptyLines:
138
+ Layout/EmptyLines:
140
139
  Enabled: false
141
140
 
142
141
  # Offense count: 11
143
142
  # Cop supports --auto-correct.
144
143
  # Configuration parameters: EnforcedStyle, SupportedStyles.
145
- Style/EmptyLinesAroundClassBody:
144
+ Layout/EmptyLinesAroundClassBody:
146
145
  Enabled: false
147
146
 
148
147
  # Offense count: 1
149
148
  # Cop supports --auto-correct.
150
- Style/EmptyLinesAroundMethodBody:
149
+ Layout/EmptyLinesAroundMethodBody:
151
150
  Enabled: false
152
151
 
153
152
  # Offense count: 9
154
153
  # Cop supports --auto-correct.
155
154
  # Configuration parameters: EnforcedStyle, SupportedStyles.
156
- Style/EmptyLinesAroundModuleBody:
155
+ Layout/EmptyLinesAroundModuleBody:
156
+ Enabled: false
157
+
158
+ Layout/EmptyLinesAroundExceptionHandlingKeywords:
157
159
  Enabled: false
158
160
 
159
161
  # Offense count: 31
@@ -161,11 +163,9 @@ Style/EmptyLinesAroundModuleBody:
161
163
  Style/Encoding:
162
164
  Enabled: false
163
165
 
164
- # TODO: exclude
165
- # Offense count: 1
166
- # Configuration parameters: Exclude.
167
- Style/FileName:
168
- Enabled: false
166
+ Naming/FileName:
167
+ Exclude:
168
+ - lib/rest-client.rb
169
169
 
170
170
  # Offense count: 3
171
171
  # Configuration parameters: EnforcedStyle, SupportedStyles.
@@ -184,12 +184,9 @@ Style/HashSyntax:
184
184
  Style/IfUnlessModifier:
185
185
  Enabled: false
186
186
 
187
- # TODO: configure
188
- # Offense count: 6
189
- # Cop supports --auto-correct.
190
- # Configuration parameters: EnforcedStyle, SupportedStyles.
191
- Style/IndentHash:
192
- Enabled: false
187
+ Layout/IndentFirstHashElement:
188
+ Exclude:
189
+ - 'spec/**/*.rb'
193
190
 
194
191
  # NOTABUG
195
192
  # Offense count: 19
@@ -199,14 +196,13 @@ Style/Lambda:
199
196
  # TODO
200
197
  # Offense count: 14
201
198
  # Cop supports --auto-correct.
202
- Style/LeadingCommentSpace:
199
+ Layout/LeadingCommentSpace:
203
200
  Enabled: false
204
201
 
205
- # TODO
206
- # Offense count: 218
207
- # Configuration parameters: AllowURI.
208
202
  Metrics/LineLength:
209
- Max: 340
203
+ Exclude:
204
+ - 'spec/**/*.rb'
205
+ - 'Rakefile'
210
206
 
211
207
  # TODO
212
208
  # Offense count: 28
@@ -262,7 +258,7 @@ Style/PercentLiteralDelimiters:
262
258
 
263
259
  # Offense count: 3
264
260
  # Configuration parameters: NamePrefixBlacklist.
265
- Style/PredicateName:
261
+ Naming/PredicateName:
266
262
  Enabled: false
267
263
 
268
264
  # TODO: configure
@@ -298,47 +294,45 @@ Style/SignalException:
298
294
  # TODO
299
295
  # Offense count: 2
300
296
  # Cop supports --auto-correct.
301
- Style/SpaceAfterNot:
297
+ Layout/SpaceAfterNot:
302
298
  Enabled: false
303
299
 
304
300
  # Offense count: 19
305
301
  # Cop supports --auto-correct.
306
302
  # Configuration parameters: EnforcedStyle, SupportedStyles.
307
- Style/SpaceAroundEqualsInParameterDefault:
303
+ Layout/SpaceAroundEqualsInParameterDefault:
308
304
  Enabled: false
309
305
 
310
306
  # Offense count: 20
311
307
  # Cop supports --auto-correct.
312
- Style/SpaceAroundOperators:
308
+ Layout/SpaceAroundOperators:
313
309
  Enabled: false
314
310
 
315
311
  # Offense count: 9
316
312
  # Cop supports --auto-correct.
317
313
  # Configuration parameters: EnforcedStyle, SupportedStyles.
318
- Style/SpaceBeforeBlockBraces:
314
+ Layout/SpaceBeforeBlockBraces:
319
315
  Enabled: false
320
316
 
321
- # Offense count: 37
322
- # Cop supports --auto-correct.
323
- # Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
324
- Style/SpaceInsideBlockBraces:
317
+ Layout/EmptyLinesAroundBlockBody:
325
318
  Enabled: false
326
319
 
327
- # Offense count: 6
320
+ # Offense count: 37
328
321
  # Cop supports --auto-correct.
329
- Style/SpaceInsideBrackets:
322
+ # Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
323
+ Layout/SpaceInsideBlockBraces:
330
324
  Enabled: false
331
325
 
332
326
  # Offense count: 181
333
327
  # Cop supports --auto-correct.
334
328
  # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
335
- Style/SpaceInsideHashLiteralBraces:
329
+ Layout/SpaceInsideHashLiteralBraces:
336
330
  Enabled: false
337
331
 
338
332
  # TODO
339
333
  # Offense count: 9
340
334
  # Cop supports --auto-correct.
341
- Style/SpaceInsideParens:
335
+ Layout/SpaceInsideParens:
342
336
  Enabled: false
343
337
 
344
338
  # Offense count: 414
@@ -347,8 +341,10 @@ Style/SpaceInsideParens:
347
341
  Style/StringLiterals:
348
342
  Enabled: false
349
343
 
350
- Style/TrailingCommaInLiteral:
351
- EnforcedStyleForMultiline: comma
344
+ Style/TrailingCommaInArrayLiteral:
345
+ EnforcedStyleForMultiline: consistent_comma
346
+ Style/TrailingCommaInHashLiteral:
347
+ EnforcedStyleForMultiline: consistent_comma
352
348
  Style/TrailingCommaInArguments:
353
349
  Enabled: false
354
350
 
@@ -382,3 +378,9 @@ Style/WordArray:
382
378
  # Configuration parameters: EnforcedStyle, SupportedStyles.
383
379
  Style/BarePercentLiterals:
384
380
  Enabled: false
381
+
382
+
383
+ Style/RescueStandardError:
384
+ Exclude:
385
+ - 'bin/restclient'
386
+ - 'lib/restclient/windows/root_certs.rb'
@@ -1,3 +1,8 @@
1
1
  ---
2
2
  inherit_from:
3
3
  - .rubocop-disables.yml
4
+
5
+ AllCops:
6
+ Exclude:
7
+ - 'tmp/*.rb'
8
+ - 'vendor/**/*'
@@ -1,48 +1,62 @@
1
1
  # Available ruby versions: http://rubies.travis-ci.org/
2
2
 
3
3
  language: ruby
4
+ sudo: false
4
5
 
5
6
  os:
6
7
  - linux
7
- - osx
8
+ # - osx
8
9
 
9
10
  rvm:
10
- - "2.0.0"
11
11
  - "2.1" # latest 2.1.x
12
- - "2.2.5"
13
- - "2.3.3"
14
- - "2.4.0"
12
+ - "2.2.10"
13
+ - "2.3.8"
14
+ - "2.4.6"
15
+ - "2.5.5"
16
+ - "2.6.3"
15
17
  - "ruby-head"
16
- - "jruby-9.0.5.0"
17
- - "jruby-9.1.5.0"
18
+ - "jruby-9.1.9.0"
18
19
  - "jruby-head"
19
20
 
20
21
  cache: bundler
21
22
 
22
23
  script:
23
- bundle exec rake test
24
+ - bundle exec rake test
25
+ - bundle exec rake rubocop
24
26
 
25
27
  branches:
26
28
  except:
27
29
  - "readme-edits"
28
30
 
29
31
  before_install:
30
- - gem update --system
32
+ # Install rubygems < 3.0 so that we can support ruby < 2.3
33
+ # https://github.com/rubygems/rubygems/issues/2534
34
+ - gem install rubygems-update -v '<3' && update_rubygems
31
35
  # bundler installation needed for jruby-head
32
36
  # https://github.com/travis-ci/travis-ci/issues/5861
33
- - gem install bundler
34
-
35
- # Travis OS X support is pretty janky. These are some hacks to include tests
36
- # only on versions that actually work.
37
- # (last tested: 2016-11)
37
+ # stick to bundler 1.x in order to support ruby < 2.3
38
+ - gem install bundler -v '~> 1.17'
39
+
40
+ # Travis macOS support is pretty janky. These are some hacks to include tests
41
+ # only on versions that actually work. We test on macOS because Apple monkey
42
+ # patches OpenSSL to have different behavior, and we want to ensure that SSL
43
+ # verification at least is broken in the expected ways on macOS.
44
+ # (last tested: 2019-08)
38
45
  matrix:
39
46
  # exclude: {}
40
- # include: {}
47
+ include:
48
+ # test only a few versions on mac
49
+ - os: osx
50
+ rvm: 2.6.3
51
+ - os: osx
52
+ rvm: ruby-head
53
+ - os: osx
54
+ rvm: jruby-9.1.9.0
55
+ - os: osx
56
+ rvm: jruby-head
41
57
 
42
58
  allow_failures:
43
59
  - rvm: 'ruby-head'
44
60
 
45
61
  # return results as soon as mandatory versions are done
46
62
  fast_finish: true
47
-
48
- sudo: false
data/AUTHORS CHANGED
@@ -7,6 +7,7 @@ Adrian Rangel
7
7
  Alex Tomlins
8
8
  Aman Gupta
9
9
  Andy Brody
10
+ Avi Deitcher
10
11
  Blake Mizerany
11
12
  Brad Ediger
12
13
  Braintree
@@ -38,10 +39,12 @@ Harm Aarts
38
39
  Hiro Asari
39
40
  Hugh McGowan
40
41
  Ian Warshak
42
+ Igor Zubkov
41
43
  Ivan Makfinsky
42
44
  JH. Chabran
43
45
  James Edward Gray II
44
46
  Jari Bakken
47
+ Jeff Pereira
45
48
  Jeff Remer
46
49
  Jeffrey Hardy
47
50
  Jeremy Kemper
@@ -59,12 +62,14 @@ Keith Rarick
59
62
  Kenichi Kamiya
60
63
  Kevin Read
61
64
  Kosuke Asami
65
+ Kyle Meyer
62
66
  Kyle VanderBeek
63
67
  Lars Gierth
64
68
  Lawrence Leonard Gilbert
65
69
  Lee Jarvis
66
70
  Lennon Day-Reynolds
67
71
  Lin Jen-Shin
72
+ Magne Matre Gåsland
68
73
  Marc-André Cournoyer
69
74
  Marius Butuc
70
75
  Matthew Manning
@@ -77,6 +82,7 @@ Nicholas Wieland
77
82
  Nick Hammond
78
83
  Nick Plante
79
84
  Niko Dittmann
85
+ Nikolay Shebanov
80
86
  Oscar Del Ben
81
87
  Pablo Astigarraga
82
88
  Paul Dlug
@@ -85,9 +91,11 @@ Pedro Chambino
85
91
  Philip Corliss
86
92
  Pierre-Louis Gottfrois
87
93
  Rafael Ssouza
94
+ Richard Schneeman
88
95
  Rick Olson
89
96
  Robert Eanes
90
97
  Rodrigo Panachi
98
+ Sam Norbury
91
99
  Samuel Cochran
92
100
  Syl Turner
93
101
  T. Watanabe
data/README.md CHANGED
@@ -39,6 +39,7 @@ The rest-client gem depends on these other gems for usage at runtime:
39
39
 
40
40
  * [mime-types](http://rubygems.org/gems/mime-types)
41
41
  * [netrc](http://rubygems.org/gems/netrc)
42
+ * [http-accept](https://rubygems.org/gems/http-accept)
42
43
  * [http-cookie](https://rubygems.org/gems/http-cookie)
43
44
 
44
45
  There are also several development dependencies. It's recommended to use
@@ -359,7 +360,7 @@ RestClient.get('http://example.com/resource') { |response, request, result, &blo
359
360
  when 423
360
361
  raise SomeCustomExceptionIfYouWant
361
362
  else
362
- response.return!(request, result, &block)
363
+ response.return!(&block)
363
364
  end
364
365
  }
365
366
  ```
@@ -446,6 +447,106 @@ You can:
446
447
 
447
448
  See `RestClient::Request`'s documentation for more information.
448
449
 
450
+ ### Streaming request payload
451
+
452
+ RestClient will try to stream any file-like payload rather than reading it into
453
+ memory. This happens through `RestClient::Payload::Streamed`, which is
454
+ automatically called internally by `RestClient::Payload.generate` on anything
455
+ with a `read` method.
456
+
457
+ ```ruby
458
+ >> r = RestClient.put('http://httpbin.org/put', File.open('/tmp/foo.txt', 'r'),
459
+ content_type: 'text/plain')
460
+ => <RestClient::Response 200 "{\n \"args\":...">
461
+ ```
462
+
463
+ In Multipart requests, RestClient will also stream file handles passed as Hash
464
+ (or __new in 2.1__ ParamsArray).
465
+
466
+ ```ruby
467
+ >> r = RestClient.put('http://httpbin.org/put',
468
+ {file_a: File.open('a.txt', 'r'),
469
+ file_b: File.open('b.txt', 'r')})
470
+ => <RestClient::Response 200 "{\n \"args\":...">
471
+
472
+ # received by server as two file uploads with multipart/form-data
473
+ >> JSON.parse(r)['files'].keys
474
+ => ['file_a', 'file_b']
475
+ ```
476
+
477
+ ### Streaming responses
478
+
479
+ Normally, when you use `RestClient.get` or the lower level
480
+ `RestClient::Request.execute method: :get` to retrieve data, the entire
481
+ response is buffered in memory and returned as the response to the call.
482
+
483
+ However, if you are retrieving a large amount of data, for example a Docker
484
+ image, an iso, or any other large file, you may want to stream the response
485
+ directly to disk rather than loading it in memory. If you have a very large
486
+ file, it may become *impossible* to load it into memory.
487
+
488
+ There are two main ways to do this:
489
+
490
+ #### `raw_response`, saves into Tempfile
491
+
492
+ If you pass `raw_response: true` to `RestClient::Request.execute`, it will save
493
+ the response body to a temporary file (using `Tempfile`) and return a
494
+ `RestClient::RawResponse` object rather than a `RestClient::Response`.
495
+
496
+ Note that the tempfile created by `Tempfile.new` will be in `Dir.tmpdir`
497
+ (usually `/tmp/`), which you can override to store temporary files in a
498
+ different location. This file will be unlinked when it is dereferenced.
499
+
500
+ If logging is enabled, this will also print download progress.
501
+ __New in 2.1:__ Customize the interval with `:stream_log_percent` (defaults to
502
+ 10 for printing a message every 10% complete).
503
+
504
+ For example:
505
+
506
+ ```ruby
507
+ >> raw = RestClient::Request.execute(
508
+ method: :get,
509
+ url: 'http://releases.ubuntu.com/16.04.2/ubuntu-16.04.2-desktop-amd64.iso',
510
+ raw_response: true)
511
+ => <RestClient::RawResponse @code=200, @file=#<Tempfile:/tmp/rest-client.20170522-5346-1pptjm1>, @request=<RestClient::Request @method="get", @url="http://releases.ubuntu.com/16.04.2/ubuntu-16.04.2-desktop-amd64.iso">>
512
+ >> raw.file.size
513
+ => 1554186240
514
+ >> raw.file.path
515
+ => "/tmp/rest-client.20170522-5346-1pptjm1"
516
+ raw.file.path
517
+ => "/tmp/rest-client.20170522-5346-1pptjm1"
518
+
519
+ >> require 'digest/sha1'
520
+ >> Digest::SHA1.file(raw.file.path).hexdigest
521
+ => "4375b73e3a1aa305a36320ffd7484682922262b3"
522
+ ```
523
+
524
+ #### `block_response`, receives raw Net::HTTPResponse
525
+
526
+ If you want to stream the data from the response to a file as it comes, rather
527
+ than entirely in memory, you can also pass `RestClient::Request.execute` a
528
+ parameter `:block_response` to which you pass a block/proc. This block receives
529
+ the raw unmodified Net::HTTPResponse object from Net::HTTP, which you can use
530
+ to stream directly to a file as each chunk is received.
531
+
532
+ Note that this bypasses all the usual HTTP status code handling, so you will
533
+ want to do you own checking for HTTP 20x response codes, redirects, etc.
534
+
535
+ The following is an example:
536
+
537
+ ````ruby
538
+ File.open('/some/output/file', 'w') {|f|
539
+ block = proc { |response|
540
+ response.read_body do |chunk|
541
+ f.write chunk
542
+ end
543
+ }
544
+ RestClient::Request.execute(method: :get,
545
+ url: 'http://example.com/some/really/big/file.img',
546
+ block_response: block)
547
+ }
548
+ ````
549
+
449
550
  ## Shell
450
551
 
451
552
  The restclient shell command gives an IRB session with RestClient already loaded:
@@ -498,15 +599,32 @@ $ restclient put http://example.com/resource < input_body
498
599
 
499
600
  ## Logging
500
601
 
501
- To enable logging you can:
602
+ To enable logging globally you can:
502
603
 
503
- - set RestClient.log with a Ruby Logger, or
504
- - set an environment variable to avoid modifying the code (in this case you can use a file name, "stdout" or "stderr"):
604
+ - set RestClient.log with a Ruby Logger
605
+
606
+ ```ruby
607
+ RestClient.log = STDOUT
608
+ ```
609
+
610
+ - or set an environment variable to avoid modifying the code (in this case you can use a file name, "stdout" or "stderr"):
505
611
 
506
612
  ```ruby
507
613
  $ RESTCLIENT_LOG=stdout path/to/my/program
508
614
  ```
509
- Either produces logs like this:
615
+
616
+ You can also set individual loggers when instantiating a Resource or making an
617
+ individual request:
618
+
619
+ ```ruby
620
+ resource = RestClient::Resource.new 'http://example.com/resource', log: Logger.new(STDOUT)
621
+ ```
622
+
623
+ ```ruby
624
+ RestClient::Request.execute(method: :get, url: 'http://example.com/foo', log: Logger.new(STDERR))
625
+ ```
626
+
627
+ All options produce logs like this:
510
628
 
511
629
  ```ruby
512
630
  RestClient.get "http://some/resource"
@@ -774,11 +892,10 @@ See AUTHORS for the full list.
774
892
 
775
893
  ## Legal
776
894
 
777
- Released under the MIT License: http://www.opensource.org/licenses/mit-license.php
895
+ Released under the MIT License: https://opensource.org/licenses/MIT
778
896
 
779
- "Master Shake" photo (http://www.flickr.com/photos/solgrundy/924205581/) by
780
- "SolGrundy"; used under terms of the Creative Commons Attribution-ShareAlike 2.0
781
- Generic license (http://creativecommons.org/licenses/by-sa/2.0/)
897
+ Photo of the International Space Station was produced by NASA and is in the
898
+ public domain.
782
899
 
783
900
  Code for reading Windows root certificate store derived from work by Puppet;
784
901
  used under terms of the Apache License, Version 2.0.