<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,7 @@
 *2.3.0 [Edge]*
 
+* Add :prompt option to date/time select helpers. #561 [Sam Oliver]
+
 * Fixed that send_file shouldn't set an etag #1578 [Hongli Lai]
 
 * Allow users to opt out of the spoofing checks in Request#remote_ip.  Useful for sites whose traffic regularly triggers false positives. [Darren Boyd]</diff>
      <filename>actionpack/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -136,6 +136,10 @@ module ActionView
       #   dates.
       # * &lt;tt&gt;:default&lt;/tt&gt;           - Set a default date if the affected date isn't set or is nil.
       # * &lt;tt&gt;:disabled&lt;/tt&gt;          - Set to true if you want show the select fields as disabled.
+      # * &lt;tt&gt;:prompt&lt;/tt&gt;            - Set to true (for a generic prompt), a prompt string or a hash of prompt strings
+      #   for &lt;tt&gt;:year&lt;/tt&gt;, &lt;tt&gt;:month&lt;/tt&gt;, &lt;tt&gt;:day&lt;/tt&gt;, &lt;tt&gt;:hour&lt;/tt&gt;, &lt;tt&gt;:minute&lt;/tt&gt; and &lt;tt&gt;:second&lt;/tt&gt;.
+      #   Setting this option prepends a select option with a generic prompt  (Day, Month, Year, Hour, Minute, Seconds)
+      #   or the given prompt string.
       #
       # If anything is passed in the +html_options+ hash it will be applied to every select tag in the set.
       #
@@ -171,6 +175,9 @@ module ActionView
       #   # that will have a default day of 20.
       #   date_select(&quot;credit_card&quot;, &quot;bill_due&quot;, :default =&gt; { :day =&gt; 20 })
       #
+      #   # Generates a date select with custom prompts
+      #   date_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; { :day =&gt; 'Select day', :month =&gt; 'Select month', :year =&gt; 'Select year' })
+      #
       # The selects are prepared for multi-parameter assignment to an Active Record object.
       #
       # Note: If the day is not included as an option but the month is, the day will be set to the 1st to ensure that
@@ -210,6 +217,11 @@ module ActionView
       #   # You can set the :minute_step to 15 which will give you: 00, 15, 30 and 45.
       #   time_select 'game', 'game_time', {:minute_step =&gt; 15}
       #
+      #   # Creates a time select tag with a custom prompt. Use :prompt =&gt; true for generic prompts.
+      #   time_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; {:hour =&gt; 'Choose hour', :minute =&gt; 'Choose minute', :second =&gt; 'Choose seconds'})
+      #   time_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; {:hour =&gt; true}) # generic prompt for hours
+      #   time_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; true) # generic prompts for all
+      #
       # The selects are prepared for multi-parameter assignment to an Active Record object.
       #
       # Note: If the day is not included as an option but the month is, the day will be set to the 1st to ensure that
@@ -241,6 +253,11 @@ module ActionView
       #   # as the written_on attribute.
       #   datetime_select(&quot;post&quot;, &quot;written_on&quot;, :discard_type =&gt; true)
       #
+      #   # Generates a datetime select with a custom prompt. Use :prompt=&gt;true for generic prompts.
+      #   datetime_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; {:day =&gt; 'Choose day', :month =&gt; 'Choose month', :year =&gt; 'Choose year'})
+      #   datetime_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; {:hour =&gt; true}) # generic prompt for hours
+      #   datetime_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; true) # generic prompts for all
+      #
       # The selects are prepared for multi-parameter assignment to an Active Record object.
       def datetime_select(object_name, method, options = {}, html_options = {})
         InstanceTag.new(object_name, method, self, options.delete(:object)).to_datetime_select_tag(options, html_options)
@@ -285,6 +302,11 @@ module ActionView
       #   # prefixed with 'payday' rather than 'date'
       #   select_datetime(my_date_time, :prefix =&gt; 'payday')
       #
+      #   # Generates a datetime select with a custom prompt. Use :prompt=&gt;true for generic prompts.
+      #   select_datetime(my_date_time, :prompt =&gt; {:day =&gt; 'Choose day', :month =&gt; 'Choose month', :year =&gt; 'Choose year'})
+      #   select_datetime(my_date_time, :prompt =&gt; {:hour =&gt; true}) # generic prompt for hours
+      #   select_datetime(my_date_time, :prompt =&gt; true) # generic prompts for all
+      #
       def select_datetime(datetime = Time.current, options = {}, html_options = {})
         DateTimeSelector.new(datetime, options, html_options).select_datetime
       end
@@ -321,6 +343,11 @@ module ActionView
       #   # prefixed with 'payday' rather than 'date'
       #   select_date(my_date, :prefix =&gt; 'payday')
       #
+      #   # Generates a date select with a custom prompt. Use :prompt=&gt;true for generic prompts.
+      #   select_date(my_date, :prompt =&gt; {:day =&gt; 'Choose day', :month =&gt; 'Choose month', :year =&gt; 'Choose year'})
+      #   select_date(my_date, :prompt =&gt; {:hour =&gt; true}) # generic prompt for hours
+      #   select_date(my_date, :prompt =&gt; true) # generic prompts for all
+      #
       def select_date(date = Date.current, options = {}, html_options = {})
         DateTimeSelector.new(date, options, html_options).select_date
       end
