mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Fix regression bug that made date_select and datetime_select raise a Null Pointer Exception when a nil date/datetime was passed and only month and year were displayed [#1289 state:committed]
Signed-off-by: David Heinemeier Hansson <david@loudthinking.com>
This commit is contained in:
committed by
David Heinemeier Hansson
parent
a909eecbbd
commit
b2cd318c2e
@@ -1,5 +1,7 @@
|
||||
*2.2.1 [RC2 or 2.2 final]*
|
||||
|
||||
* Fix regression bug that made date_select and datetime_select raise a Null Pointer Exception when a nil date/datetime was passed and only month and year were displayed #1289 [Bernardo Padua/Tor Erik]
|
||||
|
||||
* Simplified the logging format for parameters (don't include controller, action, and format as duplicates) [DHH]
|
||||
|
||||
* Remove the logging of the Session ID when the session store is CookieStore [DHH]
|
||||
|
||||
@@ -539,7 +539,7 @@ module ActionView
|
||||
|
||||
# If the day is hidden and the month is visible, the day should be set to the 1st so all month choices are
|
||||
# valid (otherwise it could be 31 and february wouldn't be a valid date)
|
||||
if @options[:discard_day] && !@options[:discard_month]
|
||||
if @datetime && @options[:discard_day] && !@options[:discard_month]
|
||||
@datetime = @datetime.change(:day => 1)
|
||||
end
|
||||
|
||||
@@ -567,7 +567,7 @@ module ActionView
|
||||
|
||||
# If the day is hidden and the month is visible, the day should be set to the 1st so all month choices are
|
||||
# valid (otherwise it could be 31 and february wouldn't be a valid date)
|
||||
if @options[:discard_day] && !@options[:discard_month]
|
||||
if @datetime && @options[:discard_day] && !@options[:discard_month]
|
||||
@datetime = @datetime.change(:day => 1)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1149,6 +1149,46 @@ class DateHelperTest < ActionView::TestCase
|
||||
|
||||
assert_dom_equal expected, date_select("post", "written_on", :include_blank => true)
|
||||
end
|
||||
|
||||
def test_date_select_with_nil_and_blank_and_order
|
||||
@post = Post.new
|
||||
|
||||
start_year = Time.now.year-5
|
||||
end_year = Time.now.year+5
|
||||
|
||||
expected = '<input name="post[written_on(3i)]" type="hidden" id="post_written_on_3i"/>' + "\n"
|
||||
expected << %{<select id="post_written_on_1i" name="post[written_on(1i)]">\n}
|
||||
expected << "<option value=\"\"></option>\n"
|
||||
start_year.upto(end_year) { |i| expected << %(<option value="#{i}">#{i}</option>\n) }
|
||||
expected << "</select>\n"
|
||||
|
||||
expected << %{<select id="post_written_on_2i" name="post[written_on(2i)]">\n}
|
||||
expected << "<option value=\"\"></option>\n"
|
||||
1.upto(12) { |i| expected << %(<option value="#{i}">#{Date::MONTHNAMES[i]}</option>\n) }
|
||||
expected << "</select>\n"
|
||||
|
||||
assert_dom_equal expected, date_select("post", "written_on", :order=>[:year, :month], :include_blank=>true)
|
||||
end
|
||||
|
||||
def test_date_select_with_nil_and_blank_and_order
|
||||
@post = Post.new
|
||||
|
||||
start_year = Time.now.year-5
|
||||
end_year = Time.now.year+5
|
||||
|
||||
expected = '<input name="post[written_on(3i)]" type="hidden" id="post_written_on_3i"/>' + "\n"
|
||||
expected << %{<select id="post_written_on_1i" name="post[written_on(1i)]">\n}
|
||||
expected << "<option value=\"\"></option>\n"
|
||||
start_year.upto(end_year) { |i| expected << %(<option value="#{i}">#{i}</option>\n) }
|
||||
expected << "</select>\n"
|
||||
|
||||
expected << %{<select id="post_written_on_2i" name="post[written_on(2i)]">\n}
|
||||
expected << "<option value=\"\"></option>\n"
|
||||
1.upto(12) { |i| expected << %(<option value="#{i}">#{Date::MONTHNAMES[i]}</option>\n) }
|
||||
expected << "</select>\n"
|
||||
|
||||
assert_dom_equal expected, date_select("post", "written_on", :order=>[:year, :month], :include_blank=>true)
|
||||
end
|
||||
|
||||
def test_date_select_cant_override_discard_hour
|
||||
@post = Post.new
|
||||
|
||||
Reference in New Issue
Block a user