flexirest 1.10.11 → 1.10.12

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 60510339b01a0ade8d9cd94686ecec5f431bcb58570c66b48fdc76075faf4d4f
4
- data.tar.gz: 203e88d288ba8fa7f46f757a9aa24177908df116a272b754dc9bd685b19302db
3
+ metadata.gz: 40ffddde69dc7fb5e5e16c7de3e881f4c913d573170c8ddefcdc799da6a2139e
4
+ data.tar.gz: 370540fa78e3d99f8a9ac798104e21a1f8d0f5bb8ff54e99d398b682f0a58be9
5
5
  SHA512:
6
- metadata.gz: f2d51bcbce5d390baa8140cc222cbe69bfb873cb6db399a3e955358b36b39aea6241df15abd8458b79e03d87e3e4643551d2d809dabd0a4ae92c9131e9277da1
7
- data.tar.gz: 73445e4f9be17c311354112a41e7a9290695da228d853e1a67ea063d8aae8a1370f7bf4991fa43bd70a264b608c94416ad005929aa055863686ca919c6fe19ce
6
+ metadata.gz: 253e46a23429c4f0ec77fe9bb223ec80ab758bf352232559e68ae63f1462710af268bee3d9662c5cf104b5f262ff3bea112f03991be8f08ec76777f5c45c021a
7
+ data.tar.gz: 65a2576d868804a56147227cddb604d3ade6c91960bcd5f59778e3aaad3489682bbc725942a4c1f6f93148333b9929d27238280eb9c8f76b1c9f98b770ea3bdd
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.10.12
4
+
5
+ Enhancement:
6
+
7
+ - Added a quiet! mode to silence logging (thanks to Mujtaba Saboor for the issue and PR)
8
+
3
9
  ## 1.10.11
4
10
 
5
11
  Bugfix:
data/README.md CHANGED
@@ -100,7 +100,7 @@ I've written a TON of documentation on how to use Flexirest and a LITTLE bit on
100
100
  - [HTTP/parse error handling](docs/httpparse-error-handling.md)
101
101
  - [Validation](docs/validation.md)
102
102
  - [Filtering result lists](docs/filtering-result-lists.md)
103
- - [Debugging](docs/debugging.md)
103
+ - [Logging](docs/logging.md)
104
104
  - [XML responses](docs/xml-responses.md)
105
105
 
106
106
 
@@ -1,14 +1,18 @@
1
- # *Flexirest:* Debugging
1
+ # *Flexirest:* Logging
2
2
 
3
- You can turn on verbose debugging to see what is sent to the API server and what is returned in one of these two ways:
3
+ ## Verbose
4
+
5
+ You can turn on verbose logging to see what is sent to the API server and what is returned in one of these two ways:
4
6
 
5
7
  ```ruby
6
8
  class Article < Flexirest::Base
7
- verbose true
9
+ verbose!
8
10
  end
9
11
 
12
+ # or if you prefer
13
+
10
14
  class Person < Flexirest::Base
11
- verbose!
15
+ verbose true
12
16
  end
13
17
  ```
14
18
 
@@ -26,6 +30,21 @@ class Article < Flexirest::Base
26
30
  end
