mirror of https://github.com/rails/rails
Return unmapped timezones from `country_zones`
If a country doesn't exist in the MAPPINGS hash then create a new `ActiveSupport::Timezone` instance using the supplied timezone id. Fixes #28431.
This commit is contained in:
parent
5561412ac2
commit
d28c482435
|
@ -250,14 +250,21 @@ module ActiveSupport
|
|||
# for time zones in the country specified by its ISO 3166-1 Alpha2 code.
|
||||
def country_zones(country_code)
|
||||
code = country_code.to_s.upcase
|
||||
@country_zones[code] ||=
|
||||
TZInfo::Country.get(code).zone_identifiers.map do |tz_id|
|
||||
name = MAPPING.key(tz_id)
|
||||
name && self[name]
|
||||
end.compact.sort!
|
||||
@country_zones[code] ||= load_country_zones(code)
|
||||
end
|
||||
|
||||
private
|
||||
def load_country_zones(code)
|
||||
country = TZInfo::Country.get(code)
|
||||
country.zone_identifiers.map do |tz_id|
|
||||
if MAPPING.value?(tz_id)
|
||||
self[MAPPING.key(tz_id)]
|
||||
else
|
||||
create(tz_id, nil, TZInfo::Timezone.new(tz_id))
|
||||
end
|
||||
end.sort!
|
||||
end
|
||||
|
||||
def zones_map
|
||||
@zones_map ||= begin
|
||||
MAPPING.each_key { |place| self[place] } # load all the zones
|
||||
|
|
|
@ -714,6 +714,10 @@ class TimeZoneTest < ActiveSupport::TestCase
|
|||
assert_not_includes ActiveSupport::TimeZone.country_zones(:ru), ActiveSupport::TimeZone["Kuala Lumpur"]
|
||||
end
|
||||
|
||||
def test_country_zones_without_mappings
|
||||
assert_includes ActiveSupport::TimeZone.country_zones(:sv), ActiveSupport::TimeZone["America/El_Salvador"]
|
||||
end
|
||||
|
||||
def test_to_yaml
|
||||
assert_equal("--- !ruby/object:ActiveSupport::TimeZone\nname: Pacific/Honolulu\n", ActiveSupport::TimeZone["Hawaii"].to_yaml)
|
||||
assert_equal("--- !ruby/object:ActiveSupport::TimeZone\nname: Europe/London\n", ActiveSupport::TimeZone["Europe/London"].to_yaml)
|
||||
|
|
Loading…
Reference in New Issue