Skip to content

Commit

Permalink
Extract CheckBox
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaelfranca committed Jan 17, 2012
1 parent 8e8c6c3 commit f42e1db
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 40 deletions.
41 changes: 1 addition & 40 deletions actionpack/lib/action_view/helpers/form_helper.rb
Expand Up @@ -828,7 +828,7 @@ def text_area(object_name, method, options = {})
# # <input type="checkbox" class="eula_check" id="eula_accepted" name="eula[accepted]" value="yes" />
#
def check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
InstanceTag.new(object_name, method, self, options.delete(:object)).to_check_box_tag(options, checked_value, unchecked_value)
ActionView::Helpers::Tags::CheckBox.new(object_name, method, self, checked_value, unchecked_value, options).render
end

# Returns a radio button tag for accessing a specified attribute (identified by +method+) on an object
Expand Down Expand Up @@ -1009,28 +1009,6 @@ def to_radio_button_tag(tag_value, options = {})
tag("input", options)
end

def to_check_box_tag(options = {}, checked_value = "1", unchecked_value = "0")
options = options.stringify_keys
options["type"] = "checkbox"
options["value"] = checked_value
if options.has_key?("checked")
cv = options.delete "checked"
checked = cv == true || cv == "checked"
else
checked = self.class.check_box_checked?(value(object), checked_value)
end
options["checked"] = "checked" if checked
if options["multiple"]
add_default_name_and_id_for_value(checked_value, options)
options.delete("multiple")
else
add_default_name_and_id(options)
end
hidden = unchecked_value ? tag("input", "name" => options["name"], "type" => "hidden", "value" => unchecked_value, "disabled" => options["disabled"]) : ""
checkbox = tag("input", options)
hidden + checkbox
end

def to_boolean_select_tag(options = {})
options = options.stringify_keys
add_default_name_and_id(options)
Expand Down Expand Up @@ -1089,23 +1067,6 @@ def value_before_type_cast(object, method_name)
end
end

def check_box_checked?(value, checked_value)
case value
when TrueClass, FalseClass
value
when NilClass
false
when Integer
value != 0
when String
value == checked_value
when Array
value.include?(checked_value)
else
value.to_i != 0
end
end

def radio_button_checked?(value, checked_value)
value.to_s == checked_value.to_s
end
Expand Down
1 change: 1 addition & 0 deletions actionpack/lib/action_view/helpers/tags.rb
Expand Up @@ -8,6 +8,7 @@ module Tags
autoload :HiddenField, 'action_view/helpers/tags/hidden_field'
autoload :FileField, 'action_view/helpers/tags/file_field'
autoload :TextArea, 'action_view/helpers/tags/text_area'
autoload :CheckBox, 'action_view/helpers/tags/check_box'
end
end
end
60 changes: 60 additions & 0 deletions actionpack/lib/action_view/helpers/tags/check_box.rb
@@ -0,0 +1,60 @@
module ActionView
module Helpers
module Tags
class CheckBox < Base #:nodoc:
def initialize(object_name, method_name, template_object, checked_value, unchecked_value, options)
@checked_value = checked_value
@unchecked_value = unchecked_value
super(object_name, method_name, template_object, options)
end

def render
options = @options.stringify_keys
options["type"] = "checkbox"
options["value"] = @checked_value

if options.has_key?("checked")
cv = options.delete "checked"
checked = cv == true || cv == "checked"
else
checked = check_box_checked?(value(object))
end

options["checked"] = "checked" if checked
if options["multiple"]
add_default_name_and_id_for_value(@checked_value, options)
options.delete("multiple")
else
add_default_name_and_id(options)
end
hidden = @unchecked_value ? tag("input", "name" => options["name"], "type" => "hidden", "value" => @unchecked_value, "disabled" => options["disabled"]) : ""
checkbox = tag("input", options)
hidden + checkbox
end

private

def value(object)
object.send @method_name if object
end

def check_box_checked?(value)
case value
when TrueClass, FalseClass
value
when NilClass
false
when Integer
value != 0
when String
value == @checked_value
when Array
value.include?(@checked_value)
else
value.to_i != 0
end
end
end
end
end
end

0 comments on commit f42e1db

Please sign in to comment.