27
31
  ```
28
32
 
33
+ ## Quiet
34
+
35
+ By the same token, if you want to silence all log output from Flexirest, you can use quiet:
36
+
37
+ ```ruby
38
+ class Article < Flexirest::Base
39
+ quiet!
40
+ end
41
+
42
+ # or if you prefer
43
+
44
+ class Person < Flexirest::Base
45
+ quiet true
46
+ end
47
+ ```
29
48
 
30
49
  -----
31
50
 
@@ -48,10 +48,10 @@ module Flexirest
48
48
  @@cache_store = nil
49
49
  end
50
50
 
51
- def read_cached_response(request)
51
+ def read_cached_response(request, quiet)
52
52
  if cache_store && perform_caching && request.method[:method] == :get
53
53
  key = "#{request.class_name}:#{request.original_url}"
54
- Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{key} - Trying to read from cache"
54
+ Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{key} - Trying to read from cache" unless quiet
55
55
  value = cache_store.read(key)
56
56
  value = Marshal.load(value) rescue value
57
57
  end
@@ -299,6 +299,20 @@ module Flexirest
299
299
  value ? @verbose = value : @verbose
300
300
  end
301
301
 
302
+ def quiet!(options = {})
303
+ @quiet = true
304
+ @verbose = false
305
+ end
306
+
307
+ def quiet(value = nil)
308
+ @quiet ||= false
309
+ if value == true || value == false
310
+ @quiet = value
311
+ @verbose = false if @quiet != false
312
+ end
313
+ @quiet
314
+ end
315
+
302
316
  def translator(value = nil)
303
317
  Flexirest::Logger.warn("DEPRECATION: The translator functionality of Flexirest has been replaced with proxy functionality, see https://github.com/andyjeffries/flexirest#proxying-apis for more information") unless value.nil?
304
318
  @translator ||= nil
@@ -4,7 +4,7 @@ module Flexirest
4
4
  self.class.time_spent += event.duration
5
5
  self.class.calls_made += 1
6
6
  name = '%s (%.1fms)' % [Flexirest.name, event.duration]
7
- Flexirest::Logger.debug " \033[1;4;32m#{name}\033[0m #{event.payload[:name]}"
7
+ Flexirest::Logger.debug " \033[1;4;32m#{name}\033[0m #{event.payload[:name]}" unless event.payload[:quiet]
8
8
  end
9
9
 
10
10
  def self.time_spent=(value)
@@ -184,6 +184,14 @@ module Flexirest
184
184
  end
185
185
  end
186
186
 
187
+ def quiet?
188
+ if object_is_class?
189
+ @object.quiet
190
+ else
191
+ @object.class.quiet
192
+ end
193
+ end
194
+
187
195
  def translator
188
196
  if object_is_class?
189
197
  @object.translator
@@ -226,7 +234,7 @@ module Flexirest
226
234
  @instrumentation_name = "#{class_name}##{@method[:name]}"
227
235
  result = nil
228
236
  cached = nil
229
- ActiveSupport::Notifications.instrument("request_call.flexirest", :name => @instrumentation_name) do
237
+ ActiveSupport::Notifications.instrument("request_call.flexirest", :name => @instrumentation_name, quiet: quiet?) do
230
238
  @explicit_parameters = explicit_parameters
231
239
  @body = nil
232
240
  prepare_params
@@ -244,7 +252,7 @@ module Flexirest
244
252
  elsif @object.class.new.respond_to?(fake)
245
253
  fake = @object.class.new.send(fake)
246
254
  end
247
- Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Faked response found"
255
+ Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Faked response found" unless quiet?
248
256
  content_type = @method[:options][:fake_content_type] || "application/json"
249
257
  return handle_response(OpenStruct.new(status:200, body:fake, response_headers:{"X-ARC-Faked-Response" => "true", "Content-Type" => content_type}))
250
258
  end
@@ -260,13 +268,13 @@ module Flexirest
260
268
  append_get_parameters
261
269
  prepare_request_body
262
270
  self.original_url = self.url
263
- cached = original_object_class.read_cached_response(self)
271
+ cached = original_object_class.read_cached_response(self, quiet?)
264
272
  if cached && !cached.is_a?(String)
265
273
  if cached.expires && cached.expires > Time.now
266
- Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Absolutely cached copy found"
274
+ Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Absolutely cached copy found" unless quiet?
267
275
  return handle_cached_response(cached)
268
276
  elsif cached.etag.to_s != "" #present? isn't working for some reason
269
- Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Etag cached copy found with etag #{cached.etag}"
277
+ Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Etag cached copy found with etag #{cached.etag}" unless quiet?
270
278
  etag = cached.etag
271
279
  end
272
280
  end
@@ -564,9 +572,9 @@ module Flexirest
564
572
  connection = Flexirest::ConnectionManager.get_connection(base_url)
565
573
  end
566
574
  if @method[:options][:direct]
567
- Flexirest::Logger.info " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Requesting #{@url}"
575
+ Flexirest::Logger.info " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Requesting #{@url}" unless quiet?
568
576
  else
569
- Flexirest::Logger.info " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Requesting #{connection.base_url}#{@url}"
577
+ Flexirest::Logger.info " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Requesting #{connection.base_url}#{@url}" unless quiet?
570
578
  end
571
579
 
572
580
  if verbose?
@@ -634,7 +642,7 @@ module Flexirest
634
642
 
635
643
  if cached && response.status == 304
636
644
  Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name}" +
637
- ' - Etag copy is the same as the server'
645
+ ' - Etag copy is the same as the server' unless quiet?
638
646
  return handle_cached_response(cached)
639
647
  end
640
648
 
@@ -647,9 +655,9 @@ module Flexirest
647
655
  return @response = Flexirest::PlainResponse.from_response(@response)
648
656
  elsif is_json_response? || is_xml_response?
649
657
  if @response.respond_to?(:proxied) && @response.proxied
650
- Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Response was proxied, unable to determine size"
658
+ Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Response was proxied, unable to determine size" unless quiet?
651
659
  else
652
- Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Response received #{@response.body.size} bytes"
660
+ Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Response received #{@response.body.size} bytes" unless quiet?
653
661
  end
654
662
  result = generate_new_object(ignore_root: ignore_root, ignore_xml_root: @method[:options][:ignore_xml_root])
655
663
  # TODO: Cleanup when ignore_xml_root is removed
@@ -1,3 +1,3 @@
1
1
  module Flexirest
2
- VERSION = "1.10.11"
2
+ VERSION = "1.10.12"
3
3
  end
@@ -229,6 +229,26 @@ describe Flexirest::Configuration do
229
229
  expect(VerboseConfigurationExample3.verbose).to be_truthy
230
230
  end
231
231
 
232
+ it "should default to non-quiet logging" do
233
+ class QuietConfigurationExample1
234
+ include Flexirest::Configuration
235
+ end
236
+ expect(QuietConfigurationExample1.quiet).to be_falsey
237
+ end
238
+
239
+ it "should be able to switch on quiet logging" do
240
+ class QuietConfigurationExample2
241
+ include Flexirest::Configuration
242
+ quiet!
243
+ end
244
+ class QuietConfigurationExample3
245
+ include Flexirest::Configuration
246
+ quiet true
247
+ end
248
+ expect(QuietConfigurationExample2.quiet).to be_truthy
249
+ expect(QuietConfigurationExample3.quiet).to be_truthy
250
+ end
251
+
232
252
  it "should store a translator given" do
233
253
  expect{ ConfigurationExample.send(:translator) }.to_not raise_error
234
254
  ConfigurationExample.send(:translator, String.new)
@@ -14,7 +14,7 @@ describe Flexirest::Instrumentation do
14
14
  end
15
15
 
16
16
  it "should call ActiveSupport::Notifications.instrument when making any request" do
17
- expect(ActiveSupport::Notifications).to receive(:instrument).with("request_call.flexirest", {:name=>"InstrumentationExampleClient#fake"})
17
+ expect(ActiveSupport::Notifications).to receive(:instrument).with("request_call.flexirest", {:name=>"InstrumentationExampleClient#fake", :quiet=>false})
18
18
  InstrumentationExampleClient.fake
19
19
  end
20
20
 
@@ -332,7 +332,7 @@ describe 'JSON API' do
332
332
  end
333
333
 
334
334
  it 'should raise the relevant Flexirest error' do
335
- expect(-> { make_request }).to raise_error(Flexirest::HTTPNotFoundClientException) do |exception|
335
+ expect { make_request }.to raise_error(Flexirest::HTTPNotFoundClientException) do |exception|
336
336
  expect(exception.result.first.detail).to eq("The record identified by 123456 could not be found")
337
337
  end
338
338
  end
@@ -349,7 +349,7 @@ describe 'JSON API' do
349
349
  end
350
350
 
351
351
  it 'should ignore the "data" key and raise the relevant Flexirest error' do
352
- expect(-> { make_request }).to raise_error(Flexirest::HTTPNotFoundClientException) do |exception|
352
+ expect { make_request }.to raise_error(Flexirest::HTTPNotFoundClientException) do |exception|
353
353
  expect(exception.result.first.detail).to eq("The record identified by 123456 could not be found")
354
354
  end
355
355
  end
@@ -464,7 +464,7 @@ describe 'JSON API' do
464
464
  end
465
465
 
466
466
  it 'should raise exception when an association in the response is not defined in base class' do
467
- expect(-> { subject.includes(:tags).not_recognized_assoc(1) }).to raise_error(Exception)
467
+ expect { subject.includes(:tags).not_recognized_assoc(1) }.to raise_error(Exception)
468
468
  end
469
469
  end
470
470
 
@@ -528,7 +528,7 @@ describe 'JSON API' do
528
528
  article = JsonAPIExample::Article.new
529
529
  article.item = 'item one'
530
530
  article.tags = [tag, author]
531
- expect(-> { article.create }).to raise_error(Exception)
531
+ expect { article.create }.to raise_error(Exception)
532
532
  end
533
533
 
534
534
  it 'should perform a patch request in proper json api format' do
@@ -188,6 +188,13 @@ describe Flexirest::Request do
188
188
  post :create, "/create"
189
189
  end
190
190
 
191
+ class QuietExampleClient < ExampleClient
192
+ base_url "http://www.example.com"
193
+ quiet!
194
+ get :all, "/all"
195
+ post :create, "/create"
196
+ end
197
+
191
198
  class CallbackBodyExampleClient < ExampleClient
192
199
  base_url "http://www.example.com"
193
200
  before_request do |name, request|
@@ -385,11 +392,14 @@ describe Flexirest::Request do
385
392
 
386
393
  it "should use the URL method for Basic auth when basic_auth_method is set to :url (and not include Authorization header)" do
387
394
  mocked_response = ::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{}))
388
- headers_not_including_auth = hash_excluding("Authorization")
389
395
 
390
396
  connection = double(Flexirest::Connection).as_null_object
391
397
  expect(Flexirest::ConnectionManager).to receive(:get_connection).with("http://john:smith@www.example.com").and_return(connection)
392
- expect(connection).to receive(:get).with("/", headers: headers_not_including_auth).and_return(mocked_response)
398
+ expect(connection).to receive(:get) do |path, options|
399
+ expect(path).to eq("/")
400
+ expect(options[:headers]).to eq({"Accept"=>"application/hal+json, application/json;q=0.5", "Content-Type"=>"application/x-www-form-urlencoded; charset=utf-8"})
401
+ end.and_return(mocked_response)
402
+
393
403
  AuthenticatedBasicUrlExampleClient.all
394
404
  end
395
405
 
@@ -1120,6 +1130,16 @@ describe Flexirest::Request do
1120
1130
  VerboseExampleClient.all
1121
1131
  end
1122
1132
 
1133
+ it "should not log if quiet" do
1134
+ connection = double(Flexirest::Connection).as_null_object
1135
+ expect(Flexirest::ConnectionManager).to receive(:get_connection).and_return(connection)
1136
+ expect(connection).to receive(:get).with("/all", an_instance_of(Hash)).and_return(::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{"Content-Type" => "application/json", "Connection" => "close"})))
1137
+ expect(Flexirest::Logger).to_not receive(:debug)
1138
+ expect(Flexirest::Logger).to_not receive(:info)
1139
+ expect(Flexirest::Logger).to_not receive(:error)
1140
+ QuietExampleClient.all
1141
+ end
1142
+
1123
1143
  it "should return the headers still for 202 responses" do
1124
1144
  fake_location = "https://foo.example.com/123"
1125
1145
  expect_any_instance_of(Flexirest::Connection).
data/spec/spec_helper.rb CHANGED
@@ -12,6 +12,8 @@ elsif ENV["TRAVIS"]
12
12
  Coveralls.wear!
13
13
  end
14
14
 
15
+ ActiveSupport::Deprecation.silenced = true
16
+
15
17
  RSpec.configure do |config|
16
18
  config.color = true
17
19
  # config.formatter = 'documentation'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flexirest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.11
4
+ version: 1.10.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Jeffries
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-22 00:00:00.000000000 Z
11
+ date: 2022-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -280,7 +280,6 @@ files:
280
280
  - docs/body-types.md
281
281
  - docs/caching.md
282
282
  - docs/combined-example.md
283
- - docs/debugging.md
284
283
  - docs/default-parameters.md
285
284
  - docs/empty-body-handling.md
286
285
  - docs/faking-calls.md
@@ -291,6 +290,7 @@ files:
291
290
  - docs/issue_template.md
292
291
  - docs/json-api.md
293
292
  - docs/lazy-loading.md
293
+ - docs/logging.md
294
294
  - docs/migrating-from-activerestclient.md
295
295
  - docs/parallel-requests.md
296
296
  - docs/per-request-parameter-encoding.md