public
Fork of rails/rails
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/josh/rails.git
Made :date_separator, :time_separator and :datetime_separator available for 
xxx_select methods.
clemens (author)
Thu Jul 31 14:57:47 -0700 2008
commit  3c074ede1be7beb7bfb3f201d7cebce7b07d006c
tree    7a9db61264d983c4fad687226a2c92fcf493e7e4
parent  6b4e2fc3f281d8ae5041617d38c48b497d275dc3
...
745
746
747
748
 
749
750
751
...
771
772
773
774
 
775
776
777
...
787
788
789
790
 
791
792
793
794
 
 
 
 
795
796
797
...
745
746
747
 
748
749
750
751
...
771
772
773
 
774
775
776
777
...
787
788
789
 
790
791
 
 
 
792
793
794
795
796
797
798
0
@@ -745,7 +745,7 @@ module ActionView
0
 
0
 
0
         def date_or_time_select(object_name, method_name, datetime, options, html_options = {})
0
-          options.reverse_merge!(:discard_type => true)
0
+          options.reverse_merge!(:discard_type => true, :datetime_separator => ' — ', :time_separator => ' : ')
0
           datetime ||= default_time_from_options(options[:default]) unless options[:include_blank]
0
 
0
           options[:order] ||= I18n.translate(:'date.order', :locale => options[:locale])
0
@@ -771,7 +771,7 @@ module ActionView
0
 
0
           date_or_time_select = ''
0
           order.reverse.each do |param|
0
-            date_or_time_select.insert(0, separator(param, options) +
0
+            date_or_time_select.insert(0, separator(param, options, order) +
0
               DateTimeSelector.new(
0
                 :datetime => datetime,
0
                 :options => options_with_prefix(
0
@@ -787,11 +787,12 @@ module ActionView
0
           date_or_time_select
0
         end
0
 
0
-        def separator(param, options)
0
+        def separator(param, options, order)
0
           case param
0
-            when :hour then (options[:discard_year] && options[:discard_day] ? "" : " — ")
0
-            when :minute then " : "
0
-            when :second then options[:include_seconds] ? " : " : ""
0
+            when :month, :day then options[:date_separator] unless param == order.first # don't add it for the last field
0
+            when :hour then (options[:discard_year] && options[:discard_day] ? "" : options[:datetime_separator])
0
+            when :minute then options[:time_separator]
0
+            when :second then options[:include_seconds] ? options[:time_separator] : ""
0
           end.to_s
0
         end
0
 
...
1213
1214
1215
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1216
1217
1218
...
1312
1313
1314
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1315
1316
1317
...
1394
1395
1396
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1397
1398
1399
...
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
...
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
...
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
0
@@ -1213,6 +1213,30 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, output_buffer
0
   end
0
 
0
+  def test_date_select_with_separator
0
+    @post = Post.new
0
+    @post.written_on = Date.new(2004, 6, 15)
0
+
0
+    expected = %{<select id="post_written_on_1i" name="post[written_on(1i)]">\n}
0
+    expected << %{<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << " / "
0
+
0
+    expected << %{<select id="post_written_on_2i" name="post[written_on(2i)]">\n}
0
+    expected << %{<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << " / "
0
+
0
+    expected << %{<select id="post_written_on_3i" name="post[written_on(3i)]">\n}
0
+    expected << %{<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15" selected="selected">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n}
0
+
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, date_select("post", "written_on", { :date_separator => " / " })
0
+  end
0
+
0
   def test_time_select
0
     @post = Post.new
0
     @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
0
@@ -1312,6 +1336,33 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, output_buffer
0
   end
0
 
0
+  def test_time_select_with_separator
0
+    @post = Post.new
0
+    @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
0
+
0
+    expected = %{<input type="hidden" id="post_written_on_1i" name="post[written_on(1i)]" value="2004" />\n}
0
+    expected << %{<input type="hidden" id="post_written_on_2i" name="post[written_on(2i)]" value="6" />\n}
0
+    expected << %{<input type="hidden" id="post_written_on_3i" name="post[written_on(3i)]" value="15" />\n}
0
+
0
+    expected << %(<select id="post_written_on_4i" name="post[written_on(4i)]">\n)
0
+    0.upto(23) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 15}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+
0
+    expected << " - "
0
+
0
+    expected << %(<select id="post_written_on_5i" name="post[written_on(5i)]">\n)
0
+    0.upto(59) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 16}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+
0
+    expected << " - "
0
+
0
+    expected << %(<select id="post_written_on_6i" name="post[written_on(6i)]">\n)
0
+    0.upto(59) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 35}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, time_select("post", "written_on", { :time_separator => " - ", :include_seconds => true })
0
+  end
0
+
0
   def test_datetime_select
0
     @post = Post.new
0
     @post.updated_at = Time.local(2004, 6, 15, 16, 35)
0
@@ -1394,6 +1445,47 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, output_buffer
0
   end
0
 
0
+  def test_datetime_select_with_separators
0
+    @post = Post.new
0
+    @post.updated_at = Time.local(2004, 6, 15, 15, 16, 35)
0
+
0
+    expected = %{<select id="post_updated_at_1i" name="post[updated_at(1i)]">\n}
0
+    expected << %{<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << " / "
0
+
0
+    expected << %{<select id="post_updated_at_2i" name="post[updated_at(2i)]">\n}
0
+    expected << %{<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << " / "
0
+
0
+    expected << %{<select id="post_updated_at_3i" name="post[updated_at(3i)]">\n}
0
+    expected << %{<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15" selected="selected">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << " , "
0
+
0
+    expected << %(<select id="post_updated_at_4i" name="post[updated_at(4i)]">\n)
0
+    0.upto(23) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 15}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+
0
+    expected << " - "
0
+
0
+    expected << %(<select id="post_updated_at_5i" name="post[updated_at(5i)]">\n)
0
+    0.upto(59) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 16}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+
0
+    expected << " - "
0
+
0
+    expected << %(<select id="post_updated_at_6i" name="post[updated_at(6i)]">\n)
0
+    0.upto(59) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 35}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, datetime_select("post", "updated_at", { :date_separator => " / ", :datetime_separator => " , ", :time_separator => " - ", :include_seconds => true })
0
+  end
0
+
0
   def test_date_select_with_zero_value_and_no_start_year
0
     expected =  %(<select id="date_first_year" name="date[first][year]">\n)
0
     (Date.today.year-5).upto(Date.today.year+1) { |y| expected << %(<option value="#{y}">#{y}</option>\n) }

Comments