Compare commits

...

2 Commits

Author SHA1 Message Date
HoneyryderChuck
0633daaf8e Merge branch 'plugin-no-method-error' into 'master'
Fix error message when options method itself raises NoMethodError

See merge request os85/httpx!322
2024-01-18 22:36:42 +00:00
Earlopain
7dd06c5e87
Fix error message when options method itself raises MethodError
This would previously say that the option was unknown
2024-01-18 12:37:02 +01:00
2 changed files with 17 additions and 6 deletions

View File

@ -342,12 +342,11 @@ module HTTPX
defaults.each do |k, v|
next if v.nil?
begin
value = __send__(:"option_#{k}", v)
instance_variable_set(:"@#{k}", value)
rescue NoMethodError
raise Error, "unknown option: #{k}"
end
option_method_name = :"option_#{k}"
raise Error, "unknown option: #{k}" unless respond_to?(option_method_name)
value = __send__(option_method_name, v)
instance_variable_set(:"@#{k}", value)
end
end
end

View File

@ -10,6 +10,18 @@ class OptionsTest < Minitest::Test
assert ex.message == "unknown option: foo", ex.message
end
def test_options_no_method_error_during_validation
custom_opt_class = Class.new(Options) do
def option_foo(value)
raise TypeError, ":foo must be a Hash" unless value.is_a(Hash)
value
end
end
ex = assert_raises(NoMethodError) { custom_opt_class.new(foo: "bar") }
assert_match("undefined method `is_a'", ex.message)
end
def test_options_body
opt1 = Options.new
assert opt1.body.nil?, "body shouldn't be set by default"