@@ -352,6 +379,11 @@ module ActionView
       #   # separated by ':' and includes an input for seconds
       #   select_time(my_time, :time_separator =&gt; ':', :include_seconds =&gt; true)
       #
+      #   # Generates a time select with a custom prompt. Use :prompt=&gt;true for generic prompts.
+      #   select_time(my_time, :prompt =&gt; {:day =&gt; 'Choose day', :month =&gt; 'Choose month', :year =&gt; 'Choose year'})
+      #   select_time(my_time, :prompt =&gt; {:hour =&gt; true}) # generic prompt for hours
+      #   select_time(my_time, :prompt =&gt; true) # generic prompts for all
+      #
       def select_time(datetime = Time.current, options = {}, html_options = {})
         DateTimeSelector.new(datetime, options, html_options).select_time
       end
@@ -373,6 +405,10 @@ module ActionView
       #   # that is named 'interval' rather than 'second'
       #   select_second(my_time, :field_name =&gt; 'interval')
       #
+      #   # Generates a select field for seconds with a custom prompt.  Use :prompt=&gt;true for a
+      #   # generic prompt.
+      #   select_minute(14, :prompt =&gt; 'Choose seconds')
+      #
       def select_second(datetime, options = {}, html_options = {})
         DateTimeSelector.new(datetime, options, html_options).select_second
       end
@@ -395,6 +431,10 @@ module ActionView
       #   # that is named 'stride' rather than 'second'
       #   select_minute(my_time, :field_name =&gt; 'stride')
       #
+      #   # Generates a select field for minutes with a custom prompt.  Use :prompt=&gt;true for a
+      #   # generic prompt.
+      #   select_minute(14, :prompt =&gt; 'Choose minutes')
+      #
       def select_minute(datetime, options = {}, html_options = {})
         DateTimeSelector.new(datetime, options, html_options).select_minute
       end
@@ -416,6 +456,10 @@ module ActionView
       #   # that is named 'stride' rather than 'second'
       #   select_hour(my_time, :field_name =&gt; 'stride')
       #
+      #   # Generates a select field for hours with a custom prompt.  Use :prompt =&gt; true for a
+      #   # generic prompt.
+      #   select_hour(13, :prompt =&gt;'Choose hour')
+      #
       def select_hour(datetime, options = {}, html_options = {})
         DateTimeSelector.new(datetime, options, html_options).select_hour
       end
@@ -437,6 +481,10 @@ module ActionView
       #   # that is named 'due' rather than 'day'
       #   select_day(my_time, :field_name =&gt; 'due')
       #
+      #   # Generates a select field for days with a custom prompt.  Use :prompt =&gt; true for a
+      #   # generic prompt.
+      #   select_day(5, :prompt =&gt; 'Choose day')
+      #
       def select_day(date, options = {}, html_options = {})
         DateTimeSelector.new(date, options, html_options).select_day
       end
@@ -475,6 +523,10 @@ module ActionView
       #   # will use keys like &quot;Januar&quot;, &quot;Marts.&quot;
       #   select_month(Date.today, :use_month_names =&gt; %w(Januar Februar Marts ...))
       #
+      #   # Generates a select field for months with a custom prompt.  Use :prompt =&gt; true for a
+      #   # generic prompt.
+      #   select_month(14, :prompt =&gt; 'Choose month')
+      #
       def select_month(date, options = {}, html_options = {})
         DateTimeSelector.new(date, options, html_options).select_month
       end
@@ -502,6 +554,10 @@ module ActionView
       #   # has ascending year values
       #   select_year(2006, :start_year =&gt; 2000, :end_year =&gt; 2010)
       #
+      #   # Generates a select field for years with a custom prompt.  Use :prompt =&gt; true for a
+      #   # generic prompt.
+      #   select_year(14, :prompt =&gt; 'Choose year')
+      #
       def select_year(date, options = {}, html_options = {})
         DateTimeSelector.new(date, options, html_options).select_year
       end
@@ -516,6 +572,10 @@ module ActionView
         :year =&gt; 1, :month =&gt; 2, :day =&gt; 3, :hour =&gt; 4, :minute =&gt; 5, :second =&gt; 6
       }.freeze unless const_defined?('POSITION')
 
+      DEFAULT_PROMPTS = {
+        :year =&gt; 'Year', :month =&gt; 'Month', :day =&gt; 'Day', :hour =&gt; 'Hour', :minute =&gt; 'Minute', :second =&gt; 'Seconds'
+      }.freeze unless const_defined?('DEFAULT_PROMPTS')
+
       def initialize(datetime, options = {}, html_options = {})
         @options      = options.dup
         @html_options = html_options.dup
@@ -764,11 +824,30 @@ module ActionView
 
           select_html = &quot;\n&quot;
           select_html &lt;&lt; content_tag(:option, '', :value =&gt; '') + &quot;\n&quot; if @options[:include_blank]
+          select_html &lt;&lt; prompt_option_tag(type, @options[:prompt]) + &quot;\n&quot; if @options[:prompt]
           select_html &lt;&lt; select_options_as_html.to_s
 
           content_tag(:select, select_html, select_options) + &quot;\n&quot;
         end
 
