Permalink
Browse files

Switch to TimezoneProxy for later support of deferred TZ loading

  • Loading branch information...
1 parent a90a076 commit 9934738ed5f05fe78cdf2c4cf5fcaae7227d5e1e @jeremy jeremy committed Apr 20, 2010
View
4 activesupport/lib/active_support/values/time_zone.rb
@@ -317,9 +317,7 @@ def tzinfo
# TODO: Preload instead of lazy load for thread safety
def self.find_tzinfo(name)
require 'tzinfo' unless defined?(::TZInfo)
- ::TZInfo::Timezone.get(MAPPING[name] || name)
- rescue TZInfo::InvalidTimezoneIdentifier
- nil
+ ::TZInfo::TimezoneProxy.new(MAPPING[name] || name)
end
unless const_defined?(:ZONES)
View
7 activesupport/test/core_ext/time_with_zone_test.rb
@@ -823,9 +823,12 @@ def test_time_zone_setter_with_tzinfo_timezone_identifier_does_lookup_and_wraps_
assert_equal(-18_000, Time.zone.utc_offset)
end
- def test_time_zone_setter_with_non_identifying_argument_returns_nil
+ def test_time_zone_setter_with_invalid_zone
Time.zone = 'foo'
- assert_equal nil, Time.zone
+ assert_not_nil Time.zone
+ assert_equal 'foo', Time.zone.name
+ assert_raise(TZInfo::InvalidTimezoneIdentifier) { Time.zone.utc_offset }
+
Time.zone = -15.hours
assert_equal nil, Time.zone
end
View
8 activesupport/test/time_zone_test.rb
@@ -268,16 +268,16 @@ def test_all_sorted
end
def test_index
- assert_nil ActiveSupport::TimeZone["bogus"]
+ assert_not_nil ActiveSupport::TimeZone["bogus"]
assert_instance_of ActiveSupport::TimeZone, ActiveSupport::TimeZone["Central Time (US & Canada)"]
assert_instance_of ActiveSupport::TimeZone, ActiveSupport::TimeZone[8]
assert_raise(ArgumentError) { ActiveSupport::TimeZone[false] }
end
- def test_unknown_zone_shouldnt_have_tzinfo_nor_utc_offset
+ def test_unknown_zone_should_have_tzinfo_but_exception_on_utc_offset
zone = ActiveSupport::TimeZone.create("bogus")
- assert_nil zone.tzinfo
- assert_nil zone.utc_offset
+ assert_instance_of TZInfo::TimezoneProxy, zone.tzinfo
+ assert_raise(TZInfo::InvalidTimezoneIdentifier) { zone.utc_offset }
end
def test_unknown_zone_with_utc_offset

0 comments on commit 9934738

Please sign in to comment.