提交 843b8c0b 编写于 作者: M Matthew Draper

Merge pull request #15762 from arthurnn/better_error_on_bad_alias_method

Dont swallow errors when bad alias_method
* Dont swallow errors on compute_type when having a bad alias_method on
a class.
*arthurnn*
* PostgreSQL invalid `uuid` are convert to nil.
*Abdelkader Boudih*
......
......@@ -151,14 +151,8 @@ def compute_type(type_name)
candidates << type_name
candidates.each do |candidate|
begin
constant = ActiveSupport::Dependencies.constantize(candidate)
return constant if candidate == constant.to_s
# We don't want to swallow NoMethodError < NameError errors
rescue NoMethodError
raise
rescue NameError
end
constant = ActiveSupport::Dependencies.safe_constantize(candidate)
return constant if candidate == constant.to_s
end
raise NameError.new("uninitialized constant #{candidates.first}", candidates.first)
......
......@@ -1347,14 +1347,32 @@ def test_compute_type_nonexistent_constant
end
def test_compute_type_no_method_error
ActiveSupport::Dependencies.stubs(:constantize).raises(NoMethodError)
ActiveSupport::Dependencies.stubs(:safe_constantize).raises(NoMethodError)
assert_raises NoMethodError do
ActiveRecord::Base.send :compute_type, 'InvalidModel'
end
end
def test_compute_type_on_undefined_method
error = nil
begin
Class.new(Author) do
alias_method :foo, :bar
end
rescue => e
error = e
end
ActiveSupport::Dependencies.stubs(:safe_constantize).raises(e)
exception = assert_raises NameError do
ActiveRecord::Base.send :compute_type, 'InvalidModel'
end
assert_equal error.message, exception.message
end
def test_compute_type_argument_error
ActiveSupport::Dependencies.stubs(:constantize).raises(ArgumentError)
ActiveSupport::Dependencies.stubs(:safe_constantize).raises(ArgumentError)
assert_raises ArgumentError do
ActiveRecord::Base.send :compute_type, 'InvalidModel'
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册