Skip to content

Commit f2209e9

Browse files
authored
Merge pull request rails#43037 from DRBragg/drbragg/update_weekday_select
Add `beginning_of_week` option to `weekday_options_for_select`
2 parents fbf70a2 + 451c55e commit f2209e9

File tree

3 files changed

+39
-12
lines changed

3 files changed

+39
-12
lines changed

actionview/lib/action_view/helpers/form_options_helper.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -597,15 +597,18 @@ def time_zone_options_for_select(selected = nil, priority_zones = nil, model = :
597597
# Returns a string of option tags for the days of the week.
598598
#
599599
# Options:
600-
# * <tt>:index_as_value</tt> - Defaults to false, set to true to use the index of the weekday as the value.
600+
# * <tt>:index_as_value</tt> - Defaults to false, set to true to use the indexes from
601+
# `I18n.translate("date.day_names")` as the values. By default, Sunday is always 0.
601602
# * <tt>:day_format</tt> - The I18n key of the array to use for the weekday options.
602603
# Defaults to :day_names, set to :abbr_day_names for abbreviations.
604+
# * <tt>:beginning_of_week</tt> - Defaults to Date.beginning_of_week.
603605
#
604606
# NOTE: Only the option tags are returned, you have to wrap this call in
605607
# a regular HTML select tag.
606-
def weekday_options_for_select(selected = nil, index_as_value: false, day_format: :day_names)
608+
def weekday_options_for_select(selected = nil, index_as_value: false, day_format: :day_names, beginning_of_week: Date.beginning_of_week)
607609
day_names = I18n.translate("date.#{day_format}")
608-
day_names = day_names.map.with_index.to_h if index_as_value
610+
day_names = day_names.map.with_index.to_a if index_as_value
611+
day_names = day_names.rotate(Date::DAYS_INTO_WEEK.fetch(beginning_of_week))
609612

610613
options_for_select(day_names, selected)
611614
end

actionview/lib/action_view/helpers/tags/weekday_select.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ def render
1515
weekday_options_for_select(
1616
value || @options[:selected],
1717
index_as_value: @options.fetch(:index_as_value, false),
18-
day_format: @options.fetch(:day_format, :day_names)
18+
day_format: @options.fetch(:day_format, :day_names),
19+
beginning_of_week: @options.fetch(:beginning_of_week, Date.beginning_of_week)
1920
),
2021
@options,
2122
@html_options

actionview/test/template/form_options_helper_test.rb

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,42 +1510,65 @@ def test_grouped_collection_select_under_fields_for
15101510

15111511
def test_weekday_options_for_select_with_no_params
15121512
assert_dom_equal(
1513-
"<option value=\"Sunday\">Sunday</option>\n<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>",
1513+
"<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>\n<option value=\"Sunday\">Sunday</option>",
15141514
weekday_options_for_select
15151515
)
15161516
end
15171517

15181518
def test_weekday_options_for_select_with_index_as_value
15191519
assert_dom_equal(
1520-
"<option value=\"0\">Sunday</option>\n<option value=\"1\">Monday</option>\n<option value=\"2\">Tuesday</option>\n<option value=\"3\">Wednesday</option>\n<option value=\"4\">Thursday</option>\n<option value=\"5\">Friday</option>\n<option value=\"6\">Saturday</option>",
1520+
"<option value=\"1\">Monday</option>\n<option value=\"2\">Tuesday</option>\n<option value=\"3\">Wednesday</option>\n<option value=\"4\">Thursday</option>\n<option value=\"5\">Friday</option>\n<option value=\"6\">Saturday</option>\n<option value=\"0\">Sunday</option>",
15211521
weekday_options_for_select(index_as_value: true)
15221522
)
15231523
end
15241524

15251525
def test_weekday_options_for_select_with_abberviated_day_names
15261526
assert_dom_equal(
1527-
"<option value=\"Sun\">Sun</option>\n<option value=\"Mon\">Mon</option>\n<option value=\"Tue\">Tue</option>\n<option value=\"Wed\">Wed</option>\n<option value=\"Thu\">Thu</option>\n<option value=\"Fri\">Fri</option>\n<option value=\"Sat\">Sat</option>",
1527+
"<option value=\"Mon\">Mon</option>\n<option value=\"Tue\">Tue</option>\n<option value=\"Wed\">Wed</option>\n<option value=\"Thu\">Thu</option>\n<option value=\"Fri\">Fri</option>\n<option value=\"Sat\">Sat</option>\n<option value=\"Sun\">Sun</option>",
15281528
weekday_options_for_select(day_format: :abbr_day_names)
15291529
)
15301530
end
15311531

1532+
def test_weekday_options_for_select_with_beginning_of_week_set_to_sunday
1533+
assert_dom_equal(
1534+
"<option value=\"Sunday\">Sunday</option>\n<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>",
1535+
weekday_options_for_select(beginning_of_week: :sunday)
1536+
)
1537+
end
1538+
1539+
def test_weekday_options_for_select_with_beginning_of_week_set_to_saturday
1540+
assert_dom_equal(
1541+
"<option value=\"Saturday\">Saturday</option>\n<option value=\"Sunday\">Sunday</option>\n<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>",
1542+
weekday_options_for_select(beginning_of_week: :saturday)
1543+
)
1544+
end
1545+
1546+
def test_weekday_options_for_select_with_beginning_of_week_set_elsewhere
1547+
Date.beginning_of_week = :sunday
1548+
assert_dom_equal(
1549+
"<option value=\"Sunday\">Sunday</option>\n<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>",
1550+
weekday_options_for_select
1551+
)
1552+
Date.beginning_of_week = :monday
1553+
end
1554+
15321555
def test_weekday_options_for_select_with_selected_value
15331556
assert_dom_equal(
1534-
"<option value=\"Sunday\">Sunday</option>\n<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option selected=\"selected\" value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>",
1557+
"<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option selected=\"selected\" value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>\n<option value=\"Sunday\">Sunday</option>",
15351558
weekday_options_for_select("Friday")
15361559
)
15371560
end
15381561

15391562
def test_weekday_select
15401563
assert_dom_equal(
1541-
"<select name=\"model[weekday]\" id=\"model_weekday\"><option value=\"Sunday\">Sunday</option>\n<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option></select>",
1564+
"<select name=\"model[weekday]\" id=\"model_weekday\"><option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>\n<option value=\"Sunday\">Sunday</option></select>",
15421565
weekday_select(:model, :weekday)
15431566
)
15441567
end
15451568

15461569
def test_weekday_select_with_selected_value
15471570
assert_dom_equal(
1548-
"<select name=\"model[weekday]\" id=\"model_weekday\"><option value=\"Sunday\">Sunday</option>\n<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option selected=\"selected\" value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option></select>",
1571+
"<select name=\"model[weekday]\" id=\"model_weekday\"><option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option selected=\"selected\" value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>\n<option value=\"Sunday\">Sunday</option></select>",
15491572
weekday_select(:model, :weekday, selected: "Friday")
15501573
)
15511574
end
@@ -1558,7 +1581,7 @@ def test_weekday_select_under_fields_for
15581581
end
15591582

15601583
assert_dom_equal(
1561-
"<select id=\"digest_send_day\" name=\"digest[send_day]\"><option value=\"Sunday\">Sunday</option>\n<option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option></select>",
1584+
"<select id=\"digest_send_day\" name=\"digest[send_day]\"><option value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>\n<option value=\"Sunday\">Sunday</option></select>",
15621585
output_buffer
15631586
)
15641587
end
@@ -1572,7 +1595,7 @@ def test_weekday_select_under_fields_for_with_value
15721595
end
15731596

15741597
assert_dom_equal(
1575-
"<select name=\"digest[send_day]\" id=\"digest_send_day\"><option value=\"Sunday\">Sunday</option>\n<option selected=\"selected\" value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option></select>",
1598+
"<select name=\"digest[send_day]\" id=\"digest_send_day\"><option selected=\"selected\" value=\"Monday\">Monday</option>\n<option value=\"Tuesday\">Tuesday</option>\n<option value=\"Wednesday\">Wednesday</option>\n<option value=\"Thursday\">Thursday</option>\n<option value=\"Friday\">Friday</option>\n<option value=\"Saturday\">Saturday</option>\n<option value=\"Sunday\">Sunday</option></select>",
15761599
output_buffer
15771600
)
15781601
end

0 commit comments

Comments
 (0)