+        # Builds a prompt option tag with supplied options or from default options
+        #  prompt_option_tag(:month, :prompt =&gt; 'Select month')
+        #  =&gt; &quot;&lt;option value=&quot;&quot;&gt;Select month&lt;/option&gt;&quot;
+        def prompt_option_tag(type, options)
+          default_options = {:year =&gt; false, :month =&gt; false, :day =&gt; false, :hour =&gt; false, :minute =&gt; false, :second =&gt; false}
+
+          case options
+          when Hash
+            prompt = default_options.merge(options)[type.to_sym]
+          when String
+            prompt = options
+          else
+            prompt = ActionView::Helpers::DateTimeSelector::DEFAULT_PROMPTS[type.to_sym]
+          end
+
+          prompt ? content_tag(:option, prompt, :value =&gt; '')  : ''
+        end
+
         # Builds hidden input tag for date part and value
         #  build_hidden(:year, 2008)
         #  =&gt; &quot;&lt;input id=&quot;post_written_on_1i&quot; name=&quot;post[written_on(1i)]&quot; type=&quot;hidden&quot; value=&quot;2008&quot; /&gt;&quot;</diff>
      <filename>actionpack/lib/action_view/helpers/date_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -153,6 +153,22 @@ class DateHelperTest &lt; ActionView::TestCase
     assert_dom_equal expected, select_day(16, {}, :class =&gt; 'selector')
   end
 
