From b8666608bdbd672d1f5f57913254bf27e3d52004 Mon Sep 17 00:00:00 2001 From: Lucas Carlson Date: Fri, 14 Nov 2008 00:49:10 -0800 Subject: [PATCH] Adding a :cast option to text_field in order to facilitate displaying data in a form in a more human friendly form. For example: text_field(:shopping_cart, :price, :cast => lambda {|v| number_to_currency v}) => --- actionpack/lib/action_view/helpers/form_helper.rb | 6 +++++- actionpack/test/template/form_helper_test.rb | 3 +++ 2 files changed, 8 insertions(+), 1 deletions(-) diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb index 621e294..fb8b5bc 100644 --- a/actionpack/lib/action_view/helpers/form_helper.rb +++ b/actionpack/lib/action_view/helpers/form_helper.rb @@ -344,6 +344,9 @@ module ActionView # text_field(:post, :title, :class => "create_input") # # => # + # text_field(:shopping_cart, :price, :cast => lambda {|v| number_to_currency v}) + # # => + # # text_field(:session, :user, :onchange => "if $('session[user]').value == 'admin' { alert('Your login can not be admin!'); }") # # => # @@ -556,8 +559,9 @@ module ActionView if field_type == "hidden" options.delete("size") end + caster = options.delete("cast") || lambda {|o| o} options["type"] = field_type - options["value"] ||= value_before_type_cast(object) unless field_type == "file" + options["value"] ||= caster.call(value_before_type_cast(object)) unless field_type == "file" options["value"] &&= html_escape(options["value"]) add_default_name_and_id(options) tag("input", options) diff --git a/actionpack/test/template/form_helper_test.rb b/actionpack/test/template/form_helper_test.rb index 52e8bf3..a679182 100644 --- a/actionpack/test/template/form_helper_test.rb +++ b/actionpack/test/template/form_helper_test.rb @@ -93,6 +93,9 @@ class FormHelperTest < ActionView::TestCase '', text_field("post", "title") ) assert_dom_equal( + '', text_field("post", "title", :cast => lambda {|v| v.upcase }) + ) + assert_dom_equal( '', password_field("post", "title") ) assert_dom_equal( -- 1.5.6