flexirest 1.10.4 → 1.10.8

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: 9a072753fe6a84d8f13ae90d26cdff777e78fc129d4555b5188ae0c0be35ad78
4
- data.tar.gz: 7e6ecfe247cc9f021a3e35f9cf4d3b28a6743694b53a2ca32c0ea988a2113276
3
+ metadata.gz: 1b83cde99ff35cebe79fea42a56376731df479a41668d080adc68ff5be4a24dc
4
+ data.tar.gz: 9170fdcf1afaa4d94d55d13b67c406ef470d3793ea9c7738416cd55b4fdc8107
5
5
  SHA512:
6
- metadata.gz: 561fdb72c84a9bd3d0a353f46d4761179df66f3e45967bec4b4b620c6f818dca0058388b5f83c2d2455da1f21fa90a72ec0f73ab056fbf086dab522cc8f48fd7
7
- data.tar.gz: 95d6f2852392a23c82a5ae0e157a9ad1bc391c4846e79946eab75236c1c3b409c8193a3550e42b9e19676b94a3cccda28e6f0ddf438e47b3e77de9c66669006a
6
+ metadata.gz: 70e59dcfcfc93ce1af97961756bc92c6f53f3d438afea748c918cad5b00583afda7678de691a8ce0bf7f2e45619d73adba2b3c5be4a80c29fd80550fccb9e62b
7
+ data.tar.gz: 953064ac2ad371bc5d793291ceef862092983a34489b6e5780b7f4d84a4d568e4520b50df41ebd8f9663412a80feeeac1562767ff879eedae235576284fc3771
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Build
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ matrix:
22
+ ruby-version: ['2.5', '2.6', '2.7', '3.0']
23
+
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - name: Set up Ruby
27
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
+ # uses: ruby/setup-ruby@v1
30
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
31
+ with:
32
+ ruby-version: ${{ matrix.ruby-version }}
33
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
34
+ - name: Run tests
35
+ run: bundle exec rake
data/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.10.8
4
+
5
+ Bugfix:
6
+
7
+ - Flexirest didn't set DELETE params in the URL if send_request_body was false
8
+
9
+ ## 1.10.7
10
+
11
+ Bugfix:
12
+
13
+ - Flexirest didn't find the elements if the specified root wasn't found, e.g. in error conditions (thanks to Jolyon Pawlyn/@jpawlyn for the PR)
14
+
15
+ ## 1.10.6
16
+
17
+ Bugfix:
18
+
19
+ - Flexirest was erroring if Rails.logger was defined but was nil (thanks to Alex Oxte for the PR)
20
+
21
+ ## 1.10.5
22
+
23
+ Enhancement:
24
+
25
+ - Allow skipping of caching for single endpoints
26
+
3
27
  ## 1.10.4
4
28
 
5
29
  Enhancement:
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Flexirest
2
2
 
3
3
  > Access your REST APIs in a flexible way.
4
- >
4
+ >
5
5
  > Write your API classes in an ActiveRecord-style; like ActiveResource but Flexirest works where the resource naming doesn't follow Rails conventions, it has built-in caching and is much more flexible.
6
6
 
