From 542253cb2d1c3154f0aa7d77c3f181679d1120b8 Mon Sep 17 00:00:00 2001 From: Neil Shweky Date: Wed, 3 Aug 2022 17:55:27 -0400 Subject: [PATCH 1/3] RUBY-1595 Improve error reporting when symbol/string is passed as read preference --- lib/mongo/client.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mongo/client.rb b/lib/mongo/client.rb index 08856889fe..cc3e0de536 100644 --- a/lib/mongo/client.rb +++ b/lib/mongo/client.rb @@ -1576,7 +1576,7 @@ def validate_read!(option, opts) # for custom classes implementing key access ([]). # Instead reject common cases of strings and symbols. if read.is_a?(String) || read.is_a?(Symbol) - raise Error::InvalidReadOption.new(read, 'must be a hash') + raise Error::InvalidReadOption.new(read, 'the read preference should be specified as a hash: { mode: }.') end if mode = read[:mode] From 45af48cc74a3d1a74ab14c6a4ebe3529735f62b0 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 4 Aug 2022 11:35:12 -0400 Subject: [PATCH 2/3] tweak wording --- lib/mongo/client.rb | 2 +- lib/mongo/error/invalid_read_option.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mongo/client.rb b/lib/mongo/client.rb index cc3e0de536..25f289f4ea 100644 --- a/lib/mongo/client.rb +++ b/lib/mongo/client.rb @@ -1576,7 +1576,7 @@ def validate_read!(option, opts) # for custom classes implementing key access ([]). # Instead reject common cases of strings and symbols. if read.is_a?(String) || read.is_a?(Symbol) - raise Error::InvalidReadOption.new(read, 'the read preference should be specified as a hash: { mode: }.') + raise Error::InvalidReadOption.new(read, "the read preference must be specified as a hash: { mode: #{read.inspect} }") end if mode = read[:mode] diff --git a/lib/mongo/error/invalid_read_option.rb b/lib/mongo/error/invalid_read_option.rb index 7115022f23..f1115d1b2a 100644 --- a/lib/mongo/error/invalid_read_option.rb +++ b/lib/mongo/error/invalid_read_option.rb @@ -31,7 +31,7 @@ class InvalidReadOption < Error # # @since 2.6.0 def initialize(read_option, msg) - super("Invalid read option: #{read_option}: #{msg}") + super("Invalid read preference value: #{read_option.inspect}: #{msg}") end end end From 673b46f3ff0818b93d498cdc1e3d616f22b10a4a Mon Sep 17 00:00:00 2001 From: Neil Shweky Date: Thu, 4 Aug 2022 16:11:37 -0400 Subject: [PATCH 3/3] RUBY-1595 fix tests --- spec/mongo/client_construction_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/mongo/client_construction_spec.rb b/spec/mongo/client_construction_spec.rb index 5bc278beb4..24a2d8615c 100644 --- a/spec/mongo/client_construction_spec.rb +++ b/spec/mongo/client_construction_spec.rb @@ -1773,28 +1773,28 @@ expect do client = new_local_client_nmio(['127.0.0.1:27017'], :read => {:mode => :bogus}) - end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: {"mode"=>:bogus}: mode bogus is not one of recognized modes') + end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read preference value: {"mode"=>:bogus}: mode bogus is not one of recognized modes') end it 'rejects bogus read preference as string' do expect do client = new_local_client_nmio(['127.0.0.1:27017'], :read => {:mode => 'bogus'}) - end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: {"mode"=>"bogus"}: mode bogus is not one of recognized modes') + end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read preference value: {"mode"=>"bogus"}: mode bogus is not one of recognized modes') end it 'rejects read option specified as a string' do expect do client = new_local_client_nmio(['127.0.0.1:27017'], :read => 'primary') - end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: primary: must be a hash') + end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read preference value: "primary": the read preference must be specified as a hash: { mode: "primary" }') end it 'rejects read option specified as a symbol' do expect do client = new_local_client_nmio(['127.0.0.1:27017'], :read => :primary) - end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: primary: must be a hash') + end.to raise_error(Mongo::Error::InvalidReadOption, "Invalid read preference value: :primary: the read preference must be specified as a hash: { mode: :primary }") end end end