From 8dec6d9bcb8b6483fd2260c5142d131ae79b88c6 Mon Sep 17 00:00:00 2001 From: mkmn Date: Wed, 9 Nov 2022 00:23:24 +0900 Subject: [PATCH] Compatible Faraday v2 faraday_middleware is deprecated, and does not support Faraday v2. From v1.10.0, faraday is bundled json middleware, and this gem can support Faraday v2. * Require Ruby: v2.6 or higer * Faraday v2 required Ruby v2.6 * Require Faraday: v1.10 or higher * backport json middleware from this version. * ref. https://github.com/lostisland/faraday/pull/1400 * require `faraday-multipart` * From Faraday v2, multipart middleware have been moved to separate faraday-multipart gem. * Add CI matrix * Run tests on both versions of Faraday. --- .github/workflows/ruby.yml | 6 +++++- .rubocop.yml | 2 +- Gemfile.lock | 6 ++---- gemfiles/faraday_1.gemfile | 11 +++++++++++ gemfiles/faraday_2.gemfile | 7 +++++++ lib/mrkt/concerns/connection.rb | 2 +- lib/mrkt/faraday.rb | 1 + lib/mrkt/faraday_middleware/response.rb | 8 +++----- mrkt.gemspec | 6 +++--- 9 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 gemfiles/faraday_1.gemfile create mode 100644 gemfiles/faraday_2.gemfile diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index 1381365..b1d4ca0 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -12,7 +12,11 @@ jobs: strategy: matrix: - ruby: ['2.5', '2.6', '2.7', '3.0', '3.1'] + ruby: ['2.6', '2.7', '3.0', '3.1'] + gemfile: [faraday_1, faraday_2] + + env: + BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile steps: - uses: actions/checkout@v3 diff --git a/.rubocop.yml b/.rubocop.yml index 99a8963..51a5482 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -3,7 +3,7 @@ require: - rubocop-rspec AllCops: - TargetRubyVersion: 2.5 + TargetRubyVersion: 2.6 Exclude: - 'bin/**/*' - 'vendor/**/*' diff --git a/Gemfile.lock b/Gemfile.lock index 060a7c8..e931819 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,8 +2,8 @@ PATH remote: . specs: mrkt (1.2.1) - faraday (>= 1, < 3) - faraday_middleware (~> 1.0) + faraday (>= 1.10, < 3) + faraday-multipart GEM remote: https://rubygems.org/ @@ -40,8 +40,6 @@ GEM faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) - faraday_middleware (1.2.0) - faraday (~> 1.0) gem-release (2.2.2) hashdiff (1.0.1) method_source (1.0.0) diff --git a/gemfiles/faraday_1.gemfile b/gemfiles/faraday_1.gemfile new file mode 100644 index 0000000..50d37f8 --- /dev/null +++ b/gemfiles/faraday_1.gemfile @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +# require v1.10 or higher. +# Because gem needs JSON middleware. +# +# see: https://github.com/lostisland/faraday/releases/tag/v1.10.0 +gem 'faraday', '~> 1.10' + +eval_gemfile File.expand_path('../Gemfile', __dir__) diff --git a/gemfiles/faraday_2.gemfile b/gemfiles/faraday_2.gemfile new file mode 100644 index 0000000..53008c2 --- /dev/null +++ b/gemfiles/faraday_2.gemfile @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +gem 'faraday', '~> 2' + +eval_gemfile File.expand_path('../Gemfile', __dir__) diff --git a/lib/mrkt/concerns/connection.rb b/lib/mrkt/concerns/connection.rb index 906a06e..16edc11 100644 --- a/lib/mrkt/concerns/connection.rb +++ b/lib/mrkt/concerns/connection.rb @@ -12,7 +12,7 @@ def init_connection conn.request :url_encoded conn.response :logger, @logger, (@log_options || {}) if @debug - conn.response :mkto, content_type: /\bjson$/ + conn.response :mkto, content_type: /\bjson$/, parser_options: { symbolize_names: true } conn.options.timeout = @options[:read_timeout] if @options.key?(:read_timeout) conn.options.open_timeout = @options[:open_timeout] if @options.key?(:open_timeout) diff --git a/lib/mrkt/faraday.rb b/lib/mrkt/faraday.rb index 6898357..44a111f 100644 --- a/lib/mrkt/faraday.rb +++ b/lib/mrkt/faraday.rb @@ -1,4 +1,5 @@ require 'faraday' +require 'faraday/multipart' require 'mrkt/faraday/params_encoder' require 'mrkt/faraday_middleware' diff --git a/lib/mrkt/faraday_middleware/response.rb b/lib/mrkt/faraday_middleware/response.rb index b04f5e4..971e209 100644 --- a/lib/mrkt/faraday_middleware/response.rb +++ b/lib/mrkt/faraday_middleware/response.rb @@ -1,11 +1,9 @@ -require 'faraday_middleware' +require 'faraday/response/json' module Mrkt module FaradayMiddleware - class Response < ::FaradayMiddleware::ParseJson - define_parser do |body| - JSON.parse(body, symbolize_names: true) unless body.strip.empty? - end + class Response < ::Faraday::Response::Json + private def process_response(env) super diff --git a/mrkt.gemspec b/mrkt.gemspec index 4770832..52e04a9 100644 --- a/mrkt.gemspec +++ b/mrkt.gemspec @@ -19,10 +19,10 @@ Gem::Specification.new do |spec| spec.metadata['rubygems_mfa_required'] = 'true' - spec.required_ruby_version = '>= 2.5' + spec.required_ruby_version = '>= 2.6' - spec.add_dependency 'faraday', '>= 1', '< 3' - spec.add_dependency 'faraday_middleware', '~> 1.0' + spec.add_dependency 'faraday', '>= 1.10', '< 3' + spec.add_dependency 'faraday-multipart' spec.add_development_dependency 'bundler', '~> 2.0' spec.add_development_dependency 'gem-release', '~> 2.1'