7
- [![Build Status](https://travis-ci.org/flexirest/flexirest.svg?branch=master)](https://travis-ci.org/flexirest/flexirest)
7
+ [![Build](https://github.com/flexirest/flexirest/actions/workflows/build_test.yml/badge.svg)](https://github.com/flexirest/flexirest/actions/workflows/build.yml)
8
8
  [![Coverage Status](https://coveralls.io/repos/github/flexirest/flexirest/badge.svg?branch=master)](https://coveralls.io/github/flexirest/flexirest?branch=master)
9
9
  [![Code Climate](https://codeclimate.com/github/flexirest/flexirest.png)](https://codeclimate.com/github/flexirest/flexirest)
10
10
  [![Gem Version](https://badge.fury.io/rb/flexirest.png)](http://badge.fury.io/rb/flexirest)
data/docs/caching.md CHANGED
@@ -14,6 +14,14 @@ class Person < Flexirest::Base
14
14
  end
15
15
  ```
16
16
 
17
+ or per request endpoint with:
18
+
19
+ ```ruby
20
+ class Person < Flexirest::Base
21
+ get :all, "/people", skip_caching: true
22
+ end
23
+ ```
24
+
17
25
  If Rails is defined, it will default to using Rails.cache as the cache store, if not, you'll need to configure one with a `ActiveSupport::Cache::Store` compatible object using:
18
26
 
19
27
  ```ruby
@@ -17,7 +17,7 @@ module Flexirest
17
17
  end
18
18
 
19
19
  def self.debug(message)
20
- if defined?(Rails) && Rails.respond_to?(:logger)
20
+ if defined?(Rails) && Rails.logger.present?
21
21
  Rails.logger.debug(message)
22
22
  elsif @logfile
23
23
  if @logfile.is_a?(String)
@@ -33,7 +33,7 @@ module Flexirest
33
33
  end
34
34
 
35
35
  def self.info(message)
36
- if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
36
+ if defined?(Rails) && Rails.logger.present?
37
37
  Rails.logger.info(message)
38
38
  elsif @logfile
39
39
  if @logfile.is_a?(String)
@@ -49,7 +49,7 @@ module Flexirest
49
49
  end
50
50
 
51
51
  def self.warn(message)
52
- if defined?(Rails) && Rails.respond_to?(:logger)
52
+ if defined?(Rails) && Rails.logger.present?
53
53
  Rails.logger.warn(message)
54
54
  elsif @logfile
55
55
  if @logfile.is_a?(String)
@@ -65,7 +65,7 @@ module Flexirest
65
65
  end
66
66
 
67
67
  def self.error(message)
68
- if defined?(Rails) && Rails.respond_to?(:logger)
68
+ if defined?(Rails) && Rails.logger.present?
69
69
  Rails.logger.error(message)
70
70
  elsif @logfile
71
71
  if @logfile.is_a?(String)
@@ -312,7 +312,7 @@ module Flexirest
312
312
 
313
313
  result = handle_response(response_env, cached)
314
314
  @response_delegate.__setobj__(result)
315
- original_object_class.write_cached_response(self, response_env, result)
315
+ original_object_class.write_cached_response(self, response_env, result) unless @method[:options][:skip_caching]
316
316
  end
317
317
 
318
318
  # If this was not a parallel request just return the original result
@@ -347,7 +347,7 @@ module Flexirest
347
347
  if @explicit_parameters
348
348
  params = @explicit_parameters
349
349
  end
350
- if http_method == :get
350
+ if http_method == :get || (http_method == :delete && !@method[:options][:send_delete_body] && proxy != :json_api)
351
351
  @get_params = default_params.merge(params || {})
352
352
  @post_params = nil
353
353
  elsif http_method == :delete && @method[:options][:send_delete_body]
@@ -523,7 +523,7 @@ module Flexirest
523
523
 
524
524
  def do_request(etag)
525
525
  http_headers = {}
526
- http_headers["If-None-Match"] = etag if etag
526
+ http_headers["If-None-Match"] = etag if etag && !@method[:options][:skip_caching]
527
527
  http_headers["Accept"] = "application/hal+json, application/json;q=0.5"
528
528
  headers.each do |key,value|
529
529
  value = value.join(",") if value.is_a?(Array)
@@ -862,14 +862,14 @@ module Flexirest
862
862
 
863
863
  if ignore_root
864
864
  [ignore_root].flatten.each do |key|
865
- body = body[key.to_s]
865
+ body = body[key.to_s] if body.has_key?(key.to_s)
866
866
  end
867
867
  end
868
868
  elsif is_xml_response?
869
869
  body = @response.body.blank? ? {} : Crack::XML.parse(@response.body)
870
870
  if ignore_root
871
871
  [ignore_root].flatten.each do |key|
872
- body = body[key.to_s]
872
+ body = body[key.to_s] if body.has_key?(key.to_s)
873
873
  end
874
874
  elsif options[:ignore_xml_root]
875
875
  Flexirest::Logger.warn("Using `ignore_xml_root` is deprecated, please switch to `ignore_root`")
@@ -890,7 +890,7 @@ module Flexirest
890
890
  result = new_object(body, @overridden_name)
891
891
  result._status = @response.status
892
892
  result._headers = @response.response_headers
893
- result._etag = @response.response_headers['ETag']
893
+ result._etag = @response.response_headers['ETag'] unless @method[:options][:skip_caching]
894
894
  if !object_is_class? && options[:mutable] != false
895
895
  @object._copy_from(result)
896
896
  @object._clean!
@@ -1,3 +1,3 @@
1
1
  module Flexirest
2
- VERSION = "1.10.4"
2
+ VERSION = "1.10.8"
3
3
  end
@@ -236,6 +236,8 @@ describe Flexirest::BaseWithoutValidation do
236
236
 
237
237
  Flexirest::Base.base_url = "https://www.example.com/api/v2"
238
238
  expect(OutsideBaseExample.base_url).to eq("https://www.example.com/api/v2")
239
+ ensure
240
+ Flexirest::Base.base_url = 'http://www.example.com'
239
241
  end
240
242
 
241
243
  it "should include the Mapping module" do
@@ -41,6 +41,7 @@ describe Flexirest::Request do
41
41
  get :find, "/:id", required: [:id]
42
42
  get :find_cat, "/:id/cat"
43
43
  get :fruits, "/fruits"
44
+ get :uncached, "/uncached", skip_caching: true
44
45
  get :change, "/change"
45
46
  get :plain, "/plain/:id", plain: true
46
47
  post :create, "/create", rubify_names: true
@@ -205,6 +206,16 @@ describe Flexirest::Request do
205
206
  }
206
207
  end
207
208
 
209
+ class IgnoredRootWithUnexpectedResponseExampleClient < ExampleClient
210
+ get :root, "/root", ignore_root: "feed", fake: %Q{
211
+ {
212
+ "error": {
213
+ "message": "Example Error"
214
+ }
215
+ }
216
+ }
217
+ end
218
+
208
219
  class IgnoredMultiLevelRootExampleClient < ExampleClient
209
220
  get :multi_level_root, "/multi-level-root", ignore_root: [:response, "data", "object"], fake: %Q{
210
221
  {
@@ -425,7 +436,7 @@ describe Flexirest::Request do
425
436
  end
426
437
 
427
438
  it "should get an HTTP connection when called and call delete without a body if send_delete_body is not specified" do
428
- expect_any_instance_of(Flexirest::Connection).to receive(:delete).with("/remove/1", "", an_instance_of(Hash)).and_return(::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{})))
439
+ expect_any_instance_of(Flexirest::Connection).to receive(:delete).with("/remove/1?something=else", "", an_instance_of(Hash)).and_return(::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{})))
429
440
  ExampleClient.remove(id:1, something: "else")
430
441
  end
431
442
 
@@ -997,6 +1008,35 @@ describe Flexirest::Request do
997
1008
  expect(object._etag).to eq("123456")
998
1009
  end
999
1010
 
1011
+ it "shouldn't expose the etag header if skip_caching is enabled" do
1012
+ response = ::FaradayResponseMock.new(OpenStruct.new(body: "{}", response_headers: {"ETag" => "123456"}, status: 200))
1013
+ expect_any_instance_of(Flexirest::Connection).to receive(:get).with("/uncached", an_instance_of(Hash)).and_return(response)
1014
+ object = ExampleClient.uncached
1015
+ expect(object._etag).to_not eq("123456")
1016
+ end
1017
+
1018
+ it "shouldn't send the etag header if skip_caching is enabled" do
1019
+ cached_response = Flexirest::CachedResponse.new(status:200, result:"", response_headers: {})
1020
+ cached_response.etag = "123456"
1021
+ expect(ExampleClient).to receive(:read_cached_response).and_return(cached_response)
1022
+
1023
+ response = ::FaradayResponseMock.new(OpenStruct.new(body: "{}", response_headers: {"ETag" => "123456"}, status: 200))
1024
+ expect_any_instance_of(Flexirest::Connection).to receive(:get).with("/uncached", {
1025
+ api_auth: {
1026
+ api_auth_access_id: "id123",
1027
+ api_auth_options: {},
1028
+ api_auth_secret_key: "secret123"
1029
+ },
1030
+ headers: {
1031
+ "Accept"=>"application/hal+json, application/json;q=0.5",
1032
+ "Content-Type"=>"application/x-www-form-urlencoded; charset=utf-8"
1033
+ }
1034
+ }).and_return(response)
1035
+
1036
+ expect(ExampleClient).to_not receive(:write_cached_response)
1037
+ object = ExampleClient.uncached
1038
+ end
1039
+
1000
1040
  it "should expose all headers" do
1001
1041
  response = ::FaradayResponseMock.new(OpenStruct.new(body: "{}", response_headers: {"X-Test-Header" => "true"}, status: 200))
1002
1042
  expect_any_instance_of(Flexirest::Connection).to receive(:get).with("/123", an_instance_of(Hash)).and_return(response)
@@ -1494,6 +1534,10 @@ describe Flexirest::Request do
1494
1534
  expect(IgnoredRootExampleClient.root.title).to eq("Example Feed")
1495
1535
  end
1496
1536
 
1537
+ it "should ignore an ignore_root parameter if the specified element is not in the response" do
1538
+ expect(IgnoredRootWithUnexpectedResponseExampleClient.root.error.message).to eq("Example Error")
1539
+ end
1540
+
1497
1541
  it "should ignore a specified multi-level root element" do
1498
1542
  expect(IgnoredMultiLevelRootExampleClient.multi_level_root.title).to eq("Example Multi Level Feed")
1499
1543
  end
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.4
4
+ version: 1.10.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Jeffries
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-16 00:00:00.000000000 Z
11
+ date: 2021-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -261,10 +261,10 @@ executables: []
261
261
  extensions: []
262
262
  extra_rdoc_files: []
263
263
  files:
264
+ - ".github/workflows/build.yml"
264
265
  - ".gitignore"
265
266
  - ".rspec"
266
267
  - ".simplecov"
267
- - ".travis.yml"
268
268
  - CHANGELOG.md
269
269
  - Gemfile
270
270
  - LICENSE.txt
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.7.0
4
- - 2.6.0
5
- - 2.5.0