diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index 2012e7f8..2a581710 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -22,27 +22,11 @@ jobs: strategy: fail-fast: false matrix: - ruby: [2.3, 2.4, 2.5, 2.6, 2.7] - rails: ["4.1", "4.2", "5.0", "5.2.3", "6.0"] - exclude: - - ruby: "2.4" - rails: "4.1" - - ruby: "2.4" - rails: "4.2" - - ruby: "2.4" - rails: "6.0" - - ruby: "2.5" - rails: "4.1" - - ruby: "2.5" - rails: "4.2" - - ruby: "2.6" - rails: "4.1" - - ruby: "2.6" - rails: "4.2" - - ruby: "2.7" - rails: "4.1" - - ruby: "2.7" - rails: "4.2" + ruby: + - "3.0" + - "3.1" + - "3.2" + - "3.3" steps: - uses: actions/checkout@v4 - name: Set up Ruby @@ -51,4 +35,6 @@ jobs: ruby-version: ${{ matrix.ruby }} bundler-cache: true # runs 'bundle install' and caches installed gems automatically - name: Run tests - run: bundle exec rake + run: | + bundle exec appraisal install + bundle exec appraisal rake test diff --git a/Appraisals b/Appraisals index 6a74ec34..d945edc6 100644 --- a/Appraisals +++ b/Appraisals @@ -1,20 +1,25 @@ -appraise '3.2' do - gem 'activesupport', '~> 3.2.22' - gem 'minitest', '~> 5' +appraise 'activesupport-6.0' do + gem 'activesupport', '~> 6.0.0' end -appraise '4.0' do - gem 'activesupport', '~> 4.0.13' +appraise 'activesupport-6.1' do + gem 'activesupport', '~> 6.1.0' end -appraise '4.1' do - gem 'activesupport', '~> 4.1.14' +appraise 'activesupport-7.0' do + gem 'activesupport', '~> 7.0.0' end -appraise '4.2' do - gem 'activesupport', '~> 4.2.5.1' +appraise 'activesupport-7.1' do + gem 'activesupport', '~> 7.1.0' end -appraise '5.0' do - gem 'activesupport', '~> 5.0.0' +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/CHANGELOG.md b/CHANGELOG.md index 800e455e..f11740e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,11 @@ ## Unreleased - +- [#412](https://github.com/JsonApiClient/json_api_client/pull/412) + - Add support for faraday 2.x + - Drop support for Ruby < 3.0 (EOL) + - Drop support for activesupport < 6.0 (EOL) + - Remove deprecated faraday_middleware and add faraday-gzip (from [#402](https://github.com/JsonApiClient/json_api_client/pull/402)) - [#400](https://github.com/JsonApiClient/json_api_client/pull/400) - Fix for multi-word custom endpoint and route format ## 1.22.0 diff --git a/Gemfile b/Gemfile index 0b5a6e5c..c4323770 100644 --- a/Gemfile +++ b/Gemfile @@ -3,9 +3,8 @@ source "https://rubygems.org" gemspec gem 'rake' -gem 'appraisal' -gem "activesupport" +gem "activesupport", ">= 4.0.13" gem 'addressable', '~> 2.2' gem "codeclimate-test-reporter", group: :test, require: nil diff --git a/gemfiles/3.2.gemfile b/gemfiles/3.2.gemfile deleted file mode 100644 index 822daa14..00000000 --- a/gemfiles/3.2.gemfile +++ /dev/null @@ -1,16 +0,0 @@ -# This file was generated by Appraisal - -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 "minitest", "~> 5" - -group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] -end - -gemspec :path => "../" diff --git a/gemfiles/4.0.gemfile b/gemfiles/4.0.gemfile deleted file mode 100644 index 1f6e12a8..00000000 --- a/gemfiles/4.0.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -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 - -group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] -end - -gemspec :path => "../" diff --git a/gemfiles/4.1.gemfile b/gemfiles/4.1.gemfile deleted file mode 100644 index cf256c7f..00000000 --- a/gemfiles/4.1.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -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 - -group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] -end - -gemspec :path => "../" diff --git a/gemfiles/4.2.gemfile b/gemfiles/4.2.gemfile deleted file mode 100644 index ec3599cd..00000000 --- a/gemfiles/4.2.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -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 - -group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] -end - -gemspec :path => "../" diff --git a/gemfiles/5.0.gemfile b/gemfiles/5.0.gemfile deleted file mode 100644 index be66dee2..00000000 --- a/gemfiles/5.0.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -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 - -group :development, :test do - gem "byebug", :platforms => [:mri_20, :mri_21, :mri_22] -end - -gemspec :path => "../" 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/activesupport_6.0.gemfile similarity index 54% rename from gemfiles/6.0.gemfile rename to gemfiles/activesupport_6.0.gemfile index e046e114..57a778e1 100644 --- a/gemfiles/6.0.gemfile +++ b/gemfiles/activesupport_6.0.gemfile @@ -3,13 +3,12 @@ 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 +gem "codeclimate-test-reporter", group: :test, require: nil group :development, :test do - gem "byebug", :platforms => [:mri_25] + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] end -gemspec :path => "../" +gemspec path: "../" diff --git a/gemfiles/activesupport_6.1.gemfile b/gemfiles/activesupport_6.1.gemfile new file mode 100644 index 00000000..460b7529 --- /dev/null +++ b/gemfiles/activesupport_6.1.gemfile @@ -0,0 +1,14 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rake" +gem "activesupport", "~> 6.1.0" +gem "addressable", "~> 2.2" +gem "codeclimate-test-reporter", group: :test, require: nil + +group :development, :test do + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] +end + +gemspec path: "../" diff --git a/gemfiles/activesupport_7.0.gemfile b/gemfiles/activesupport_7.0.gemfile new file mode 100644 index 00000000..5d577ad6 --- /dev/null +++ b/gemfiles/activesupport_7.0.gemfile @@ -0,0 +1,14 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rake" +gem "activesupport", "~> 7.0.0" +gem "addressable", "~> 2.2" +gem "codeclimate-test-reporter", group: :test, require: nil + +group :development, :test do + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] +end + +gemspec path: "../" diff --git a/gemfiles/activesupport_7.1.gemfile b/gemfiles/activesupport_7.1.gemfile new file mode 100644 index 00000000..5347aea7 --- /dev/null +++ b/gemfiles/activesupport_7.1.gemfile @@ -0,0 +1,14 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rake" +gem "activesupport", "~> 7.1.0" +gem "addressable", "~> 2.2" +gem "codeclimate-test-reporter", group: :test, require: nil + +group :development, :test do + gem "byebug", "~> 10.0", platforms: [:mri_20, :mri_21, :mri_22] +end + +gemspec path: "../" diff --git a/gemfiles/faraday_1.x.gemfile b/gemfiles/faraday_1.x.gemfile new file mode 100644 index 00000000..f6c65ac0 --- /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", ">= 4.0.13" +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..d857de41 --- /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", ">= 4.0.13" +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 658f92f3..3c048320 100644 --- a/json_api_client.gemspec +++ b/json_api_client.gemspec @@ -11,15 +11,16 @@ Gem::Specification.new do |s| s.description = 'Build client libraries compliant with specification defined by jsonapi.org' 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_middleware", '>= 0.9.0', '< 2.0' + s.add_dependency "activesupport", '>= 6.0.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 "activemodel", '>= 6.0.0' s.add_dependency "rack", '>= 0.2' s.add_development_dependency "webmock", '~> 3.5.1' s.add_development_dependency "mocha" + s.add_development_dependency "appraisal" s.license = "MIT" diff --git a/lib/json_api_client.rb b/lib/json_api_client.rb index b4082727..f261a019 100644 --- a/lib/json_api_client.rb +++ b/lib/json_api_client.rb @@ -1,5 +1,5 @@ require 'faraday' -require 'faraday_middleware' +require 'faraday/gzip' require 'json' require 'addressable/uri' require 'json_api_client/formatter' diff --git a/lib/json_api_client/connection.rb b/lib/json_api_client/connection.rb index d7e9ab33..c7bfa8eb 100644 --- a/lib/json_api_client/connection.rb +++ b/lib/json_api_client/connection.rb @@ -13,8 +13,8 @@ def initialize(options = {}) builder.request :json builder.use Middleware::JsonRequest builder.use Middleware::Status, status_middleware_options - builder.use Middleware::ParseJson - builder.use ::FaradayMiddleware::Gzip + builder.response :json + builder.use ::Faraday::Gzip::Middleware builder.adapter(*adapter_options) end yield(self) if block_given? @@ -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