diff options
author | Andrew White <andrew.white@unboxed.co> | 2018-02-19 10:24:13 +0000 |
---|---|---|
committer | Andrew White <andrew.white@unboxed.co> | 2018-02-19 10:37:35 +0000 |
commit | 2d95956e8b564236f0c5f98ea18d8535b05344f0 (patch) | |
tree | 4f4833dddfe790d4832ed5a1c12311ab54e93da0 /activesupport/lib | |
parent | f712ef27c55fc4210a722d447e05271adef1e57f (diff) | |
download | rails-2d95956e8b564236f0c5f98ea18d8535b05344f0.tar.gz rails-2d95956e8b564236f0c5f98ea18d8535b05344f0.tar.bz2 rails-2d95956e8b564236f0c5f98ea18d8535b05344f0.zip |
Return all mappings for a timezone id in `country_zones`
Some timezones like `Europe/London` have multiple mappings in
`ActiveSupport::TimeZone::MAPPING` so return all of them instead
of the first one found by using `Hash#value`. e.g:
# Before
ActiveSupport::TimeZone.country_zones("GB") # => ["Edinburgh"]
# After
ActiveSupport::TimeZone.country_zones("GB") # => ["Edinburgh", "London"]
Fixes #31668.
Diffstat (limited to 'activesupport/lib')
-rw-r--r-- | activesupport/lib/active_support/values/time_zone.rb | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/activesupport/lib/active_support/values/time_zone.rb b/activesupport/lib/active_support/values/time_zone.rb index 1de4748a46..9dfaddb825 100644 --- a/activesupport/lib/active_support/values/time_zone.rb +++ b/activesupport/lib/active_support/values/time_zone.rb @@ -267,11 +267,14 @@ module ActiveSupport country = TZInfo::Country.get(code) country.zone_identifiers.map do |tz_id| if MAPPING.value?(tz_id) - self[MAPPING.key(tz_id)] + MAPPING.inject([]) do |memo, (key, value)| + memo << self[key] if value == tz_id + memo + end else create(tz_id, nil, TZInfo::Timezone.new(tz_id)) end - end.sort! + end.flatten(1).sort! end def zones_map |