mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #4033 from nashby/date-helper-field-error-proc
add failing tests for issue #3487
This commit is contained in:
commit
6bb4ad3868
4 changed files with 35 additions and 12 deletions
|
@ -1,4 +1,3 @@
|
||||||
require 'action_view/helpers/form_helper'
|
|
||||||
require 'active_support/core_ext/class/attribute_accessors'
|
require 'active_support/core_ext/class/attribute_accessors'
|
||||||
require 'active_support/core_ext/enumerable'
|
require 'active_support/core_ext/enumerable'
|
||||||
require 'active_support/core_ext/object/blank'
|
require 'active_support/core_ext/object/blank'
|
||||||
|
@ -47,9 +46,5 @@ module ActionView
|
||||||
options['type'] != 'hidden'
|
options['type'] != 'hidden'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class InstanceTag
|
|
||||||
include ActiveModelInstanceTag
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -422,7 +422,7 @@ module ActionView
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a select tag with options for each of the seconds 0 through 59 with the current second selected.
|
# Returns a select tag with options for each of the seconds 0 through 59 with the current second selected.
|
||||||
# The <tt>datetime</tt> can be either a +Time+ or +DateTime+ object or an integer.
|
# The <tt>datetime</tt> can be either a +Time+ or +DateTime+ object or an integer.
|
||||||
# Override the field name using the <tt>:field_name</tt> option, 'second' by default.
|
# Override the field name using the <tt>:field_name</tt> option, 'second' by default.
|
||||||
#
|
#
|
||||||
# ==== Examples
|
# ==== Examples
|
||||||
|
@ -448,7 +448,7 @@ module ActionView
|
||||||
|
|
||||||
# Returns a select tag with options for each of the minutes 0 through 59 with the current minute selected.
|
# Returns a select tag with options for each of the minutes 0 through 59 with the current minute selected.
|
||||||
# Also can return a select tag with options by <tt>minute_step</tt> from 0 through 59 with the 00 minute
|
# Also can return a select tag with options by <tt>minute_step</tt> from 0 through 59 with the 00 minute
|
||||||
# selected. The <tt>datetime</tt> can be either a +Time+ or +DateTime+ object or an integer.
|
# selected. The <tt>datetime</tt> can be either a +Time+ or +DateTime+ object or an integer.
|
||||||
# Override the field name using the <tt>:field_name</tt> option, 'minute' by default.
|
# Override the field name using the <tt>:field_name</tt> option, 'minute' by default.
|
||||||
#
|
#
|
||||||
# ==== Examples
|
# ==== Examples
|
||||||
|
@ -473,7 +473,7 @@ module ActionView
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a select tag with options for each of the hours 0 through 23 with the current hour selected.
|
# Returns a select tag with options for each of the hours 0 through 23 with the current hour selected.
|
||||||
# The <tt>datetime</tt> can be either a +Time+ or +DateTime+ object or an integer.
|
# The <tt>datetime</tt> can be either a +Time+ or +DateTime+ object or an integer.
|
||||||
# Override the field name using the <tt>:field_name</tt> option, 'hour' by default.
|
# Override the field name using the <tt>:field_name</tt> option, 'hour' by default.
|
||||||
#
|
#
|
||||||
# ==== Examples
|
# ==== Examples
|
||||||
|
@ -868,7 +868,7 @@ module ActionView
|
||||||
tag_options = { :value => value }
|
tag_options = { :value => value }
|
||||||
tag_options[:selected] = "selected" if selected == i
|
tag_options[:selected] = "selected" if selected == i
|
||||||
text = options[:use_two_digit_numbers] ? sprintf("%02d", i) : value
|
text = options[:use_two_digit_numbers] ? sprintf("%02d", i) : value
|
||||||
text = options[:ampm] ? AMPM_TRANSLATION[i] : text
|
text = options[:ampm] ? AMPM_TRANSLATION[i] : text
|
||||||
select_options << content_tag(:option, text, tag_options)
|
select_options << content_tag(:option, text, tag_options)
|
||||||
end
|
end
|
||||||
(select_options.join("\n") + "\n").html_safe
|
(select_options.join("\n") + "\n").html_safe
|
||||||
|
@ -974,7 +974,7 @@ module ActionView
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class InstanceTag #:nodoc:
|
module DateHelperInstanceTag
|
||||||
def to_date_select_tag(options = {}, html_options = {})
|
def to_date_select_tag(options = {}, html_options = {})
|
||||||
datetime_selector(options, html_options).select_date.html_safe
|
datetime_selector(options, html_options).select_date.html_safe
|
||||||
end
|
end
|
||||||
|
@ -1030,6 +1030,10 @@ module ActionView
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class InstanceTag #:nodoc:
|
||||||
|
include DateHelperInstanceTag
|
||||||
|
end
|
||||||
|
|
||||||
class FormBuilder
|
class FormBuilder
|
||||||
def date_select(method, options = {}, html_options = {})
|
def date_select(method, options = {}, html_options = {})
|
||||||
@template.date_select(@object_name, method, objectify_options(options), html_options)
|
@template.date_select(@object_name, method, objectify_options(options), html_options)
|
||||||
|
|
|
@ -2,6 +2,7 @@ require 'cgi'
|
||||||
require 'action_view/helpers/date_helper'
|
require 'action_view/helpers/date_helper'
|
||||||
require 'action_view/helpers/tag_helper'
|
require 'action_view/helpers/tag_helper'
|
||||||
require 'action_view/helpers/form_tag_helper'
|
require 'action_view/helpers/form_tag_helper'
|
||||||
|
require 'action_view/helpers/active_model_helper'
|
||||||
require 'active_support/core_ext/class/attribute'
|
require 'active_support/core_ext/class/attribute'
|
||||||
require 'active_support/core_ext/hash/slice'
|
require 'active_support/core_ext/hash/slice'
|
||||||
require 'active_support/core_ext/module/method_names'
|
require 'active_support/core_ext/module/method_names'
|
||||||
|
@ -963,7 +964,7 @@ module ActionView
|
||||||
end
|
end
|
||||||
|
|
||||||
class InstanceTag
|
class InstanceTag
|
||||||
include Helpers::TagHelper, Helpers::FormTagHelper
|
include Helpers::ActiveModelInstanceTag, Helpers::TagHelper, Helpers::FormTagHelper
|
||||||
|
|
||||||
attr_reader :object, :method_name, :object_name
|
attr_reader :object, :method_name, :object_name
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ class ActiveModelHelperTest < ActionView::TestCase
|
||||||
tests ActionView::Helpers::ActiveModelHelper
|
tests ActionView::Helpers::ActiveModelHelper
|
||||||
|
|
||||||
silence_warnings do
|
silence_warnings do
|
||||||
class Post < Struct.new(:author_name, :body)
|
class Post < Struct.new(:author_name, :body, :updated_at)
|
||||||
include ActiveModel::Conversion
|
include ActiveModel::Conversion
|
||||||
include ActiveModel::Validations
|
include ActiveModel::Validations
|
||||||
|
|
||||||
|
@ -20,9 +20,11 @@ class ActiveModelHelperTest < ActionView::TestCase
|
||||||
@post = Post.new
|
@post = Post.new
|
||||||
@post.errors[:author_name] << "can't be empty"
|
@post.errors[:author_name] << "can't be empty"
|
||||||
@post.errors[:body] << "foo"
|
@post.errors[:body] << "foo"
|
||||||
|
@post.errors[:updated_at] << "bar"
|
||||||
|
|
||||||
@post.author_name = ""
|
@post.author_name = ""
|
||||||
@post.body = "Back to the hill and over it again!"
|
@post.body = "Back to the hill and over it again!"
|
||||||
|
@post.updated_at = Date.new(2004, 6, 15)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_text_area_with_errors
|
def test_text_area_with_errors
|
||||||
|
@ -39,6 +41,27 @@ class ActiveModelHelperTest < ActionView::TestCase
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_date_select_with_errors
|
||||||
|
assert_dom_equal(
|
||||||
|
%(<div class="field_with_errors"><select id="post_updated_at_1i" name="post[updated_at(1i)]">\n<option selected="selected" value="2004">2004</option>\n<option value="2005">2005</option>\n</select>\n<input id="post_updated_at_2i" name="post[updated_at(2i)]" type="hidden" value="6" />\n<input id="post_updated_at_3i" name="post[updated_at(3i)]" type="hidden" value="15" />\n</div>),
|
||||||
|
date_select("post", "updated_at", :discard_month => true, :discard_day => true, :start_year => 2004, :end_year => 2005)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_datetime_select_with_errors
|
||||||
|
assert_dom_equal(
|
||||||
|
%(<div class="field_with_errors"><input id="post_updated_at_1i" name="post[updated_at(1i)]" type="hidden" value="2004" />\n<input id="post_updated_at_2i" name="post[updated_at(2i)]" type="hidden" value="6" />\n<input id="post_updated_at_3i" name="post[updated_at(3i)]" type="hidden" value="15" />\n<select id="post_updated_at_4i" name="post[updated_at(4i)]">\n<option selected="selected" value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select id="post_updated_at_5i" name="post[updated_at(5i)]">\n<option selected="selected" value="00">00</option>\n</select>\n</div>),
|
||||||
|
datetime_select("post", "updated_at", :discard_year => true, :discard_month => true, :discard_day => true, :minute_step => 60)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_time_select_with_errors
|
||||||
|
assert_dom_equal(
|
||||||
|
%(<div class="field_with_errors"><input id="post_updated_at_1i" name="post[updated_at(1i)]" type="hidden" value="2004" />\n<input id="post_updated_at_2i" name="post[updated_at(2i)]" type="hidden" value="6" />\n<input id="post_updated_at_3i" name="post[updated_at(3i)]" type="hidden" value="15" />\n<select id="post_updated_at_4i" name="post[updated_at(4i)]">\n<option selected="selected" value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select id="post_updated_at_5i" name="post[updated_at(5i)]">\n<option selected="selected" value="00">00</option>\n</select>\n</div>),
|
||||||
|
time_select("post", "updated_at", :minute_step => 60)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
def test_hidden_field_does_not_render_errors
|
def test_hidden_field_does_not_render_errors
|
||||||
assert_dom_equal(
|
assert_dom_equal(
|
||||||
%(<input id="post_author_name" name="post[author_name]" type="hidden" value="" />),
|
%(<input id="post_author_name" name="post[author_name]" type="hidden" value="" />),
|
||||||
|
|
Loading…
Reference in a new issue