flexirest 1.10.11 → 1.11.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.
- checksums.yaml +4 -4
- data/.github/workflows/build.yml +1 -1
- data/CHANGELOG.md +16 -0
- data/README.md +1 -1
- data/docs/{debugging.md → logging.md} +23 -4
- data/flexirest.gemspec +17 -26
- data/lib/flexirest/base_without_validation.rb +1 -1
- data/lib/flexirest/caching.rb +4 -4
- data/lib/flexirest/configuration.rb +14 -0
- data/lib/flexirest/connection_manager.rb +1 -1
- data/lib/flexirest/instrumentation.rb +1 -1
- data/lib/flexirest/request.rb +19 -11
- data/lib/flexirest/version.rb +1 -1
- data/spec/lib/configuration_spec.rb +20 -0
- data/spec/lib/connection_manager_spec.rb +3 -1
- data/spec/lib/connection_spec.rb +18 -7
- data/spec/lib/instrumentation_spec.rb +4 -1
- data/spec/lib/json_api_spec.rb +4 -4
- data/spec/lib/request_spec.rb +22 -2
- data/spec/spec_helper.rb +2 -0
- metadata +21 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3c99c9dcb4b2b2d6b4992a53d138877f251f0810bb94dc11faf9d9e1b89f9cb
|
4
|
+
data.tar.gz: 22554cafc10d12337c1511828ab27471dbadf36de4e211c5383eae96c4fb4c34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cf855f9fbc7d4f213a19840e11cfa9b816de9b1a0750726538f288f559ec150c7a05a4ae8b63297e8aedcf8002103e2e4ae275cb497793144c83aebc7f7577e
|
7
|
+
data.tar.gz: e1a5b90ace51f341a340e5ed32f5c8afc30f2784a38cf7281c621157a8b1233da9b81180ed6a5dc0694f4ac72933793b9e47dcf01d9389583b02bdd7dc3aefbd
|
data/.github/workflows/build.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.11.0
|
4
|
+
|
5
|
+
Major change:
|
6
|
+
|
7
|
+
- Dropped support for Ruby 2.x. Ruby 2.7 will be EOL in 27 days, and anyone can use the previous version 1.10 if they need 2.x support for the last month.
|
8
|
+
|
9
|
+
Enhancement:
|
10
|
+
|
11
|
+
- Added caching lines to the quiet! feature (thanks to Romain Gisiger for the issue and PR)
|
12
|
+
|
13
|
+
## 1.10.12
|
14
|
+
|
15
|
+
Enhancement:
|
16
|
+
|
17
|
+
- Added a quiet! mode to silence logging (thanks to Mujtaba Saboor for the issue and PR)
|
18
|
+
|
3
19
|
## 1.10.11
|
4
20
|
|
5
21
|
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
|
-
- [
|
103
|
+
- [Logging](docs/logging.md)
|
104
104
|
- [XML responses](docs/xml-responses.md)
|
105
105
|
|
106
106
|
|
@@ -1,14 +1,18 @@
|
|
1
|
-
# *Flexirest:*
|
1
|
+
# *Flexirest:* Logging
|
2
2
|
|
3
|
-
|
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
|
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
|
|
data/flexirest.gemspec
CHANGED
@@ -4,15 +4,16 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'flexirest/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name
|
8
|
-
spec.version
|
9
|
-
spec.
|
10
|
-
spec.
|
11
|
-
spec.
|
12
|
-
spec.
|
13
|
-
spec.
|
14
|
-
spec.
|
15
|
-
spec.
|
7
|
+
spec.name = "flexirest"
|
8
|
+
spec.version = Flexirest::VERSION
|
9
|
+
spec.required_ruby_version = ">= 3.0.0"
|
10
|
+
spec.platform = Gem::Platform::RUBY
|
11
|
+
spec.authors = ["Andy Jeffries"]
|
12
|
+
spec.email = ["andy@andyjeffries.co.uk"]
|
13
|
+
spec.description = %q{Accessing REST services in a flexible way}
|
14
|
+
spec.summary = %q{This gem is for accessing REST services in a flexible way. ActiveResource already exists for this, but it doesn't work where the resource naming doesn't follow Rails conventions, it doesn't have in-built caching and it's not as flexible in general.}
|
15
|
+
spec.homepage = "https://andyjeffries.co.uk/"
|
16
|
+
spec.license = "MIT"
|
16
17
|
|
17
18
|
if spec.respond_to?(:metadata)
|
18
19
|
spec.metadata["source_code_uri"] = "https://github.com/flexirest/flexirest"
|
@@ -26,31 +27,21 @@ Gem::Specification.new do |spec|
|
|
26
27
|
spec.add_development_dependency "bundler"
|
27
28
|
spec.add_development_dependency "rake"
|
28
29
|
spec.add_development_dependency "rspec", "~> 3"
|
29
|
-
|
30
|
-
|
31
|
-
spec.add_development_dependency "rspec_junit_formatter", "= 0.2.3"
|
32
|
-
else
|
33
|
-
spec.add_development_dependency "webmock"
|
34
|
-
spec.add_development_dependency "rspec_junit_formatter"
|
35
|
-
end
|
30
|
+
spec.add_development_dependency "webmock"
|
31
|
+
spec.add_development_dependency "rspec_junit_formatter"
|
36
32
|
spec.add_development_dependency "simplecov"
|
37
33
|
spec.add_development_dependency "simplecov-rcov"
|
38
34
|
spec.add_development_dependency 'coveralls'
|
39
|
-
spec.add_development_dependency "api-auth", ">=
|
40
|
-
spec.add_development_dependency 'typhoeus'
|
35
|
+
spec.add_development_dependency "api-auth", ">= 2.4"
|
36
|
+
spec.add_development_dependency 'faraday-typhoeus'
|
41
37
|
spec.add_development_dependency 'activemodel'
|
42
38
|
spec.add_development_dependency 'rest-client'
|
43
39
|
|
44
40
|
spec.add_runtime_dependency "mime-types"
|
45
41
|
spec.add_runtime_dependency "multi_json"
|
46
42
|
spec.add_runtime_dependency "crack"
|
47
|
-
spec.add_runtime_dependency "faraday", "~>
|
43
|
+
spec.add_runtime_dependency "faraday", "~> 2.7"
|
48
44
|
|
49
|
-
|
50
|
-
|
51
|
-
if Gem::Version.new(RUBY_VERSION) > Gem::Version.new('2.2.2')
|
52
|
-
spec.add_runtime_dependency "activesupport"
|
53
|
-
else
|
54
|
-
spec.add_runtime_dependency "activesupport", "< 5.0.0"
|
55
|
-
end
|
45
|
+
spec.add_runtime_dependency "activesupport"
|
46
|
+
spec.add_runtime_dependency "actionpack"
|
56
47
|
end
|
@@ -220,7 +220,7 @@ module Flexirest
|
|
220
220
|
if value.is_a?(String) && value.length > 50
|
221
221
|
"#{value[0..50]}...".inspect
|
222
222
|
elsif value.is_a?(Date) || value.is_a?(Time)
|
223
|
-
%("#{value.to_s(:db)}")
|
223
|
+
%("#{value.respond_to?(:to_fs) ? value.to_fs(:db) : value.to_s(:db)}")
|
224
224
|
else
|
225
225
|
value.inspect
|
226
226
|
end
|
data/lib/flexirest/caching.rb
CHANGED
@@ -48,16 +48,16 @@ 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
|
58
58
|
end
|
59
59
|
|
60
|
-
def write_cached_response(request, response, result)
|
60
|
+
def write_cached_response(request, response, result, quiet)
|
61
61
|
return if result.is_a? Symbol
|
62
62
|
return unless perform_caching
|
63
63
|
return unless !result.respond_to?(:_status) || [200, 304].include?(result._status)
|
@@ -69,7 +69,7 @@ module Flexirest
|
|
69
69
|
|
70
70
|
if cache_store && (headers[:etag] || headers[:expires])
|
71
71
|
key = "#{request.class_name}:#{request.original_url}"
|
72
|
-
Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{key} - Writing to cache"
|
72
|
+
Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{key} - Writing to cache" unless quiet
|
73
73
|
cached_response = CachedResponse.new(status:response.status, result:result, response_headers: headers)
|
74
74
|
cached_response.etag = "#{headers[:etag]}" if headers[:etag]
|
75
75
|
cached_response.expires = Time.parse(headers[:expires]) rescue nil if headers[:expires]
|
@@ -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
|
@@ -20,7 +20,7 @@ module Flexirest
|
|
20
20
|
def self.in_parallel(base_url)
|
21
21
|
begin
|
22
22
|
require 'typhoeus'
|
23
|
-
require 'typhoeus/adapters/faraday'
|
23
|
+
require 'typhoeus/adapters/faraday' unless Gem.loaded_specs["faraday-typhoeus"].present?
|
24
24
|
rescue LoadError
|
25
25
|
raise MissingOptionalLibraryError.new("To call '::Flexirest::ConnectionManager.in_parallel' you must include the gem 'Typhoeus' in your Gemfile.")
|
26
26
|
end
|
@@ -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)
|
data/lib/flexirest/request.rb
CHANGED
@@ -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
|
@@ -312,7 +320,7 @@ module Flexirest
|
|
312
320
|
|
313
321
|
result = handle_response(response_env, cached)
|
314
322
|
@response_delegate.__setobj__(result)
|
315
|
-
original_object_class.write_cached_response(self, response_env, result) unless @method[:options][:skip_caching]
|
323
|
+
original_object_class.write_cached_response(self, response_env, result, quiet?) unless @method[:options][:skip_caching]
|
316
324
|
end
|
317
325
|
|
318
326
|
# If this was not a parallel request just return the original result
|
@@ -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
|
data/lib/flexirest/version.rb
CHANGED
@@ -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)
|
@@ -35,13 +35,15 @@ describe Flexirest::ConnectionManager do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should call 'in_parallel' for a session and yield procedure inside that block" do
|
38
|
+
require 'faraday/typhoeus' if Gem.loaded_specs["faraday-typhoeus"].present?
|
38
39
|
Flexirest::Base.adapter = :typhoeus
|
39
40
|
Flexirest::ConnectionManager.get_connection("http://www.example.com").session
|
40
41
|
expect { |b| Flexirest::ConnectionManager.in_parallel("http://www.example.com", &b)}.to yield_control
|
41
42
|
Flexirest::Base._reset_configuration!
|
42
43
|
end
|
43
44
|
|
44
|
-
it "should raise Flexirest::MissingOptionalLibraryError if
|
45
|
+
it "should raise Flexirest::MissingOptionalLibraryError if Typhoeus isn't available" do
|
46
|
+
require 'faraday/typhoeus' if Gem.loaded_specs["faraday-typhoeus"].present?
|
45
47
|
Flexirest::Base.adapter = :typhoeus
|
46
48
|
Flexirest::ConnectionManager.get_connection("http://www.example.com").session
|
47
49
|
expect(Flexirest::ConnectionManager).to receive(:require).and_raise(LoadError)
|
data/spec/lib/connection_spec.rb
CHANGED
@@ -175,13 +175,24 @@ describe Flexirest::Connection do
|
|
175
175
|
expect(auth_header == "APIAuth id123:TQiQIW6vVaDC5jvh99uTNkxIg6Q=" || auth_header == "APIAuth id123:PMWBThkB8vKbvUccHvoqu9G3eVk=").to be_truthy
|
176
176
|
end
|
177
177
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
178
|
+
if Gem.loaded_specs["api-auth"].present? && Gem.loaded_specs["api-auth"].version.to_s < "2.5.0"
|
179
|
+
it 'should have an Content-MD5 header' do
|
180
|
+
stub_request(:put, "www.example.com/foo").
|
181
|
+
with(body: "body", :headers => @default_headers).
|
182
|
+
to_return(body: "{result:true}")
|
183
|
+
|
184
|
+
result = @connection.put("/foo", "body", @options)
|
185
|
+
expect(result.env.request_headers['Content-MD5']).to eq("hBotaJrYa9FhFEdFPCLG/A==")
|
186
|
+
end
|
187
|
+
else
|
188
|
+
it 'should have an X-AUTHORIZATION-CONTENT-SHA256 header' do
|
189
|
+
stub_request(:put, "www.example.com/foo").
|
190
|
+
with(body: "body", :headers => @default_headers).
|
191
|
+
to_return(body: "{result:true}")
|
192
|
+
|
193
|
+
result = @connection.put("/foo", "body", @options)
|
194
|
+
expect(result.env.request_headers['X-AUTHORIZATION-CONTENT-SHA256']).to eq("Iw2DWNyOiJC0xY3utikS7i8gNXrpKlzIYbmOaP4xrLU=")
|
195
|
+
end
|
185
196
|
end
|
186
197
|
end
|
187
198
|
|
@@ -10,11 +10,14 @@ describe Flexirest::Instrumentation do
|
|
10
10
|
it "should save a load hook to include the instrumentation" do
|
11
11
|
hook_tester = double("HookTester")
|
12
12
|
expect(hook_tester).to receive(:include).with(Flexirest::ControllerInstrumentation)
|
13
|
+
if Gem.loaded_specs["api-auth"].present? && Gem.loaded_specs["api-auth"].version.to_s >= "2.5.0"
|
14
|
+
require "action_controller"
|
15
|
+
end
|
13
16
|
ActiveSupport.run_load_hooks(:action_controller, hook_tester)
|
14
17
|
end
|
15
18
|
|
16
19
|
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"})
|
20
|
+
expect(ActiveSupport::Notifications).to receive(:instrument).with("request_call.flexirest", {:name=>"InstrumentationExampleClient#fake", :quiet=>false})
|
18
21
|
InstrumentationExampleClient.fake
|
19
22
|
end
|
20
23
|
|
data/spec/lib/json_api_spec.rb
CHANGED
@@ -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
|
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
|
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
|
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
|
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
|
data/spec/lib/request_spec.rb
CHANGED
@@ -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)
|
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
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.
|
4
|
+
version: 1.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Jeffries
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -127,9 +127,6 @@ dependencies:
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: 1.3.1
|
132
|
-
- - "<"
|
133
130
|
- !ruby/object:Gem::Version
|
134
131
|
version: '2.4'
|
135
132
|
type: :development
|
@@ -137,13 +134,10 @@ dependencies:
|
|
137
134
|
version_requirements: !ruby/object:Gem::Requirement
|
138
135
|
requirements:
|
139
136
|
- - ">="
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: 1.3.1
|
142
|
-
- - "<"
|
143
137
|
- !ruby/object:Gem::Version
|
144
138
|
version: '2.4'
|
145
139
|
- !ruby/object:Gem::Dependency
|
146
|
-
name: typhoeus
|
140
|
+
name: faraday-typhoeus
|
147
141
|
requirement: !ruby/object:Gem::Requirement
|
148
142
|
requirements:
|
149
143
|
- - ">="
|
@@ -232,14 +226,14 @@ dependencies:
|
|
232
226
|
requirements:
|
233
227
|
- - "~>"
|
234
228
|
- !ruby/object:Gem::Version
|
235
|
-
version: '
|
229
|
+
version: '2.7'
|
236
230
|
type: :runtime
|
237
231
|
prerelease: false
|
238
232
|
version_requirements: !ruby/object:Gem::Requirement
|
239
233
|
requirements:
|
240
234
|
- - "~>"
|
241
235
|
- !ruby/object:Gem::Version
|
242
|
-
version: '
|
236
|
+
version: '2.7'
|
243
237
|
- !ruby/object:Gem::Dependency
|
244
238
|
name: activesupport
|
245
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,6 +248,20 @@ dependencies:
|
|
254
248
|
- - ">="
|
255
249
|
- !ruby/object:Gem::Version
|
256
250
|
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: actionpack
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0'
|
258
|
+
type: :runtime
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
257
265
|
description: Accessing REST services in a flexible way
|
258
266
|
email:
|
259
267
|
- andy@andyjeffries.co.uk
|
@@ -280,7 +288,6 @@ files:
|
|
280
288
|
- docs/body-types.md
|
281
289
|
- docs/caching.md
|
282
290
|
- docs/combined-example.md
|
283
|
-
- docs/debugging.md
|
284
291
|
- docs/default-parameters.md
|
285
292
|
- docs/empty-body-handling.md
|
286
293
|
- docs/faking-calls.md
|
@@ -291,6 +298,7 @@ files:
|
|
291
298
|
- docs/issue_template.md
|
292
299
|
- docs/json-api.md
|
293
300
|
- docs/lazy-loading.md
|
301
|
+
- docs/logging.md
|
294
302
|
- docs/migrating-from-activerestclient.md
|
295
303
|
- docs/parallel-requests.md
|
296
304
|
- docs/per-request-parameter-encoding.md
|
@@ -378,7 +386,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
378
386
|
requirements:
|
379
387
|
- - ">="
|
380
388
|
- !ruby/object:Gem::Version
|
381
|
-
version:
|
389
|
+
version: 3.0.0
|
382
390
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
383
391
|
requirements:
|
384
392
|
- - ">="
|