Skip to content

Commit

Permalink
correct handling of date selects when using both disabled and discard…
Browse files Browse the repository at this point in the history
… options

we should take disabled option not only from `html_options` hash but from
`options` hash too like `build_select` method does it. So

datetime_select("post", "updated_at", { :discard_minute => true }, { :disabled => true })
datetime_select("post", "updated_at", :discard_minute => true , :disabled => true)

both these variants work now

closes #7431
  • Loading branch information
nashby committed Aug 25, 2012
1 parent b76a963 commit 4b19855
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
5 changes: 5 additions & 0 deletions actionpack/CHANGELOG.md
@@ -1,5 +1,10 @@
## Rails 3.2.9 (unreleased) ## ## Rails 3.2.9 (unreleased) ##


* Fix handling of date selects when using both disabled and discard options.
Fixes #7431.

*Vasiliy Ermolovich*

* Fix select_tag when option_tags is nil. * Fix select_tag when option_tags is nil.
Fixes #7404. Fixes #7404.


Expand Down
7 changes: 5 additions & 2 deletions actionpack/lib/action_view/helpers/date_helper.rb
Expand Up @@ -915,12 +915,15 @@ def prompt_option_tag(type, options)
# build_hidden(:year, 2008) # build_hidden(:year, 2008)
# => "<input id="post_written_on_1i" name="post[written_on(1i)]" type="hidden" value="2008" />" # => "<input id="post_written_on_1i" name="post[written_on(1i)]" type="hidden" value="2008" />"
def build_hidden(type, value) def build_hidden(type, value)
(tag(:input, { select_options = {
:type => "hidden", :type => "hidden",
:id => input_id_from_type(type), :id => input_id_from_type(type),
:name => input_name_from_type(type), :name => input_name_from_type(type),
:value => value :value => value
}.merge(@html_options.slice(:disabled))) + "\n").html_safe }.merge(@html_options.slice(:disabled))
select_options.merge!(:disabled => 'disabled') if @options[:disabled]

tag(:input, select_options) + "\n".html_safe
end end


# Returns the name attribute for the input tag. # Returns the name attribute for the input tag.
Expand Down
24 changes: 24 additions & 0 deletions actionpack/test/template/date_helper_test.rb
Expand Up @@ -2533,6 +2533,30 @@ def test_datetime_select_discard_minute
assert_dom_equal expected, datetime_select("post", "updated_at", :discard_minute => true) assert_dom_equal expected, datetime_select("post", "updated_at", :discard_minute => true)
end end


def test_datetime_select_disabled_and_discard_minute
@post = Post.new
@post.updated_at = Time.local(2004, 6, 15, 15, 16, 35)

expected = %{<select id="post_updated_at_1i" disabled="disabled" name="post[updated_at(1i)]">\n}
1999.upto(2009) { |i| expected << %(<option value="#{i}"#{' selected="selected"' if i == 2004}>#{i}</option>\n) }
expected << "</select>\n"
expected << %{<select id="post_updated_at_2i" disabled="disabled" name="post[updated_at(2i)]">\n}
1.upto(12) { |i| expected << %(<option value="#{i}"#{' selected="selected"' if i == 6}>#{Date::MONTHNAMES[i]}</option>\n) }
expected << "</select>\n"
expected << %{<select id="post_updated_at_3i" disabled="disabled" name="post[updated_at(3i)]">\n}
1.upto(31) { |i| expected << %(<option value="#{i}"#{' selected="selected"' if i == 15}>#{i}</option>\n) }
expected << "</select>\n"

expected << " &mdash; "

expected << %{<select id="post_updated_at_4i" disabled="disabled" name="post[updated_at(4i)]">\n}
0.upto(23) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 15}>#{sprintf("%02d", i)}</option>\n) }
expected << "</select>\n"
expected << %{<input type="hidden" id="post_updated_at_5i" disabled="disabled" name="post[updated_at(5i)]" value="16" />\n}

assert_dom_equal expected, datetime_select("post", "updated_at", :discard_minute => true, :disabled => true)
end

def test_datetime_select_invalid_order def test_datetime_select_invalid_order
@post = Post.new @post = Post.new
@post.updated_at = Time.local(2004, 6, 15, 15, 16, 35) @post.updated_at = Time.local(2004, 6, 15, 15, 16, 35)
Expand Down

0 comments on commit 4b19855

Please sign in to comment.