1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Dont swallow errors when bad alias_method

This commit is contained in:
Arthur Neves 2014-06-16 18:25:09 -04:00
parent a1bd00d5be
commit c965de396f
No known key found for this signature in database
GPG key ID: 04A390FB1E433E17
3 changed files with 27 additions and 10 deletions

View file

@ -1,3 +1,8 @@
* Dont swallow errors on compute_type when having a bad alias_method on
a class.
*arthurnn*
* Assume numeric types have changed if they were assigned to a value that
would fail numericality validation, regardless of the old value. Previously
this would only occur if the old value was 0.

View file

@ -120,14 +120,8 @@ module ActiveRecord
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)

View file

@ -1347,14 +1347,32 @@ class BasicsTest < ActiveRecord::TestCase
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