Make InstanceTagMethods#value_before_type_cast raise if the model don't respond to attr_before_type_cast or attr method

[#3374] [#5471 state:committed]
This commit is contained in:
Santiago Pastorino
2010-08-27 01:16:27 -03:00
parent e8a083ecc2
commit 3ba8e31005
2 changed files with 21 additions and 3 deletions

View File

@@ -1006,9 +1006,14 @@ module ActionView
def value_before_type_cast(object, method_name)
unless object.nil?
object.respond_to?(method_name) ?
object.send(method_name) :
object.send(method_name + "_before_type_cast")
if object.respond_to?(method_name)
object.send(method_name)
# FIXME: this is AR dependent
elsif object.respond_to?(method_name + "_before_type_cast")
object.send(method_name + "_before_type_cast")
else
raise NoMethodError, "Model #{object.class} does not respond to #{method_name}"
end
end
end

View File

@@ -12,6 +12,8 @@ class FormHelperTest < ActionView::TestCase
def name
"Santiago"
end
attr_writer :language
end
def form_for(*)
@@ -257,6 +259,17 @@ class FormHelperTest < ActionView::TestCase
)
end
def test_text_field_on_a_model_with_undefined_attr_reader
@developer = Developer.new
@developer.language = 'ruby'
begin
text_field("developer", "language")
rescue NoMethodError => error
message = error.message
end
assert_equal "Model #{Developer} does not respond to language", message
end
def test_check_box
assert_dom_equal(
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',