From 40db515e913787829b54700aef34c6ca0d2f9667 Mon Sep 17 00:00:00 2001 From: Yasuo Honda Date: Tue, 2 Feb 2021 21:25:43 +0900 Subject: [PATCH] Address `warning: Passing only keyword arguments` This pull request addresses the following warnings enabled since ruby/ruby#4070 * Warnings without this fix 1 ``` % ruby -v ruby 3.1.0dev (2021-02-01T10:54:21Z master 1cdae49d39) [x86_64-darwin20] % bin/test test/cases/arel/visitors/sqlite_test.rb:36 ... snip ... /Users/yahonda/src/github.com/rails/rails/activerecord/test/cases/arel/support/fake_record.rb:98: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). . Finished in 0.003538s, 2261.1645 runs/s, 2543.8101 assertions/s. 8 runs, 9 assertions, 0 failures, 0 errors, 0 skips % ``` * Warnings without this fix 2 ```ruby % ruby -v ruby 3.1.0dev (2021-02-01T10:54:21Z master 1cdae49d39) [x86_64-darwin20] % bin/test test/cases/type/adapter_specific_registry_test.rb Using sqlite3 Run options: --seed 53175 ......./Users/yahonda/src/github.com/rails/rails/activerecord/test/cases/type/adapter_specific_registry_test.rb:126: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). /Users/yahonda/src/github.com/rails/rails/activemodel/lib/active_model/type/registry.rb:18: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). /Users/yahonda/src/github.com/rails/rails/activerecord/test/cases/type/adapter_specific_registry_test.rb:130: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). /Users/yahonda/src/github.com/rails/rails/activemodel/lib/active_model/type/registry.rb:18: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). .../Users/yahonda/src/github.com/rails/rails/activerecord/test/cases/type/adapter_specific_registry_test.rb:85: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). /Users/yahonda/src/github.com/rails/rails/activemodel/lib/active_model/type/registry.rb:18: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). /Users/yahonda/src/github.com/rails/rails/activerecord/test/cases/type/adapter_specific_registry_test.rb:86: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). /Users/yahonda/src/github.com/rails/rails/activemodel/lib/active_model/type/registry.rb:18: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). . Finished in 0.011424s, 962.8852 runs/s, 2450.9804 assertions/s. 11 runs, 28 assertions, 0 failures, 0 errors, 0 skips % ``` * Warnings without this fix 3 ```ruby $ cd actionview $ bin/test test/template/url_helper_test.rb Run options: --seed 27105 ........................../home/yahonda/src/github.com/rails/rails/actionview/test/template/url_helper_test.rb:88: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). .............................../home/yahonda/src/github.com/rails/rails/actionview/test/template/url_helper_test.rb:94: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). ..................................................../home/yahonda/src/github.com/rails/rails/actionview/test/template/url_helper_test.rb:71: warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3.2. Please use a Hash literal like .new({k: v}) instead of .new(k: v). ...................... Finished in 0.305066s, 429.4159 runs/s, 580.2032 assertions/s. 131 runs, 177 assertions, 0 failures, 0 errors, 0 skips $ ``` Refer: ruby/ruby#4070 https://bugs.ruby-lang.org/issues/16806 Co-authored-by: Ryuta Kamizono --- actionview/test/template/url_helper_test.rb | 6 +++--- .../test/cases/arel/support/fake_record.rb | 2 +- .../cases/type/adapter_specific_registry_test.rb | 14 ++++++++++++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/actionview/test/template/url_helper_test.rb b/actionview/test/template/url_helper_test.rb index bd38a67724..35fe3749ca 100644 --- a/actionview/test/template/url_helper_test.rb +++ b/actionview/test/template/url_helper_test.rb @@ -68,7 +68,7 @@ class UrlHelperTest < ActiveSupport::TestCase def test_url_for_with_back referer = "http://www.example.com/referer" - @controller = Struct.new(:request).new(Struct.new(:env).new("HTTP_REFERER" => referer)) + @controller = Struct.new(:request).new(Struct.new(:env).new({ "HTTP_REFERER" => referer })) assert_equal "http://www.example.com/referer", url_for(:back) end @@ -85,13 +85,13 @@ class UrlHelperTest < ActiveSupport::TestCase def test_url_for_with_back_and_javascript_referer referer = "javascript:alert(document.cookie)" - @controller = Struct.new(:request).new(Struct.new(:env).new("HTTP_REFERER" => referer)) + @controller = Struct.new(:request).new(Struct.new(:env).new({ "HTTP_REFERER" => referer })) assert_equal "javascript:history.back()", url_for(:back) end def test_url_for_with_invalid_referer referer = "THIS IS NOT A URL" - @controller = Struct.new(:request).new(Struct.new(:env).new("HTTP_REFERER" => referer)) + @controller = Struct.new(:request).new(Struct.new(:env).new({ "HTTP_REFERER" => referer })) assert_equal "javascript:history.back()", url_for(:back) end diff --git a/activerecord/test/cases/arel/support/fake_record.rb b/activerecord/test/cases/arel/support/fake_record.rb index 864f47e245..205bdeb41b 100644 --- a/activerecord/test/cases/arel/support/fake_record.rb +++ b/activerecord/test/cases/arel/support/fake_record.rb @@ -89,7 +89,7 @@ module FakeRecord end class ConnectionPool - class Spec < Struct.new(:config) + class Spec < Struct.new(:adapter, keyword_init: true) end attr_reader :spec, :connection diff --git a/activerecord/test/cases/type/adapter_specific_registry_test.rb b/activerecord/test/cases/type/adapter_specific_registry_test.rb index b58bdd5549..1093c4feca 100644 --- a/activerecord/test/cases/type/adapter_specific_registry_test.rb +++ b/activerecord/test/cases/type/adapter_specific_registry_test.rb @@ -76,7 +76,6 @@ module ActiveRecord end test "construct args are passed to the type" do - type = Struct.new(:args) registry = Type::AdapterSpecificRegistry.new registry.register(:foo, type) @@ -117,7 +116,6 @@ module ActiveRecord test "registering adapter specific modifiers" do decoration = Struct.new(:value) - type = Struct.new(:args) registry = Type::AdapterSpecificRegistry.new registry.register(:foo, type) registry.add_modifier({ array: true }, decoration, adapter: :postgresql) @@ -131,5 +129,17 @@ module ActiveRecord registry.lookup(:foo, array: true, adapter: :sqlite3) ) end + + TYPE = Class.new do + attr_reader :args + + def initialize(args = nil) + @args = args + end + + def ==(other) self.args == other.args end + end + + private def type; TYPE end end end