+  def test_select_day_with_default_prompt
+    expected = %(&lt;select id=&quot;date_day&quot; name=&quot;date[day]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Day&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;4&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;5&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;6&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;7&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;8&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;9&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot; selected=&quot;selected&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_day(16, :prompt =&gt; true)
+  end
+
+  def test_select_day_with_custom_prompt
+    expected = %(&lt;select id=&quot;date_day&quot; name=&quot;date[day]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose day&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;4&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;5&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;6&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;7&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;8&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;9&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot; selected=&quot;selected&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_day(16, :prompt =&gt; 'Choose day')
+  end
+
   def test_select_month
     expected = %(&lt;select id=&quot;date_month&quot; name=&quot;date[month]&quot;&gt;\n)
     expected &lt;&lt; %(&lt;option value=&quot;1&quot;&gt;January&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;February&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;March&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;April&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;May&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;June&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;July&lt;/option&gt;\n&lt;option value=&quot;8&quot; selected=&quot;selected&quot;&gt;August&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;September&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;October&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;November&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;December&lt;/option&gt;\n)
@@ -276,6 +292,22 @@ class DateHelperTest &lt; ActionView::TestCase
     #assert result.include?('&lt;option value=&quot;1&quot;&gt;January')
   end
 
+  def test_select_month_with_default_prompt
+    expected = %(&lt;select id=&quot;date_month&quot; name=&quot;date[month]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Month&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;January&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;February&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;March&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;April&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;May&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;June&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;July&lt;/option&gt;\n&lt;option value=&quot;8&quot; selected=&quot;selected&quot;&gt;August&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;September&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;October&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;November&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;December&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_month(8, :prompt =&gt; true)
+  end
+
+  def test_select_month_with_custom_prompt
+    expected = %(&lt;select id=&quot;date_month&quot; name=&quot;date[month]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose month&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;January&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;February&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;March&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;April&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;May&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;June&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;July&lt;/option&gt;\n&lt;option value=&quot;8&quot; selected=&quot;selected&quot;&gt;August&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;September&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;October&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;November&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;December&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_month(8, :prompt =&gt; 'Choose month')
+  end
+
   def test_select_year
     expected = %(&lt;select id=&quot;date_year&quot; name=&quot;date[year]&quot;&gt;\n)
     expected &lt;&lt; %(&lt;option value=&quot;2003&quot; selected=&quot;selected&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n)
@@ -344,6 +376,22 @@ class DateHelperTest &lt; ActionView::TestCase
     #assert result.include?('&lt;option value=&quot;2003&quot;')
   end
 
+  def test_select_year_with_default_prompt
+    expected = %(&lt;select id=&quot;date_year&quot; name=&quot;date[year]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Year&lt;/option&gt;\n&lt;option value=&quot;2003&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_year(nil, :start_year =&gt; 2003, :end_year =&gt; 2005, :prompt =&gt; true)
+  end
+
+  def test_select_year_with_custom_prompt
+    expected = %(&lt;select id=&quot;date_year&quot; name=&quot;date[year]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose year&lt;/option&gt;\n&lt;option value=&quot;2003&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_year(nil, :start_year =&gt; 2003, :end_year =&gt; 2005, :prompt =&gt; 'Choose year')
+  end
+
   def test_select_hour
     expected = %(&lt;select id=&quot;date_hour&quot; name=&quot;date[hour]&quot;&gt;\n)
     expected &lt;&lt; %(&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot; selected=&quot;selected&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n)
@@ -392,6 +440,22 @@ class DateHelperTest &lt; ActionView::TestCase
     assert_dom_equal expected, select_hour(Time.mktime(2003, 8, 16, 8, 4, 18), {}, :class =&gt; 'selector', :accesskey =&gt; 'M')
   end
 
+  def test_select_hour_with_default_prompt
+    expected = %(&lt;select id=&quot;date_hour&quot; name=&quot;date[hour]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Hour&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot; selected=&quot;selected&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_hour(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt =&gt; true)
+  end
+
+  def test_select_hour_with_custom_prompt
+    expected = %(&lt;select id=&quot;date_hour&quot; name=&quot;date[hour]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose hour&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot; selected=&quot;selected&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_hour(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt =&gt; 'Choose hour')
+  end
+
   def test_select_minute
     expected = %(&lt;select id=&quot;date_minute&quot; name=&quot;date[minute]&quot;&gt;\n)
     expected &lt;&lt; %(&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot; selected=&quot;selected&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
@@ -470,6 +534,22 @@ class DateHelperTest &lt; ActionView::TestCase
     #assert result.include?('&lt;option value=&quot;00&quot;&gt;00')
   end
 
+  def test_select_minute_with_default_prompt
+    expected = %(&lt;select id=&quot;date_minute&quot; name=&quot;date[minute]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Minute&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot; selected=&quot;selected&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_minute(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt =&gt; true)
+  end
+
+  def test_select_minute_with_custom_prompt
+    expected = %(&lt;select id=&quot;date_minute&quot; name=&quot;date[minute]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose minute&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot; selected=&quot;selected&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_minute(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt =&gt; 'Choose minute')
+  end
+
   def test_select_second
     expected = %(&lt;select id=&quot;date_second&quot; name=&quot;date[second]&quot;&gt;\n)
     expected &lt;&lt; %(&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot; selected=&quot;selected&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
@@ -524,6 +604,22 @@ class DateHelperTest &lt; ActionView::TestCase
     #assert result.include?('&lt;option value=&quot;00&quot;&gt;00')
   end
 
+  def test_select_second_with_default_prompt
+    expected = %(&lt;select id=&quot;date_second&quot; name=&quot;date[second]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Seconds&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot; selected=&quot;selected&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_second(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt =&gt; true)
+  end
+
+  def test_select_second_with_custom_prompt
+    expected = %(&lt;select id=&quot;date_second&quot; name=&quot;date[second]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose seconds&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot; selected=&quot;selected&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_second(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt =&gt; 'Choose seconds')
+  end
+
   def test_select_date
     expected =  %(&lt;select id=&quot;date_first_year&quot; name=&quot;date[first][year]&quot;&gt;\n)
     expected &lt;&lt; %(&lt;option value=&quot;2003&quot; selected=&quot;selected&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n)
@@ -914,6 +1010,57 @@ class DateHelperTest &lt; ActionView::TestCase
     assert_nothing_raised { select_datetime(Date.today) }
   end
 
+  def test_select_datetime_with_default_prompt
+    expected =  %(&lt;select id=&quot;date_first_year&quot; name=&quot;date[first][year]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Year&lt;/option&gt;\n&lt;option value=&quot;2003&quot; selected=&quot;selected&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_first_month&quot; name=&quot;date[first][month]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Month&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;January&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;February&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;March&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;April&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;May&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;June&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;July&lt;/option&gt;\n&lt;option value=&quot;8&quot; selected=&quot;selected&quot;&gt;August&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;September&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;October&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;November&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;December&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_first_day&quot; name=&quot;date[first][day]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Day&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;4&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;5&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;6&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;7&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;8&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;9&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot; selected=&quot;selected&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_first_hour&quot; name=&quot;date[first][hour]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Hour&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot; selected=&quot;selected&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_first_minute&quot; name=&quot;date[first][minute]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Minute&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot; selected=&quot;selected&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_datetime(Time.mktime(2003, 8, 16, 8, 4, 18), :start_year =&gt; 2003, :end_year =&gt; 2005,
+                                               :prefix =&gt; &quot;date[first]&quot;, :prompt =&gt; true)
+  end
+
+  def test_select_datetime_with_custom_prompt
+
+    expected =  %(&lt;select id=&quot;date_first_year&quot; name=&quot;date[first][year]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose year&lt;/option&gt;\n&lt;option value=&quot;2003&quot; selected=&quot;selected&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_first_month&quot; name=&quot;date[first][month]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose month&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;January&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;February&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;March&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;April&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;May&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;June&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;July&lt;/option&gt;\n&lt;option value=&quot;8&quot; selected=&quot;selected&quot;&gt;August&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;September&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;October&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;November&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;December&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_first_day&quot; name=&quot;date[first][day]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose day&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;4&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;5&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;6&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;7&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;8&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;9&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot; selected=&quot;selected&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_first_hour&quot; name=&quot;date[first][hour]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose hour&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot; selected=&quot;selected&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_first_minute&quot; name=&quot;date[first][minute]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose minute&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot; selected=&quot;selected&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_datetime(Time.mktime(2003, 8, 16, 8, 4, 18), :start_year =&gt; 2003, :end_year =&gt; 2005, :prefix =&gt; &quot;date[first]&quot;,
+      :prompt =&gt; {:day =&gt; 'Choose day', :month =&gt; 'Choose month', :year =&gt; 'Choose year', :hour =&gt; 'Choose hour', :minute =&gt; 'Choose minute'})
+  end
+
   def test_select_time
     expected = %(&lt;select id=&quot;date_hour&quot; name=&quot;date[hour]&quot;&gt;\n)
     expected &lt;&lt; %(&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot; selected=&quot;selected&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n)
@@ -995,6 +1142,40 @@ class DateHelperTest &lt; ActionView::TestCase
     assert_nothing_raised { select_time(Date.today) }
   end
 
+  def test_select_time_with_default_prompt
+    expected = %(&lt;select id=&quot;date_hour&quot; name=&quot;date[hour]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Hour&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot; selected=&quot;selected&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_minute&quot; name=&quot;date[minute]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Minute&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot; selected=&quot;selected&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_second&quot; name=&quot;date[second]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Seconds&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot; selected=&quot;selected&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_time(Time.mktime(2003, 8, 16, 8, 4, 18), :include_seconds =&gt; true, :prompt =&gt; true)
+  end
+
+  def test_select_time_with_custom_prompt
+
+    expected = %(&lt;select id=&quot;date_hour&quot; name=&quot;date[hour]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose hour&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot; selected=&quot;selected&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_minute&quot; name=&quot;date[minute]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose minute&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot; selected=&quot;selected&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %(&lt;select id=&quot;date_second&quot; name=&quot;date[second]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose seconds&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot; selected=&quot;selected&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n)
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, select_time(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt =&gt; true, :include_seconds =&gt; true,
+      :prompt =&gt; {:hour =&gt; 'Choose hour', :minute =&gt; 'Choose minute', :second =&gt; 'Choose seconds'})
+  end
+
   def test_date_select
     @post = Post.new
     @post.written_on = Date.new(2004, 6, 15)
@@ -1277,6 +1458,46 @@ class DateHelperTest &lt; ActionView::TestCase
     assert_dom_equal expected, date_select(&quot;post&quot;, &quot;written_on&quot;, { :date_separator =&gt; &quot; / &quot; })
   end
 
+  def test_date_select_with_default_prompt
+    @post = Post.new
+    @post.written_on = Date.new(2004, 6, 15)
+
+    expected = %{&lt;select id=&quot;post_written_on_1i&quot; name=&quot;post[written_on(1i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Year&lt;/option&gt;\n&lt;option value=&quot;1999&quot;&gt;1999&lt;/option&gt;\n&lt;option value=&quot;2000&quot;&gt;2000&lt;/option&gt;\n&lt;option value=&quot;2001&quot;&gt;2001&lt;/option&gt;\n&lt;option value=&quot;2002&quot;&gt;2002&lt;/option&gt;\n&lt;option value=&quot;2003&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot; selected=&quot;selected&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n&lt;option value=&quot;2006&quot;&gt;2006&lt;/option&gt;\n&lt;option value=&quot;2007&quot;&gt;2007&lt;/option&gt;\n&lt;option value=&quot;2008&quot;&gt;2008&lt;/option&gt;\n&lt;option value=&quot;2009&quot;&gt;2009&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_written_on_2i&quot; name=&quot;post[written_on(2i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Month&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;January&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;February&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;March&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;April&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;May&lt;/option&gt;\n&lt;option value=&quot;6&quot; selected=&quot;selected&quot;&gt;June&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;July&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;August&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;September&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;October&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;November&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;December&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_written_on_3i&quot; name=&quot;post[written_on(3i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Day&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;4&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;5&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;6&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;7&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;8&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;9&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot; selected=&quot;selected&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n}
+
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, date_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; true)
+  end
+
+  def test_date_select_with_custom_prompt
+    @post = Post.new
+    @post.written_on = Date.new(2004, 6, 15)
+
+    expected = %{&lt;select id=&quot;post_written_on_1i&quot; name=&quot;post[written_on(1i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Choose year&lt;/option&gt;\n&lt;option value=&quot;1999&quot;&gt;1999&lt;/option&gt;\n&lt;option value=&quot;2000&quot;&gt;2000&lt;/option&gt;\n&lt;option value=&quot;2001&quot;&gt;2001&lt;/option&gt;\n&lt;option value=&quot;2002&quot;&gt;2002&lt;/option&gt;\n&lt;option value=&quot;2003&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot; selected=&quot;selected&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n&lt;option value=&quot;2006&quot;&gt;2006&lt;/option&gt;\n&lt;option value=&quot;2007&quot;&gt;2007&lt;/option&gt;\n&lt;option value=&quot;2008&quot;&gt;2008&lt;/option&gt;\n&lt;option value=&quot;2009&quot;&gt;2009&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_written_on_2i&quot; name=&quot;post[written_on(2i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Choose month&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;January&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;February&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;March&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;April&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;May&lt;/option&gt;\n&lt;option value=&quot;6&quot; selected=&quot;selected&quot;&gt;June&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;July&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;August&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;September&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;October&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;November&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;December&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_written_on_3i&quot; name=&quot;post[written_on(3i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Choose day&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;4&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;5&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;6&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;7&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;8&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;9&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot; selected=&quot;selected&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n}
+
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, date_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; {:year =&gt; 'Choose year', :month =&gt; 'Choose month', :day =&gt; 'Choose day'})
+  end
+
   def test_time_select
     @post = Post.new
     @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
@@ -1403,6 +1624,48 @@ class DateHelperTest &lt; ActionView::TestCase
     assert_dom_equal expected, time_select(&quot;post&quot;, &quot;written_on&quot;, { :time_separator =&gt; &quot; - &quot;, :include_seconds =&gt; true })
   end
 
+  def test_time_select_with_default_prompt
+    @post = Post.new
+    @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
+
+    expected = %{&lt;input type=&quot;hidden&quot; id=&quot;post_written_on_1i&quot; name=&quot;post[written_on(1i)]&quot; value=&quot;2004&quot; /&gt;\n}
+    expected &lt;&lt; %{&lt;input type=&quot;hidden&quot; id=&quot;post_written_on_2i&quot; name=&quot;post[written_on(2i)]&quot; value=&quot;6&quot; /&gt;\n}
+    expected &lt;&lt; %{&lt;input type=&quot;hidden&quot; id=&quot;post_written_on_3i&quot; name=&quot;post[written_on(3i)]&quot; value=&quot;15&quot; /&gt;\n}
+
+    expected &lt;&lt; %(&lt;select id=&quot;post_written_on_4i&quot; name=&quot;post[written_on(4i)]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Hour&lt;/option&gt;\n)
+    0.upto(23) { |i| expected &lt;&lt; %(&lt;option value=&quot;#{sprintf(&quot;%02d&quot;, i)}&quot;#{' selected=&quot;selected&quot;' if i == 15}&gt;#{sprintf(&quot;%02d&quot;, i)}&lt;/option&gt;\n) }
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+    expected &lt;&lt; &quot; : &quot;
+    expected &lt;&lt; %(&lt;select id=&quot;post_written_on_5i&quot; name=&quot;post[written_on(5i)]&quot;&gt;\n)
+        expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Minute&lt;/option&gt;\n)
+    0.upto(59) { |i| expected &lt;&lt; %(&lt;option value=&quot;#{sprintf(&quot;%02d&quot;, i)}&quot;#{' selected=&quot;selected&quot;' if i == 16}&gt;#{sprintf(&quot;%02d&quot;, i)}&lt;/option&gt;\n) }
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, time_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; true)
+  end
+
+  def test_time_select_with_custom_prompt
+    @post = Post.new
+    @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
+
+    expected = %{&lt;input type=&quot;hidden&quot; id=&quot;post_written_on_1i&quot; name=&quot;post[written_on(1i)]&quot; value=&quot;2004&quot; /&gt;\n}
+    expected &lt;&lt; %{&lt;input type=&quot;hidden&quot; id=&quot;post_written_on_2i&quot; name=&quot;post[written_on(2i)]&quot; value=&quot;6&quot; /&gt;\n}
+    expected &lt;&lt; %{&lt;input type=&quot;hidden&quot; id=&quot;post_written_on_3i&quot; name=&quot;post[written_on(3i)]&quot; value=&quot;15&quot; /&gt;\n}
+
+    expected &lt;&lt; %(&lt;select id=&quot;post_written_on_4i&quot; name=&quot;post[written_on(4i)]&quot;&gt;\n)
+    expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose hour&lt;/option&gt;\n)
+    0.upto(23) { |i| expected &lt;&lt; %(&lt;option value=&quot;#{sprintf(&quot;%02d&quot;, i)}&quot;#{' selected=&quot;selected&quot;' if i == 15}&gt;#{sprintf(&quot;%02d&quot;, i)}&lt;/option&gt;\n) }
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+    expected &lt;&lt; &quot; : &quot;
+    expected &lt;&lt; %(&lt;select id=&quot;post_written_on_5i&quot; name=&quot;post[written_on(5i)]&quot;&gt;\n)
+        expected &lt;&lt; %(&lt;option value=&quot;&quot;&gt;Choose minute&lt;/option&gt;\n)
+    0.upto(59) { |i| expected &lt;&lt; %(&lt;option value=&quot;#{sprintf(&quot;%02d&quot;, i)}&quot;#{' selected=&quot;selected&quot;' if i == 16}&gt;#{sprintf(&quot;%02d&quot;, i)}&lt;/option&gt;\n) }
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, time_select(&quot;post&quot;, &quot;written_on&quot;, :prompt =&gt; {:hour =&gt; 'Choose hour', :minute =&gt; 'Choose minute'})
+  end
+
   def test_datetime_select
     @post = Post.new
     @post.updated_at = Time.local(2004, 6, 15, 16, 35)
@@ -1526,6 +1789,64 @@ class DateHelperTest &lt; ActionView::TestCase
     assert_dom_equal expected, datetime_select(&quot;post&quot;, &quot;updated_at&quot;, { :date_separator =&gt; &quot; / &quot;, :datetime_separator =&gt; &quot; , &quot;, :time_separator =&gt; &quot; - &quot;, :include_seconds =&gt; true })
   end
 
+  def test_datetime_select_with_default_prompt
+    @post = Post.new
+    @post.updated_at = Time.local(2004, 6, 15, 16, 35)
+
+    expected = %{&lt;select id=&quot;post_updated_at_1i&quot; name=&quot;post[updated_at(1i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Year&lt;/option&gt;\n&lt;option value=&quot;1999&quot;&gt;1999&lt;/option&gt;\n&lt;option value=&quot;2000&quot;&gt;2000&lt;/option&gt;\n&lt;option value=&quot;2001&quot;&gt;2001&lt;/option&gt;\n&lt;option value=&quot;2002&quot;&gt;2002&lt;/option&gt;\n&lt;option value=&quot;2003&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot; selected=&quot;selected&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n&lt;option value=&quot;2006&quot;&gt;2006&lt;/option&gt;\n&lt;option value=&quot;2007&quot;&gt;2007&lt;/option&gt;\n&lt;option value=&quot;2008&quot;&gt;2008&lt;/option&gt;\n&lt;option value=&quot;2009&quot;&gt;2009&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_updated_at_2i&quot; name=&quot;post[updated_at(2i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Month&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;January&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;February&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;March&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;April&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;May&lt;/option&gt;\n&lt;option value=&quot;6&quot; selected=&quot;selected&quot;&gt;June&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;July&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;August&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;September&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;October&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;November&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;December&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_updated_at_3i&quot; name=&quot;post[updated_at(3i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Day&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;4&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;5&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;6&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;7&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;8&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;9&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot; selected=&quot;selected&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; &quot; &amp;mdash; &quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_updated_at_4i&quot; name=&quot;post[updated_at(4i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Hour&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot; selected=&quot;selected&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+    expected &lt;&lt; &quot; : &quot;
+    expected &lt;&lt; %{&lt;select id=&quot;post_updated_at_5i&quot; name=&quot;post[updated_at(5i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Minute&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot; selected=&quot;selected&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, datetime_select(&quot;post&quot;, &quot;updated_at&quot;, :prompt =&gt; true)
+  end
+
+  def test_datetime_select_with_custom_prompt
+    @post = Post.new
+    @post.updated_at = Time.local(2004, 6, 15, 16, 35)
+
+    expected = %{&lt;select id=&quot;post_updated_at_1i&quot; name=&quot;post[updated_at(1i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Choose year&lt;/option&gt;\n&lt;option value=&quot;1999&quot;&gt;1999&lt;/option&gt;\n&lt;option value=&quot;2000&quot;&gt;2000&lt;/option&gt;\n&lt;option value=&quot;2001&quot;&gt;2001&lt;/option&gt;\n&lt;option value=&quot;2002&quot;&gt;2002&lt;/option&gt;\n&lt;option value=&quot;2003&quot;&gt;2003&lt;/option&gt;\n&lt;option value=&quot;2004&quot; selected=&quot;selected&quot;&gt;2004&lt;/option&gt;\n&lt;option value=&quot;2005&quot;&gt;2005&lt;/option&gt;\n&lt;option value=&quot;2006&quot;&gt;2006&lt;/option&gt;\n&lt;option value=&quot;2007&quot;&gt;2007&lt;/option&gt;\n&lt;option value=&quot;2008&quot;&gt;2008&lt;/option&gt;\n&lt;option value=&quot;2009&quot;&gt;2009&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_updated_at_2i&quot; name=&quot;post[updated_at(2i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Choose month&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;January&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;February&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;March&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;April&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;May&lt;/option&gt;\n&lt;option value=&quot;6&quot; selected=&quot;selected&quot;&gt;June&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;July&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;August&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;September&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;October&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;November&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;December&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_updated_at_3i&quot; name=&quot;post[updated_at(3i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Choose day&lt;/option&gt;\n&lt;option value=&quot;1&quot;&gt;1&lt;/option&gt;\n&lt;option value=&quot;2&quot;&gt;2&lt;/option&gt;\n&lt;option value=&quot;3&quot;&gt;3&lt;/option&gt;\n&lt;option value=&quot;4&quot;&gt;4&lt;/option&gt;\n&lt;option value=&quot;5&quot;&gt;5&lt;/option&gt;\n&lt;option value=&quot;6&quot;&gt;6&lt;/option&gt;\n&lt;option value=&quot;7&quot;&gt;7&lt;/option&gt;\n&lt;option value=&quot;8&quot;&gt;8&lt;/option&gt;\n&lt;option value=&quot;9&quot;&gt;9&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot; selected=&quot;selected&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    expected &lt;&lt; &quot; &amp;mdash; &quot;
+
+    expected &lt;&lt; %{&lt;select id=&quot;post_updated_at_4i&quot; name=&quot;post[updated_at(4i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Choose hour&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot; selected=&quot;selected&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+    expected &lt;&lt; &quot; : &quot;
+    expected &lt;&lt; %{&lt;select id=&quot;post_updated_at_5i&quot; name=&quot;post[updated_at(5i)]&quot;&gt;\n}
+    expected &lt;&lt; %{&lt;option value=&quot;&quot;&gt;Choose minute&lt;/option&gt;\n&lt;option value=&quot;00&quot;&gt;00&lt;/option&gt;\n&lt;option value=&quot;01&quot;&gt;01&lt;/option&gt;\n&lt;option value=&quot;02&quot;&gt;02&lt;/option&gt;\n&lt;option value=&quot;03&quot;&gt;03&lt;/option&gt;\n&lt;option value=&quot;04&quot;&gt;04&lt;/option&gt;\n&lt;option value=&quot;05&quot;&gt;05&lt;/option&gt;\n&lt;option value=&quot;06&quot;&gt;06&lt;/option&gt;\n&lt;option value=&quot;07&quot;&gt;07&lt;/option&gt;\n&lt;option value=&quot;08&quot;&gt;08&lt;/option&gt;\n&lt;option value=&quot;09&quot;&gt;09&lt;/option&gt;\n&lt;option value=&quot;10&quot;&gt;10&lt;/option&gt;\n&lt;option value=&quot;11&quot;&gt;11&lt;/option&gt;\n&lt;option value=&quot;12&quot;&gt;12&lt;/option&gt;\n&lt;option value=&quot;13&quot;&gt;13&lt;/option&gt;\n&lt;option value=&quot;14&quot;&gt;14&lt;/option&gt;\n&lt;option value=&quot;15&quot;&gt;15&lt;/option&gt;\n&lt;option value=&quot;16&quot;&gt;16&lt;/option&gt;\n&lt;option value=&quot;17&quot;&gt;17&lt;/option&gt;\n&lt;option value=&quot;18&quot;&gt;18&lt;/option&gt;\n&lt;option value=&quot;19&quot;&gt;19&lt;/option&gt;\n&lt;option value=&quot;20&quot;&gt;20&lt;/option&gt;\n&lt;option value=&quot;21&quot;&gt;21&lt;/option&gt;\n&lt;option value=&quot;22&quot;&gt;22&lt;/option&gt;\n&lt;option value=&quot;23&quot;&gt;23&lt;/option&gt;\n&lt;option value=&quot;24&quot;&gt;24&lt;/option&gt;\n&lt;option value=&quot;25&quot;&gt;25&lt;/option&gt;\n&lt;option value=&quot;26&quot;&gt;26&lt;/option&gt;\n&lt;option value=&quot;27&quot;&gt;27&lt;/option&gt;\n&lt;option value=&quot;28&quot;&gt;28&lt;/option&gt;\n&lt;option value=&quot;29&quot;&gt;29&lt;/option&gt;\n&lt;option value=&quot;30&quot;&gt;30&lt;/option&gt;\n&lt;option value=&quot;31&quot;&gt;31&lt;/option&gt;\n&lt;option value=&quot;32&quot;&gt;32&lt;/option&gt;\n&lt;option value=&quot;33&quot;&gt;33&lt;/option&gt;\n&lt;option value=&quot;34&quot;&gt;34&lt;/option&gt;\n&lt;option value=&quot;35&quot; selected=&quot;selected&quot;&gt;35&lt;/option&gt;\n&lt;option value=&quot;36&quot;&gt;36&lt;/option&gt;\n&lt;option value=&quot;37&quot;&gt;37&lt;/option&gt;\n&lt;option value=&quot;38&quot;&gt;38&lt;/option&gt;\n&lt;option value=&quot;39&quot;&gt;39&lt;/option&gt;\n&lt;option value=&quot;40&quot;&gt;40&lt;/option&gt;\n&lt;option value=&quot;41&quot;&gt;41&lt;/option&gt;\n&lt;option value=&quot;42&quot;&gt;42&lt;/option&gt;\n&lt;option value=&quot;43&quot;&gt;43&lt;/option&gt;\n&lt;option value=&quot;44&quot;&gt;44&lt;/option&gt;\n&lt;option value=&quot;45&quot;&gt;45&lt;/option&gt;\n&lt;option value=&quot;46&quot;&gt;46&lt;/option&gt;\n&lt;option value=&quot;47&quot;&gt;47&lt;/option&gt;\n&lt;option value=&quot;48&quot;&gt;48&lt;/option&gt;\n&lt;option value=&quot;49&quot;&gt;49&lt;/option&gt;\n&lt;option value=&quot;50&quot;&gt;50&lt;/option&gt;\n&lt;option value=&quot;51&quot;&gt;51&lt;/option&gt;\n&lt;option value=&quot;52&quot;&gt;52&lt;/option&gt;\n&lt;option value=&quot;53&quot;&gt;53&lt;/option&gt;\n&lt;option value=&quot;54&quot;&gt;54&lt;/option&gt;\n&lt;option value=&quot;55&quot;&gt;55&lt;/option&gt;\n&lt;option value=&quot;56&quot;&gt;56&lt;/option&gt;\n&lt;option value=&quot;57&quot;&gt;57&lt;/option&gt;\n&lt;option value=&quot;58&quot;&gt;58&lt;/option&gt;\n&lt;option value=&quot;59&quot;&gt;59&lt;/option&gt;\n}
+    expected &lt;&lt; &quot;&lt;/select&gt;\n&quot;
+
+    assert_dom_equal expected, datetime_select(&quot;post&quot;, &quot;updated_at&quot;, :prompt =&gt; {:year =&gt; 'Choose year', :month =&gt; 'Choose month', :day =&gt; 'Choose day', :hour =&gt; 'Choose hour', :minute =&gt; 'Choose minute'})
+  end
+
   def test_date_select_with_zero_value_and_no_start_year
     expected =  %(&lt;select id=&quot;date_first_year&quot; name=&quot;date[first][year]&quot;&gt;\n)
     (Date.today.year-5).upto(Date.today.year+1) { |y| expected &lt;&lt; %(&lt;option value=&quot;#{y}&quot;&gt;#{y}&lt;/option&gt;\n) }</diff>
      <filename>actionpack/test/template/date_helper_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>858a420ce18719c720b80508b336e37ce37a20bf</id>
    </parent>
  </parents>
  <author>
    <name>Sam Oliver</name>
    <email>sam@samoliver.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/389534c38c3baaa63ce5cc2ba3bd169415419167</url>
  <id>389534c38c3baaa63ce5cc2ba3bd169415419167</id>
  <committed-date>2008-12-21T15:24:05-08:00</committed-date>
  <authored-date>2008-12-21T11:46:33-08:00</authored-date>
  <message>Added prompt options to date helpers [#561 state:resolved]

Signed-off-by: Pratik Naik &lt;pratiknaik@gmail.com&gt;</message>
  <tree>bb8d32ef8ee134f2020c04489cb63a9144e01429</tree>
  <committer>
    <name>Pratik Naik</name>
    <email>pratiknaik@gmail.com</email>
  </committer>
</commit>
