diff options
author | Andrew White <andyw@pixeltrix.co.uk> | 2013-02-19 23:26:48 -0800 |
---|---|---|
committer | Andrew White <andyw@pixeltrix.co.uk> | 2013-02-19 23:26:48 -0800 |
commit | c3f1b1d3cdb837a24d66b80deda39cfe23856724 (patch) | |
tree | d67ba9390795752a4c2afc5ff14bc009d45ff25a | |
parent | 862e75160b0856c3f9165601b3c11b881e0844b9 (diff) | |
parent | 5c73f0d398d2a7ed955040e580374e92d6536283 (diff) | |
download | rails-c3f1b1d3cdb837a24d66b80deda39cfe23856724.tar.gz rails-c3f1b1d3cdb837a24d66b80deda39cfe23856724.tar.bz2 rails-c3f1b1d3cdb837a24d66b80deda39cfe23856724.zip |
Merge pull request #9330 from bdmac/time_zone_select_dup
Fix time_zone_options_for_select to not mutate TimeZones array
-rw-r--r-- | actionpack/CHANGELOG.md | 8 | ||||
-rw-r--r-- | actionpack/lib/action_view/helpers/form_options_helper.rb | 2 | ||||
-rw-r--r-- | actionpack/test/template/form_options_helper_test.rb | 7 |
3 files changed, 16 insertions, 1 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 6047c83167..9b8b175450 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,5 +1,13 @@ ## Rails 4.0.0 (unreleased) ## +* Fix `time_zone_options_for_select` to call `dup` on the returned TimeZone array. + + Previously if you supplied :priority_zones options to `time_zone_options_for_select` + the memoized ActiveSupport::TimeZone.all array would be mutated. Calling + `dup` prevents mutation of the main TimeZones array. + + *Brian McManus* + * Remove support for parsing YAML parameters from request. *Aaron Patterson* diff --git a/actionpack/lib/action_view/helpers/form_options_helper.rb b/actionpack/lib/action_view/helpers/form_options_helper.rb index 8b3a37a853..49473dd129 100644 --- a/actionpack/lib/action_view/helpers/form_options_helper.rb +++ b/actionpack/lib/action_view/helpers/form_options_helper.rb @@ -560,7 +560,7 @@ module ActionView def time_zone_options_for_select(selected = nil, priority_zones = nil, model = ::ActiveSupport::TimeZone) zone_options = "".html_safe - zones = model.all + zones = model.all.dup convert_zones = lambda { |list| list.map { |z| [ z.to_s, z.name ] } } if priority_zones diff --git a/actionpack/test/template/form_options_helper_test.rb b/actionpack/test/template/form_options_helper_test.rb index c5efed3195..757b05dbc1 100644 --- a/actionpack/test/template/form_options_helper_test.rb +++ b/actionpack/test/template/form_options_helper_test.rb @@ -416,6 +416,13 @@ class FormOptionsHelperTest < ActionView::TestCase "<option value=\"D\">D</option>", opts end + + def test_time_zone_options_with_priority_zones_does_not_mutate_time_zones + original_zones = ActiveSupport::TimeZone.all.dup + zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ] + opts = time_zone_options_for_select( nil, zones ) + assert_equal original_zones, ActiveSupport::TimeZone.all + end def test_time_zone_options_returns_html_safe_string assert time_zone_options_for_select.html_safe? |