diff options
author | Santiago Pastorino <santiago@wyeworks.com> | 2010-04-02 16:44:38 -0300 |
---|---|---|
committer | Santiago Pastorino <santiago@wyeworks.com> | 2010-04-02 17:43:48 -0300 |
commit | 1b742ea9b100278dd818879a4162dab1a2c0e6d4 (patch) | |
tree | eea2fb35a6a69a373a46ed4222807c728cad63b9 /activesupport/lib | |
parent | 90e3343ae5f9daa1458fc37e220d89cdb41b3185 (diff) | |
download | rails-1b742ea9b100278dd818879a4162dab1a2c0e6d4.tar.gz rails-1b742ea9b100278dd818879a4162dab1a2c0e6d4.tar.bz2 rails-1b742ea9b100278dd818879a4162dab1a2c0e6d4.zip |
delegate unknown timezones to TZInfo
Diffstat (limited to 'activesupport/lib')
-rw-r--r-- | activesupport/lib/active_support/values/time_zone.rb | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/activesupport/lib/active_support/values/time_zone.rb b/activesupport/lib/active_support/values/time_zone.rb index b9766a236a..03b324764b 100644 --- a/activesupport/lib/active_support/values/time_zone.rb +++ b/activesupport/lib/active_support/values/time_zone.rb @@ -310,13 +310,15 @@ module ActiveSupport end def tzinfo - @tzinfo ||= find_tzinfo + @tzinfo ||= TimeZone.find_tzinfo(name) end # TODO: Preload instead of lazy load for thread safety - def find_tzinfo + def self.find_tzinfo(name) require 'tzinfo' unless defined?(::TZInfo) - ::TZInfo::Timezone.get(MAPPING[name]) + ::TZInfo::Timezone.get(MAPPING[name] || name) + rescue TZInfo::InvalidTimezoneIdentifier + nil end unless const_defined?(:ZONES) @@ -330,7 +332,6 @@ module ActiveSupport end ZONES.sort! ZONES.freeze - ZONES_MAP.freeze US_ZONES = ZONES.find_all { |z| z.name =~ /US|Arizona|Indiana|Hawaii|Alaska/ } US_ZONES.freeze @@ -361,7 +362,7 @@ module ActiveSupport def [](arg) case arg when String - ZONES_MAP[arg] + ZONES_MAP[arg] ||= lookup(arg) when Numeric, ActiveSupport::Duration arg *= 3600 if arg.abs <= 13 all.find { |z| z.utc_offset == arg.to_i } @@ -375,6 +376,12 @@ module ActiveSupport def us_zones US_ZONES end + + private + + def lookup(name) + (tzinfo = find_tzinfo(name)) && create(tzinfo.name.freeze) + end end end end |