From 1677d51d9f4f4932fc62941c2077df6bd1e447dc Mon Sep 17 00:00:00 2001 From: "Ben Sheldon [he/him]" Date: Mon, 29 Jan 2024 17:02:22 -0800 Subject: [PATCH 1/5] Print warning when unknown options are passed to Trilogy#initialize --- contrib/ruby/lib/trilogy.rb | 12 ++++++++++++ contrib/ruby/test/client_test.rb | 2 ++ 2 files changed, 14 insertions(+) diff --git a/contrib/ruby/lib/trilogy.rb b/contrib/ruby/lib/trilogy.rb index bde8a033..8c89d640 100644 --- a/contrib/ruby/lib/trilogy.rb +++ b/contrib/ruby/lib/trilogy.rb @@ -7,7 +7,19 @@ require "trilogy/encoding" class Trilogy + VALID_OPTIONS = %i[ + host port path database username password encoding + ssl ssl_mode tls_min_version read_timeout write_timeout connect_timeout + multi_statement + ].freeze + def initialize(options = {}) + original_options = options.dup + options = VALID_OPTIONS.each_with_object({}) do |key, hash| + hash[key] = original_options.delete(key) if original_options.key?(key) + end + $stderr.puts "WARNING: Unknown Trilogy options: #{original_options.keys.join(", ")}" unless original_options.empty? + options[:port] = options[:port].to_i if options[:port] mysql_encoding = options[:encoding] || "utf8mb4" encoding = Trilogy::Encoding.find(mysql_encoding) diff --git a/contrib/ruby/test/client_test.rb b/contrib/ruby/test/client_test.rb index 269e2269..14a28f72 100644 --- a/contrib/ruby/test/client_test.rb +++ b/contrib/ruby/test/client_test.rb @@ -71,6 +71,8 @@ def test_trilogy_connection_options tls_min_version: 3, } assert_equal expected_connection_options, client.connection_options + + assert_output('', /WARNING/) { new_tcp_client({ unknown: "key" }) } end def test_trilogy_ping From 6e2f348491e47656c71b31ac1559e6bf955be622 Mon Sep 17 00:00:00 2001 From: "Ben Sheldon [he/him]" Date: Mon, 29 Jan 2024 17:50:58 -0800 Subject: [PATCH 2/5] Don't transform the options --- contrib/ruby/lib/trilogy.rb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/contrib/ruby/lib/trilogy.rb b/contrib/ruby/lib/trilogy.rb index 8c89d640..c21d8b23 100644 --- a/contrib/ruby/lib/trilogy.rb +++ b/contrib/ruby/lib/trilogy.rb @@ -9,16 +9,15 @@ class Trilogy VALID_OPTIONS = %i[ host port path database username password encoding - ssl ssl_mode tls_min_version read_timeout write_timeout connect_timeout + ssl ssl_mode ssl_cipher ssl_ca ssl_capath ssl_key ssl_cert + tls_min_version tls_max_version tls_ciphersuites + read_timeout write_timeout connect_timeout multi_statement ].freeze def initialize(options = {}) - original_options = options.dup - options = VALID_OPTIONS.each_with_object({}) do |key, hash| - hash[key] = original_options.delete(key) if original_options.key?(key) - end - $stderr.puts "WARNING: Unknown Trilogy options: #{original_options.keys.join(", ")}" unless original_options.empty? + invalid_keys = options.keys - VALID_OPTIONS + $stderr.puts "WARNING: Unknown Trilogy options: #{invalid_keys.keys.join(", ")}" unless original_options.empty? options[:port] = options[:port].to_i if options[:port] mysql_encoding = options[:encoding] || "utf8mb4" From 9802567451dce8ee5bd22603e37d4d63e7f0917a Mon Sep 17 00:00:00 2001 From: "Ben Sheldon [he/him]" Date: Mon, 29 Jan 2024 17:51:33 -0800 Subject: [PATCH 3/5] Fix variable name --- contrib/ruby/lib/trilogy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/ruby/lib/trilogy.rb b/contrib/ruby/lib/trilogy.rb index c21d8b23..b95dea17 100644 --- a/contrib/ruby/lib/trilogy.rb +++ b/contrib/ruby/lib/trilogy.rb @@ -17,7 +17,7 @@ class Trilogy def initialize(options = {}) invalid_keys = options.keys - VALID_OPTIONS - $stderr.puts "WARNING: Unknown Trilogy options: #{invalid_keys.keys.join(", ")}" unless original_options.empty? + $stderr.puts "WARNING: Unknown Trilogy options: #{invalid_keys.keys.join(", ")}" unless invalid_keys.empty? options[:port] = options[:port].to_i if options[:port] mysql_encoding = options[:encoding] || "utf8mb4" From 76701e5d8815246dac0e7683ea2cf219c5f28eec Mon Sep 17 00:00:00 2001 From: "Ben Sheldon [he/him]" Date: Mon, 29 Jan 2024 17:53:12 -0800 Subject: [PATCH 4/5] Fix variable --- contrib/ruby/lib/trilogy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/ruby/lib/trilogy.rb b/contrib/ruby/lib/trilogy.rb index b95dea17..211c0358 100644 --- a/contrib/ruby/lib/trilogy.rb +++ b/contrib/ruby/lib/trilogy.rb @@ -17,7 +17,7 @@ class Trilogy def initialize(options = {}) invalid_keys = options.keys - VALID_OPTIONS - $stderr.puts "WARNING: Unknown Trilogy options: #{invalid_keys.keys.join(", ")}" unless invalid_keys.empty? + $stderr.puts "WARNING: Unknown Trilogy options: #{invalid_keys.join(", ")}" unless invalid_keys.empty? options[:port] = options[:port].to_i if options[:port] mysql_encoding = options[:encoding] || "utf8mb4" From bdb0aa3c438cf78f99e246947f3d96f549220eac Mon Sep 17 00:00:00 2001 From: "Ben Sheldon [he/him]" Date: Mon, 29 Jan 2024 18:13:38 -0800 Subject: [PATCH 5/5] Use #inspect --- contrib/ruby/lib/trilogy.rb | 2 +- contrib/ruby/test/client_test.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/ruby/lib/trilogy.rb b/contrib/ruby/lib/trilogy.rb index 211c0358..cee8b673 100644 --- a/contrib/ruby/lib/trilogy.rb +++ b/contrib/ruby/lib/trilogy.rb @@ -17,7 +17,7 @@ class Trilogy def initialize(options = {}) invalid_keys = options.keys - VALID_OPTIONS - $stderr.puts "WARNING: Unknown Trilogy options: #{invalid_keys.join(", ")}" unless invalid_keys.empty? + $stderr.puts "[WARNING] Unknown Trilogy options: #{invalid_keys.map(&:inspect).join(", ")}" unless invalid_keys.empty? options[:port] = options[:port].to_i if options[:port] mysql_encoding = options[:encoding] || "utf8mb4" diff --git a/contrib/ruby/test/client_test.rb b/contrib/ruby/test/client_test.rb index 14a28f72..0874e382 100644 --- a/contrib/ruby/test/client_test.rb +++ b/contrib/ruby/test/client_test.rb @@ -71,8 +71,8 @@ def test_trilogy_connection_options tls_min_version: 3, } assert_equal expected_connection_options, client.connection_options - - assert_output('', /WARNING/) { new_tcp_client({ unknown: "key" }) } + + assert_output('', /\[WARNING\] Unknown Trilogy options: :foo, "bar"/) { new_tcp_client({ foo: "", "bar" => "" }) } end def test_trilogy_ping