Skip to content
Browse files

Revert grep to select since they are not the same

A previous commit swapped out a call to select for a call to grep in
time_zone_options_for_select. This behavior actually causes the
regexp priority option to stop working.

ActiveSupport::TimeZone overrides the =~ operator which is what the
select block was using previously. Enumerable#grep
checks pattern === element and in this case that would be /US/ ===
ActiveSupport::TimeZone which does not work because
ActiveSupport::TimeZone does not supply an implicit converting to_str
method, only an explicit to_s method.

It would be impossible to provide a to_str method that behaves
identically to the =~ method provided on ActiveSupport::TimeZone
so the only option is to revert back to using select with =~.
  • Loading branch information...
1 parent 57fbcc5 commit 1cc991bef8687bd2d8ff0473c08709f7ee916885 @bdmac bdmac committed Mar 27, 2013
View
2 actionpack/lib/action_view/helpers/form_options_helper.rb
@@ -565,7 +565,7 @@ def time_zone_options_for_select(selected = nil, priority_zones = nil, model = :
if priority_zones
if priority_zones.is_a?(Regexp)
- priority_zones = zones.grep(priority_zones)
+ priority_zones = zones.select { |z| z =~ priority_zones }
end
zone_options.safe_concat options_for_select(convert_zones[priority_zones], selected)
View
5 actionpack/test/template/form_options_helper_test.rb
@@ -1095,12 +1095,11 @@ def test_time_zone_select_with_priority_zones
def test_time_zone_select_with_priority_zones_as_regexp
@firm = Firm.new("D")
- priority_zones = /A|D/
@fake_timezones.each_with_index do |tz, i|
- priority_zones.stubs(:===).with(tz).returns(i.zero? || i == 3)
+ tz.stubs(:=~).returns(i.zero? || i == 3)
end
- html = time_zone_select("firm", "time_zone", priority_zones)
+ html = time_zone_select("firm", "time_zone", /A|D/)
assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
"<option value=\"A\">A</option>\n" +
"<option value=\"D\" selected=\"selected\">D</option>" +

0 comments on commit 1cc991b

Please sign in to comment.
Something went wrong with that request. Please try again.