From eab584e9131098682ee8fe52df0f70769cfd00e3 Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 1 May 2020 16:10:37 +0100 Subject: [PATCH 01/14] Avoid 'last arg as keyword param' warning when building user middleware This change marks the methods which construct user middleware, so they are called with the 2.6 keyword argument behaviour in 2.7 (and avoid printing a warning about it). Some users add their own middleware & write their own constructors with named parameters, and use keyword arguments when adding their middleware to the builder: ``` class MyMiddleware < Faraday::Middleware def initialize(app, my_argument:) @app = app @my_argument = my_argument end [...] connection = Faraday.new() do |configuration| configuration.use MyMiddleware, my_argument: 'hello' end ``` This works great in 2.6 & 2.7, but 2.7 prints a deprecation warning: ``` /Users/danielholz/.gem/ruby/2.7.0/gems/faraday-1.0.1/lib/faraday/dependency_loader.rb:21: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /Users/danielholz/code/some_project/lib/some_project/faraday_middleware.rb:2: warning: The called method `initialize' is defined here ``` The warning is a bit frustrating, since the calling code is not in the user's code, so they cannot add `**` to the call. The best option for them is to change their middleware to accept a Hash as a positional parameter & pass a Hash when adding their middleware (and checking for required parameters themselves). I tried an alternative to `ruby2_keywords` by adding an explicit `**kwargs` argument to `Faraday::RackBuilder#use`, `Faraday::RackBuilder#use_symbol`, `Faraday::RackBuilder::Handler#initialize`, and `Faraday::DependencyLoader#new`, but it hit the explicit delegation of keyword arguments issue (https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/#why-deprecated) in 2.6. --- lib/faraday/dependency_loader.rb | 4 +++- lib/faraday/rack_builder.rb | 8 +++++--- spec/faraday/rack_builder_spec.rb | 25 +++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/lib/faraday/dependency_loader.rb b/lib/faraday/dependency_loader.rb index 57345646d..1d58f4d1e 100644 --- a/lib/faraday/dependency_loader.rb +++ b/lib/faraday/dependency_loader.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +def ruby2_keywords(*) end if RUBY_VERSION < '2.7' + module Faraday # DependencyLoader helps Faraday adapters and middleware load dependencies. module DependencyLoader @@ -13,7 +15,7 @@ def dependency(lib = nil) self.load_error = e end - def new(*) + ruby2_keywords def new(*) unless loaded? raise "missing dependency for #{self}: #{load_error.message}" end diff --git a/lib/faraday/rack_builder.rb b/lib/faraday/rack_builder.rb index 5157bf50c..3e0fa5019 100644 --- a/lib/faraday/rack_builder.rb +++ b/lib/faraday/rack_builder.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +def ruby2_keywords(*) end if RUBY_VERSION < '2.7' + require 'faraday/adapter_registry' module Faraday @@ -27,7 +29,7 @@ class Handler attr_reader :name - def initialize(klass, *args, &block) + ruby2_keywords def initialize(klass, *args, &block) @name = klass.to_s REGISTRY.set(klass) if klass.respond_to?(:name) @args = args @@ -89,7 +91,7 @@ def locked? @handlers.frozen? end - def use(klass, *args, &block) + ruby2_keywords def use(klass, *args, &block) if klass.is_a? Symbol use_symbol(Faraday::Middleware, klass, *args, &block) else @@ -234,7 +236,7 @@ def is_adapter?(klass) # rubocop:disable Naming/PredicateName klass.ancestors.include?(Faraday::Adapter) end - def use_symbol(mod, key, *args, &block) + ruby2_keywords def use_symbol(mod, key, *args, &block) use(mod.lookup_middleware(key), *args, &block) end diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index b9882054d..3cd77dd96 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -193,4 +193,29 @@ class Broken < Faraday::Middleware end end end + + context 'when middleware is added with arguments' do + let(:conn) { Faraday::Connection.new {} } + + class Dog < Faraday::Middleware + attr_accessor :name + def initialize(app, name) + super(app) + @name = name + end + end + class Cat < Faraday::Middleware + attr_accessor :name + def initialize(app, name:) + super(app) + @name = name + end + end + it 'adds a handler to construct middleware with options passed to use' do + subject.use Dog, 'Rex' + expect(subject.handlers.find { |handler| handler == Dog }.build.name).to eq('Rex') + subject.use Cat, name: 'Felix' + expect(subject.handlers.find { |handler| handler == Cat }.build.name).to eq('Felix') + end + end end From 980a98b978a99fe35ebc51a4fb4e17080f6eab7e Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Mon, 4 May 2020 11:48:56 +0100 Subject: [PATCH 02/14] Replace inline ruby2_keywords with the gem --- faraday.gemspec | 1 + lib/faraday/dependency_loader.rb | 2 +- lib/faraday/rack_builder.rb | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/faraday.gemspec b/faraday.gemspec index c72bd9275..2212e9811 100644 --- a/faraday.gemspec +++ b/faraday.gemspec @@ -19,6 +19,7 @@ Gem::Specification.new do |spec| spec.required_ruby_version = '>= 2.4' spec.add_dependency 'multipart-post', '>= 1.2', '< 3' + spec.add_dependency 'ruby2_keywords' files = %w[CHANGELOG.md LICENSE.md README.md Rakefile examples lib spec] spec.files = `git ls-files -z #{files.join(' ')}`.split("\0") diff --git a/lib/faraday/dependency_loader.rb b/lib/faraday/dependency_loader.rb index 1d58f4d1e..3f1708f8c 100644 --- a/lib/faraday/dependency_loader.rb +++ b/lib/faraday/dependency_loader.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -def ruby2_keywords(*) end if RUBY_VERSION < '2.7' +require 'ruby2_keywords' module Faraday # DependencyLoader helps Faraday adapters and middleware load dependencies. diff --git a/lib/faraday/rack_builder.rb b/lib/faraday/rack_builder.rb index 3e0fa5019..0654e8102 100644 --- a/lib/faraday/rack_builder.rb +++ b/lib/faraday/rack_builder.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true -def ruby2_keywords(*) end if RUBY_VERSION < '2.7' - +require 'ruby2_keywords' require 'faraday/adapter_registry' module Faraday From 1538b70a63ae3ad5848a32f7c83603cd5e41acec Mon Sep 17 00:00:00 2001 From: Daniel George Holz Date: Mon, 4 May 2020 14:56:24 +0100 Subject: [PATCH 03/14] Decrease the scope of stub middleware classes Co-authored-by: Olle Jonsson --- spec/faraday/rack_builder_spec.rb | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index 3cd77dd96..9f7b0b8d6 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -197,18 +197,23 @@ class Broken < Faraday::Middleware context 'when middleware is added with arguments' do let(:conn) { Faraday::Connection.new {} } - class Dog < Faraday::Middleware - attr_accessor :name - def initialize(app, name) - super(app) - @name = name + let(:dog_middleware_class) do + Class.new(Faraday::Middleware) do + attr_accessor :name + def initialize(app, name) + super(app) + @name = name + end end end - class Cat < Faraday::Middleware - attr_accessor :name - def initialize(app, name:) - super(app) - @name = name + + let(:cat_middleware_class) do + Class.new(Faraday::Middleware) do + attr_accessor :name + def initialize(app, name:) + super(app) + @name = name + end end end it 'adds a handler to construct middleware with options passed to use' do From 06429905d4a371ba839ea9cc60673d6b09903ef5 Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Mon, 4 May 2020 16:25:22 +0100 Subject: [PATCH 04/14] Actually use the stub middleware classes in the test... --- spec/faraday/rack_builder_spec.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index 9f7b0b8d6..af1a50c6c 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -197,7 +197,7 @@ class Broken < Faraday::Middleware context 'when middleware is added with arguments' do let(:conn) { Faraday::Connection.new {} } - let(:dog_middleware_class) do + let(:dog_middleware) do Class.new(Faraday::Middleware) do attr_accessor :name def initialize(app, name) @@ -207,7 +207,7 @@ def initialize(app, name) end end - let(:cat_middleware_class) do + let(:cat_middleware) do Class.new(Faraday::Middleware) do attr_accessor :name def initialize(app, name:) @@ -217,10 +217,10 @@ def initialize(app, name:) end end it 'adds a handler to construct middleware with options passed to use' do - subject.use Dog, 'Rex' - expect(subject.handlers.find { |handler| handler == Dog }.build.name).to eq('Rex') - subject.use Cat, name: 'Felix' - expect(subject.handlers.find { |handler| handler == Cat }.build.name).to eq('Felix') + subject.use dog_middleware, 'Rex' + expect(subject.handlers.find { |handler| handler == dog_middleware }.build.name).to eq('Rex') + subject.use cat_middleware, name: 'Felix' + expect(subject.handlers.find { |handler| handler == cat_middleware }.build.name).to eq('Felix') end end end From 9e759f0532a6aba410ad311486f8af4197794804 Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 8 May 2020 14:16:59 +0100 Subject: [PATCH 05/14] Check for deprecation warnings in RackBuilder middleware spec --- spec/faraday/rack_builder_spec.rb | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index af1a50c6c..f620c6685 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -206,6 +206,9 @@ def initialize(app, name) end end end + let(:dog) do + subject.handlers.find { |handler| handler == dog_middleware }.build + end let(:cat_middleware) do Class.new(Faraday::Middleware) do @@ -216,11 +219,22 @@ def initialize(app, name:) end end end + let(:cat) do + subject.handlers.find { |handler| handler == cat_middleware }.build + end + it 'adds a handler to construct middleware with options passed to use' do subject.use dog_middleware, 'Rex' - expect(subject.handlers.find { |handler| handler == dog_middleware }.build.name).to eq('Rex') + expect { dog }.to_not output( + /warning: Using the last argument as keyword parameters is deprecated/ + ).to_stderr + expect(dog.name).to eq('Rex') + subject.use cat_middleware, name: 'Felix' - expect(subject.handlers.find { |handler| handler == cat_middleware }.build.name).to eq('Felix') + expect { cat }.to_not output( + /warning: Using the last argument as keyword parameters is deprecated/ + ).to_stderr + expect(cat.name).to eq('Felix') end end end From e8f936410d1b2f76001afab53ca7cb24881e3c2d Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 8 May 2020 15:43:03 +0100 Subject: [PATCH 06/14] Only check for warning for middleware with named args --- spec/faraday/rack_builder_spec.rb | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index f620c6685..aec6b91ce 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -194,13 +194,13 @@ class Broken < Faraday::Middleware end end - context 'when middleware is added with arguments' do + context 'when middleware is added with named arguments' do let(:conn) { Faraday::Connection.new {} } let(:dog_middleware) do Class.new(Faraday::Middleware) do attr_accessor :name - def initialize(app, name) + def initialize(app, name:) super(app) @name = name end @@ -210,31 +210,12 @@ def initialize(app, name) subject.handlers.find { |handler| handler == dog_middleware }.build end - let(:cat_middleware) do - Class.new(Faraday::Middleware) do - attr_accessor :name - def initialize(app, name:) - super(app) - @name = name - end - end - end - let(:cat) do - subject.handlers.find { |handler| handler == cat_middleware }.build - end - it 'adds a handler to construct middleware with options passed to use' do - subject.use dog_middleware, 'Rex' + subject.use dog_middleware, name: 'Rex' expect { dog }.to_not output( /warning: Using the last argument as keyword parameters is deprecated/ ).to_stderr expect(dog.name).to eq('Rex') - - subject.use cat_middleware, name: 'Felix' - expect { cat }.to_not output( - /warning: Using the last argument as keyword parameters is deprecated/ - ).to_stderr - expect(cat.name).to eq('Felix') end end end From b46f64dd27e6f2d7ea588eedf1282a32d90d6d7d Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 8 May 2020 15:48:21 +0100 Subject: [PATCH 07/14] Prevent kwargs warnings when building Request middleware --- lib/faraday/rack_builder.rb | 2 +- spec/faraday/rack_builder_spec.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/faraday/rack_builder.rb b/lib/faraday/rack_builder.rb index 0654e8102..6e33fd4de 100644 --- a/lib/faraday/rack_builder.rb +++ b/lib/faraday/rack_builder.rb @@ -100,7 +100,7 @@ def locked? end end - def request(key, *args, &block) + ruby2_keywords def request(key, *args, &block) use_symbol(Faraday::Request, key, *args, &block) end diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index aec6b91ce..8ebc15218 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -218,4 +218,31 @@ def initialize(app, name:) expect(dog.name).to eq('Rex') end end + + context 'when a request adapter is added with named arguments' do + let(:conn) { Faraday::Connection.new {} } + + let(:cat_request) do + Class.new(Faraday::Request) do + attr_accessor :name + def initialize(app, name:) + super(app) + @name = name + end + end + end + let(:cat) do + subject.handlers.find { |handler| handler == cat_request }.build + end + + it 'adds a handler to construct request adapter with options passed to request' do + skip 'still raising last argument kwarg deprecation warnings' + Faraday::Request.register_middleware cat_request: cat_request + subject.request :cat_request, name: 'Felix' + expect { cat }.to_not output( + /warning: Using the last argument as keyword parameters is deprecated/ + ).to_stderr + expect(cat.name).to eq('Felix') + end + end end From c858c470f7266f89ee28a8151392ed06bade26c7 Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 8 May 2020 15:48:30 +0100 Subject: [PATCH 08/14] Prevent kwargs warnings when building Response middleware --- lib/faraday/rack_builder.rb | 2 +- spec/faraday/rack_builder_spec.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/faraday/rack_builder.rb b/lib/faraday/rack_builder.rb index 6e33fd4de..96556f50f 100644 --- a/lib/faraday/rack_builder.rb +++ b/lib/faraday/rack_builder.rb @@ -104,7 +104,7 @@ def locked? use_symbol(Faraday::Request, key, *args, &block) end - def response(key, *args, &block) + ruby2_keywords def response(key, *args, &block) use_symbol(Faraday::Response, key, *args, &block) end diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index 8ebc15218..67ed10d8b 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -245,4 +245,30 @@ def initialize(app, name:) expect(cat.name).to eq('Felix') end end + + context 'when a response adapter is added with named arguments' do + let(:conn) { Faraday::Connection.new {} } + + let(:fish_response) do + Class.new(Faraday::Response::Middleware) do + attr_accessor :name + def initialize(app, name:) + super(app) + @name = name + end + end + end + let(:fish) do + subject.handlers.find { |handler| handler == fish_response }.build + end + + it 'adds a handler to construct response adapter with options passed to response' do + Faraday::Response.register_middleware fish_response: fish_response + subject.response :fish_response, name: 'Bubbles' + expect { fish }.to_not output( + /warning: Using the last argument as keyword parameters is deprecated/ + ).to_stderr + expect(fish.name).to eq('Bubbles') + end + end end From 8cd00a516db0ab6bfe0b2f116d8218d6d3ffa67c Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 8 May 2020 16:33:07 +0100 Subject: [PATCH 09/14] Prevent kwargs warnings when building Adapter --- lib/faraday/rack_builder.rb | 2 +- spec/faraday/rack_builder_spec.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/faraday/rack_builder.rb b/lib/faraday/rack_builder.rb index 96556f50f..e2d1cacd1 100644 --- a/lib/faraday/rack_builder.rb +++ b/lib/faraday/rack_builder.rb @@ -108,7 +108,7 @@ def locked? use_symbol(Faraday::Response, key, *args, &block) end - def adapter(klass = NO_ARGUMENT, *args, &block) + ruby2_keywords def adapter(klass = NO_ARGUMENT, *args, &block) return @adapter if klass == NO_ARGUMENT klass = Faraday::Adapter.lookup_middleware(klass) if klass.is_a?(Symbol) diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index 67ed10d8b..8994a878c 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -271,4 +271,30 @@ def initialize(app, name:) expect(fish.name).to eq('Bubbles') end end + + context 'when a plain adapter is added with named arguments' do + let(:conn) { Faraday::Connection.new {} } + + let(:rabbit_adapter) do + Class.new(Faraday::Adapter) do + attr_accessor :name + def initialize(app, name:) + super(app) + @name = name + end + end + end + let(:rabbit) do + subject.adapter.build + end + + it 'adds a handler to construct adapter with options passed to adapter' do + Faraday::Adapter.register_middleware rabbit_adapter: rabbit_adapter + subject.adapter :rabbit_adapter, name: 'Thumper' + expect { rabbit }.to_not output( + /warning: Using the last argument as keyword parameters is deprecated/ + ).to_stderr + expect(rabbit.name).to eq('Thumper') + end + end end From e40a305dff688ce4f5097c290d86b83b3b7a1849 Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 8 May 2020 16:49:16 +0100 Subject: [PATCH 10/14] Prevent kwargs warnings when building inserted handler --- lib/faraday/rack_builder.rb | 2 +- spec/faraday/rack_builder_spec.rb | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/faraday/rack_builder.rb b/lib/faraday/rack_builder.rb index e2d1cacd1..7661d015c 100644 --- a/lib/faraday/rack_builder.rb +++ b/lib/faraday/rack_builder.rb @@ -117,7 +117,7 @@ def locked? ## methods to push onto the various positions in the stack: - def insert(index, *args, &block) + ruby2_keywords def insert(index, *args, &block) raise_if_locked index = assert_index(index) handler = self.class::Handler.new(*args, &block) diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index 8994a878c..3add06210 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -297,4 +297,28 @@ def initialize(app, name:) expect(rabbit.name).to eq('Thumper') end end + + context 'when handlers are directly added or updated' do + let(:conn) { Faraday::Connection.new {} } + + let(:rock_handler) do + Class.new do + attr_accessor :name + def initialize(app, name:) + @name = name + end + end + end + let(:rock) do + subject.handlers.find { |handler| handler == rock_handler }.build + end + + it 'adds a handler to construct adapter with options passed to insert' do + subject.insert 0, rock_handler, name: 'Stony' + expect { rock }.to_not output( + /warning: Using the last argument as keyword parameters is deprecated/ + ).to_stderr + expect(rock.name).to eq('Stony') + end + end end From 6d41c57d33db9a4e1791fafce2be59fe6c69b87c Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 8 May 2020 17:05:17 +0100 Subject: [PATCH 11/14] Prevent kwargs warnings when building handler inserted after another --- lib/faraday/rack_builder.rb | 2 +- spec/faraday/rack_builder_spec.rb | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/faraday/rack_builder.rb b/lib/faraday/rack_builder.rb index 7661d015c..8f6fa43ea 100644 --- a/lib/faraday/rack_builder.rb +++ b/lib/faraday/rack_builder.rb @@ -126,7 +126,7 @@ def locked? alias insert_before insert - def insert_after(index, *args, &block) + ruby2_keywords def insert_after(index, *args, &block) index = assert_index(index) insert(index + 1, *args, &block) end diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index 3add06210..593315f38 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -320,5 +320,13 @@ def initialize(app, name:) ).to_stderr expect(rock.name).to eq('Stony') end + + it 'adds a handler with options passed to insert_after' do + subject.insert_after 0, rock_handler, name: 'Rocky' + expect { rock }.to_not output( + /warning: Using the last argument as keyword parameters is deprecated/ + ).to_stderr + expect(rock.name).to eq('Rocky') + end end end From 385cd6dcbd72470305d97b039c3a5dea460c875e Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 8 May 2020 17:10:13 +0100 Subject: [PATCH 12/14] Prevent kwargs warnings when building swapped-in handler --- lib/faraday/rack_builder.rb | 2 +- spec/faraday/rack_builder_spec.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/faraday/rack_builder.rb b/lib/faraday/rack_builder.rb index 8f6fa43ea..33ba562c3 100644 --- a/lib/faraday/rack_builder.rb +++ b/lib/faraday/rack_builder.rb @@ -131,7 +131,7 @@ def locked? insert(index + 1, *args, &block) end - def swap(index, *args, &block) + ruby2_keywords def swap(index, *args, &block) raise_if_locked index = assert_index(index) @handlers.delete_at(index) diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index 593315f38..3f0d68db3 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -328,5 +328,14 @@ def initialize(app, name:) ).to_stderr expect(rock.name).to eq('Rocky') end + + it 'adds a handler with options passed to swap' do + subject.insert 0, rock_handler, name: 'Flint' + subject.swap 0, rock_handler, name: 'Chert' + expect { rock }.to_not output( + /warning: Using the last argument as keyword parameters is deprecated/ + ).to_stderr + expect(rock.name).to eq('Chert') + end end end From c97b62fb8d46743064a75dd73df8c39c56bb7c59 Mon Sep 17 00:00:00 2001 From: Daniel Holz Date: Fri, 8 May 2020 17:27:30 +0100 Subject: [PATCH 13/14] Let Rubocop know I'm intentionally not using the app argument for stub classes in spec --- spec/faraday/rack_builder_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index 3f0d68db3..ee62c462e 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -304,7 +304,7 @@ def initialize(app, name:) let(:rock_handler) do Class.new do attr_accessor :name - def initialize(app, name:) + def initialize(_app, name:) @name = name end end From faadb910105ad2b2621c3c8d636931599b2a68c1 Mon Sep 17 00:00:00 2001 From: Olle Jonsson Date: Fri, 15 May 2020 00:10:13 +0200 Subject: [PATCH 14/14] Spec fix: derive test middleware from Faraday::Middleware We don't have a specific base class for Request middleware like we have for response ones (Faraday::Response::Middleware), so cat_request should probably inherit from Faraday::Middleware instead. --- spec/faraday/rack_builder_spec.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spec/faraday/rack_builder_spec.rb b/spec/faraday/rack_builder_spec.rb index ee62c462e..28978291f 100644 --- a/spec/faraday/rack_builder_spec.rb +++ b/spec/faraday/rack_builder_spec.rb @@ -223,7 +223,7 @@ def initialize(app, name:) let(:conn) { Faraday::Connection.new {} } let(:cat_request) do - Class.new(Faraday::Request) do + Class.new(Faraday::Middleware) do attr_accessor :name def initialize(app, name:) super(app) @@ -236,7 +236,6 @@ def initialize(app, name:) end it 'adds a handler to construct request adapter with options passed to request' do - skip 'still raising last argument kwarg deprecation warnings' Faraday::Request.register_middleware cat_request: cat_request subject.request :cat_request, name: 'Felix' expect { cat }.to_not output(