From c20ae3de42b3da938c2dedf07b053f294995ba2f Mon Sep 17 00:00:00 2001 From: Sebastien Lavoie Date: Sat, 25 Nov 2023 12:11:19 -0500 Subject: [PATCH 1/4] Move appraisal to a development dependency --- Gemfile | 1 - json_api_client.gemspec | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 0b5a6e5c..6c419569 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,6 @@ source "https://rubygems.org" gemspec gem 'rake' -gem 'appraisal' gem "activesupport" gem 'addressable', '~> 2.2' diff --git a/json_api_client.gemspec b/json_api_client.gemspec index 0bf66064..eaec2182 100644 --- a/json_api_client.gemspec +++ b/json_api_client.gemspec @@ -20,6 +20,7 @@ Gem::Specification.new do |s| s.add_development_dependency "webmock", '~> 3.5.1' s.add_development_dependency "mocha" + s.add_development_dependency "appraisal" s.license = "MIT" From 07ed3d7ea67bad7446ac782c6779607751d8575a Mon Sep 17 00:00:00 2001 From: Sebastien Lavoie Date: Sat, 25 Nov 2023 12:13:33 -0500 Subject: [PATCH 2/4] Prefix activesupport appraisals --- Appraisals | 10 +++++----- gemfiles/5.2.3.gemfile | 15 --------------- gemfiles/6.0.gemfile | 15 --------------- .../{3.2.gemfile => activesupport_3.2.gemfile} | 7 +++---- .../{4.0.gemfile => activesupport_4.0.gemfile} | 7 +++---- .../{4.1.gemfile => activesupport_4.1.gemfile} | 7 +++---- .../{4.2.gemfile => activesupport_4.2.gemfile} | 7 +++---- .../{5.0.gemfile => activesupport_5.0.gemfile} | 7 +++---- 8 files changed, 20 insertions(+), 55 deletions(-) delete mode 100644 gemfiles/5.2.3.gemfile delete mode 100644 gemfiles/6.0.gemfile rename gemfiles/{3.2.gemfile => activesupport_3.2.gemfile} (55%) rename gemfiles/{4.0.gemfile => activesupport_4.0.gemfile} (52%) rename gemfiles/{4.1.gemfile => activesupport_4.1.gemfile} (52%) rename gemfiles/{4.2.gemfile => activesupport_4.2.gemfile} (52%) rename gemfiles/{5.0.gemfile => activesupport_5.0.gemfile} (52%) diff --git a/Appraisals b/Appraisals index 6a74ec34..794674ae 100644 --- a/Appraisals +++ b/Appraisals @@ -1,20 +1,20 @@ -appraise '3.2' do +appraise 'activesupport-3.2' do gem 'activesupport', '~> 3.2.22' gem 'minitest', '~> 5' end -appraise '4.0' do +appraise 'activesupport-4.0' do gem 'activesupport', '~> 4.0.13' end -appraise '4.1' do +appraise 'activesupport-4.1' do gem 'activesupport', '~> 4.1.14' end -appraise '4.2' do +appraise 'activesupport-4.2' do gem 'activesupport', '~> 4.2.5.1' end -appraise '5.0' do +appraise 'activesupport-5.0' do gem 'activesupport', '~> 5.0.0' end diff --git a/gemfiles/5.2.3.gemfile b/gemfiles/5.2.3.gemfile deleted file mode 100644 index 9a9fda0a..00000000 --- a/gemfiles/5.2.3.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rake" -gem "appraisal" -gem "activesupport", "~> 5.2.3" -gem "addressable", "~> 2.2" -gem "codeclimate-test-reporter", :group => :test, :require => nil - -group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] -end - -gemspec :path => "../" diff --git a/gemfiles/6.0.gemfile b/gemfiles/6.0.gemfile deleted file mode 100644 index e046e114..00000000 --- a/gemfiles/6.0.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "rake" -gem "appraisal" -gem "activesupport", "~> 6.0.0" -gem "addressable", "~> 2.2" -gem "codeclimate-test-reporter", :group => :test, :require => nil - -group :development, :test do - gem "byebug", :platforms => [:mri_25] -end - -gemspec :path => "../" diff --git a/gemfiles/3.2.gemfile b/gemfiles/activesupport_3.2.gemfile similarity index 55% rename from gemfiles/3.2.gemfile rename to gemfiles/activesupport_3.2.gemfile index 822daa14..a6c41edc 100644 --- a/gemfiles/3.2.gemfile +++ b/gemfiles/activesupport_3.2.gemfile @@ -3,14 +3,13 @@ source "https://rubygems.org" gem "rake" -gem "appraisal" gem "activesupport", "~> 3.2.22" gem "addressable", "~> 2.2" -gem "codeclimate-test-reporter", :group => :test, :require => nil +gem "codeclimate-test-reporter", group: :test, require: nil gem "minitest", "~> 5" group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] end -gemspec :path => "../" +gemspec path: "../" diff --git a/gemfiles/4.0.gemfile b/gemfiles/activesupport_4.0.gemfile similarity index 52% rename from gemfiles/4.0.gemfile rename to gemfiles/activesupport_4.0.gemfile index 1f6e12a8..4eca9f9d 100644 --- a/gemfiles/4.0.gemfile +++ b/gemfiles/activesupport_4.0.gemfile @@ -3,13 +3,12 @@ source "https://rubygems.org" gem "rake" -gem "appraisal" gem "activesupport", "~> 4.0.13" gem "addressable", "~> 2.2" -gem "codeclimate-test-reporter", :group => :test, :require => nil +gem "codeclimate-test-reporter", group: :test, require: nil group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] end -gemspec :path => "../" +gemspec path: "../" diff --git a/gemfiles/4.1.gemfile b/gemfiles/activesupport_4.1.gemfile similarity index 52% rename from gemfiles/4.1.gemfile rename to gemfiles/activesupport_4.1.gemfile index cf256c7f..4e01cd09 100644 --- a/gemfiles/4.1.gemfile +++ b/gemfiles/activesupport_4.1.gemfile @@ -3,13 +3,12 @@ source "https://rubygems.org" gem "rake" -gem "appraisal" gem "activesupport", "~> 4.1.14" gem "addressable", "~> 2.2" -gem "codeclimate-test-reporter", :group => :test, :require => nil +gem "codeclimate-test-reporter", group: :test, require: nil group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] end -gemspec :path => "../" +gemspec path: "../" diff --git a/gemfiles/4.2.gemfile b/gemfiles/activesupport_4.2.gemfile similarity index 52% rename from gemfiles/4.2.gemfile rename to gemfiles/activesupport_4.2.gemfile index ec3599cd..a6e9b276 100644 --- a/gemfiles/4.2.gemfile +++ b/gemfiles/activesupport_4.2.gemfile @@ -3,13 +3,12 @@ source "https://rubygems.org" gem "rake" -gem "appraisal" gem "activesupport", "~> 4.2.5.1" gem "addressable", "~> 2.2" -gem "codeclimate-test-reporter", :group => :test, :require => nil +gem "codeclimate-test-reporter", group: :test, require: nil group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] end -gemspec :path => "../" +gemspec path: "../" diff --git a/gemfiles/5.0.gemfile b/gemfiles/activesupport_5.0.gemfile similarity index 52% rename from gemfiles/5.0.gemfile rename to gemfiles/activesupport_5.0.gemfile index be66dee2..503441ab 100644 --- a/gemfiles/5.0.gemfile +++ b/gemfiles/activesupport_5.0.gemfile @@ -3,13 +3,12 @@ source "https://rubygems.org" gem "rake" -gem "appraisal" gem "activesupport", "~> 5.0.0" gem "addressable", "~> 2.2" -gem "codeclimate-test-reporter", :group => :test, :require => nil +gem "codeclimate-test-reporter", group: :test, require: nil group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] end -gemspec :path => "../" +gemspec path: "../" From 64ef47026e49a0ec651ab188e9863fe1e65eca45 Mon Sep 17 00:00:00 2001 From: Sebastien Lavoie Date: Sat, 25 Nov 2023 12:15:23 -0500 Subject: [PATCH 3/4] Allow Faraday 2.x --- Appraisals | 10 ++++++++++ gemfiles/faraday_1.x.gemfile | 16 ++++++++++++++++ gemfiles/faraday_2.x.gemfile | 16 ++++++++++++++++ json_api_client.gemspec | 4 ++-- 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 gemfiles/faraday_1.x.gemfile create mode 100644 gemfiles/faraday_2.x.gemfile diff --git a/Appraisals b/Appraisals index 794674ae..e85a0972 100644 --- a/Appraisals +++ b/Appraisals @@ -18,3 +18,13 @@ end appraise 'activesupport-5.0' do gem 'activesupport', '~> 5.0.0' end + +appraise 'faraday-1.x' do + gem 'faraday', '~> 1.10' + gem 'faraday-gzip', '~> 1.0' +end + +appraise 'faraday-2.x' do + gem 'faraday', '~> 2.0' + gem 'faraday-gzip', '~> 2.0' +end diff --git a/gemfiles/faraday_1.x.gemfile b/gemfiles/faraday_1.x.gemfile new file mode 100644 index 00000000..87e34816 --- /dev/null +++ b/gemfiles/faraday_1.x.gemfile @@ -0,0 +1,16 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rake" +gem "activesupport" +gem "addressable", "~> 2.2" +gem "codeclimate-test-reporter", group: :test, require: nil +gem "faraday", "~> 1.10" +gem "faraday-gzip", "~> 1.0" + +group :development, :test do + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] +end + +gemspec path: "../" diff --git a/gemfiles/faraday_2.x.gemfile b/gemfiles/faraday_2.x.gemfile new file mode 100644 index 00000000..38c1227a --- /dev/null +++ b/gemfiles/faraday_2.x.gemfile @@ -0,0 +1,16 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rake" +gem "activesupport" +gem "addressable", "~> 2.2" +gem "codeclimate-test-reporter", group: :test, require: nil +gem "faraday", "~> 2.0" +gem "faraday-gzip", "~> 2.0" + +group :development, :test do + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] +end + +gemspec path: "../" diff --git a/json_api_client.gemspec b/json_api_client.gemspec index eaec2182..1fc04a74 100644 --- a/json_api_client.gemspec +++ b/json_api_client.gemspec @@ -12,8 +12,8 @@ Gem::Specification.new do |s| s.summary = 'Build client libraries compliant with specification defined by jsonapi.org' s.add_dependency "activesupport", '>= 3.2.0' - s.add_dependency "faraday", '>= 0.15.2', '< 2.0' - s.add_dependency "faraday-gzip", '>= 0.1.0', '< 2.0' + s.add_dependency "faraday", '>= 1.10', '< 3.0' + s.add_dependency "faraday-gzip", '>= 1.0', '< 3.0' s.add_dependency "addressable", '~> 2.2' s.add_dependency "activemodel", '>= 3.2.0' s.add_dependency "rack", '>= 0.2' From 7d676c6cf37a16fcfcd6f564aeb8c8978d12ea4e Mon Sep 17 00:00:00 2001 From: Sebastien Lavoie Date: Sat, 25 Nov 2023 11:48:15 -0500 Subject: [PATCH 4/4] Add support for Faraday 2.x --- lib/json_api_client/connection.rb | 4 +-- lib/json_api_client/middleware.rb | 3 +- lib/json_api_client/middleware/parse_json.rb | 31 -------------------- 3 files changed, 3 insertions(+), 35 deletions(-) delete mode 100644 lib/json_api_client/middleware/parse_json.rb diff --git a/lib/json_api_client/connection.rb b/lib/json_api_client/connection.rb index 50026abb..c7bfa8eb 100644 --- a/lib/json_api_client/connection.rb +++ b/lib/json_api_client/connection.rb @@ -13,7 +13,7 @@ def initialize(options = {}) builder.request :json builder.use Middleware::JsonRequest builder.use Middleware::Status, status_middleware_options - builder.use Middleware::ParseJson + builder.response :json builder.use ::Faraday::Gzip::Middleware builder.adapter(*adapter_options) end @@ -24,7 +24,7 @@ def initialize(options = {}) # inserted middleware will run after json parsed def use(middleware, *args, &block) return if faraday.builder.locked? - faraday.builder.insert_before(Middleware::ParseJson, middleware, *args, &block) + faraday.builder.insert_before(::Faraday::Response::Json, middleware, *args, &block) end def delete(middleware) diff --git a/lib/json_api_client/middleware.rb b/lib/json_api_client/middleware.rb index ed44a367..88627215 100644 --- a/lib/json_api_client/middleware.rb +++ b/lib/json_api_client/middleware.rb @@ -1,7 +1,6 @@ module JsonApiClient module Middleware autoload :JsonRequest, 'json_api_client/middleware/json_request' - autoload :ParseJson, 'json_api_client/middleware/parse_json' autoload :Status, 'json_api_client/middleware/status' end -end \ No newline at end of file +end diff --git a/lib/json_api_client/middleware/parse_json.rb b/lib/json_api_client/middleware/parse_json.rb deleted file mode 100644 index 02141a64..00000000 --- a/lib/json_api_client/middleware/parse_json.rb +++ /dev/null @@ -1,31 +0,0 @@ -module JsonApiClient - module Middleware - class ParseJson < Faraday::Middleware - - def call(environment) - @app.call(environment).on_complete do |env| - if process_response_type?(response_type(env)) - env[:raw_body] = env[:body] - env[:body] = parse(env[:body]) - end - end - end - - private - - def parse(body) - ::JSON.parse(body) unless body.strip.empty? - end - - def response_type(env) - type = env[:response_headers]['Content-Type'].to_s - type = type.split(';', 2).first if type.index(';') - type - end - - def process_response_type?(type) - !!type.match(/\bjson$/) - end - end - end -end \ No newline at end of file