From e094940c2b5a5163504859efd3a0bcc49c40451e Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Mon, 23 Mar 2009 22:01:51 -0700 Subject: Move Numeric#to_utc_offset_s to TimeZone.seconds_to_utc_offset --- .../lib/active_support/core_ext/date_time/conversions.rb | 2 +- .../lib/active_support/core_ext/numeric/conversions.rb | 15 --------------- .../lib/active_support/core_ext/time/conversions.rb | 2 +- activesupport/lib/active_support/time_with_zone.rb | 2 +- activesupport/lib/active_support/values/time_zone.rb | 16 +++++++++++++++- activesupport/test/core_ext/numeric_ext_test.rb | 15 --------------- activesupport/test/time_zone_test.rb | 12 ++++++++++++ 7 files changed, 30 insertions(+), 34 deletions(-) delete mode 100644 activesupport/lib/active_support/core_ext/numeric/conversions.rb (limited to 'activesupport') diff --git a/activesupport/lib/active_support/core_ext/date_time/conversions.rb b/activesupport/lib/active_support/core_ext/date_time/conversions.rb index 7c948267b3..f2cc87e119 100644 --- a/activesupport/lib/active_support/core_ext/date_time/conversions.rb +++ b/activesupport/lib/active_support/core_ext/date_time/conversions.rb @@ -56,7 +56,7 @@ module ActiveSupport #:nodoc: # datetime.formatted_offset # => "-06:00" # datetime.formatted_offset(false) # => "-0600" def formatted_offset(colon = true, alternate_utc_string = nil) - utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon) + utc? && alternate_utc_string || TimeZone.seconds_to_utc_offset(utc_offset, colon) end # Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005 14:30:00 +0000" diff --git a/activesupport/lib/active_support/core_ext/numeric/conversions.rb b/activesupport/lib/active_support/core_ext/numeric/conversions.rb deleted file mode 100644 index a16a8e7c09..0000000000 --- a/activesupport/lib/active_support/core_ext/numeric/conversions.rb +++ /dev/null @@ -1,15 +0,0 @@ -class Numeric - UTC_OFFSET_WITH_COLON = '%+03d:%02d' - UTC_OFFSET_WITHOUT_COLON = UTC_OFFSET_WITH_COLON.sub(':', '') - - # Assumes self represents an offset from UTC in seconds (as returned from Time#utc_offset) - # and turns this into an +HH:MM formatted string. Example: - # - # -21_600.to_utc_offset_s # => "-06:00" - def to_utc_offset_s(colon = true) - format = colon ? UTC_OFFSET_WITH_COLON : UTC_OFFSET_WITHOUT_COLON - hours = self / 3600 - minutes = (abs % 3600) / 60 - format % [hours, minutes] - end -end diff --git a/activesupport/lib/active_support/core_ext/time/conversions.rb b/activesupport/lib/active_support/core_ext/time/conversions.rb index e6f9134661..d18a7e5295 100644 --- a/activesupport/lib/active_support/core_ext/time/conversions.rb +++ b/activesupport/lib/active_support/core_ext/time/conversions.rb @@ -54,7 +54,7 @@ module ActiveSupport #:nodoc: # Time.local(2000).formatted_offset # => "-06:00" # Time.local(2000).formatted_offset(false) # => "-0600" def formatted_offset(colon = true, alternate_utc_string = nil) - utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon) + utc? && alternate_utc_string || TimeZone.seconds_to_utc_offset(utc_offset, colon) end # Converts a Time object to a Date, dropping hour, minute, and second precision. diff --git a/activesupport/lib/active_support/time_with_zone.rb b/activesupport/lib/active_support/time_with_zone.rb index 518ca7742f..1937deff7c 100644 --- a/activesupport/lib/active_support/time_with_zone.rb +++ b/activesupport/lib/active_support/time_with_zone.rb @@ -87,7 +87,7 @@ module ActiveSupport alias_method :gmtoff, :utc_offset def formatted_offset(colon = true, alternate_utc_string = nil) - utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon) + utc? && alternate_utc_string || TimeZone.seconds_to_utc_offset(utc_offset, colon) end # Time uses +zone+ to display the time zone abbreviation, so we're duck-typing it. diff --git a/activesupport/lib/active_support/values/time_zone.rb b/activesupport/lib/active_support/values/time_zone.rb index 836f469df7..516ef2d8f0 100644 --- a/activesupport/lib/active_support/values/time_zone.rb +++ b/activesupport/lib/active_support/values/time_zone.rb @@ -170,6 +170,20 @@ module ActiveSupport MAPPING.freeze end + UTC_OFFSET_WITH_COLON = '%+03d:%02d' + UTC_OFFSET_WITHOUT_COLON = UTC_OFFSET_WITH_COLON.sub(':', '') + + # Assumes self represents an offset from UTC in seconds (as returned from Time#utc_offset) + # and turns this into an +HH:MM formatted string. Example: + # + # TimeZone.seconds_to_utc_offset(-21_600) # => "-06:00" + def self.seconds_to_utc_offset(seconds, colon = true) + format = colon ? UTC_OFFSET_WITH_COLON : UTC_OFFSET_WITHOUT_COLON + hours = seconds / 3600 + minutes = (seconds.abs % 3600) / 60 + format % [hours, minutes] + end + include Comparable attr_reader :name @@ -190,7 +204,7 @@ module ActiveSupport # Returns the offset of this time zone as a formatted string, of the # format "+HH:MM". def formatted_offset(colon=true, alternate_utc_string = nil) - utc_offset == 0 && alternate_utc_string || utc_offset.to_utc_offset_s(colon) + utc_offset == 0 && alternate_utc_string || self.class.seconds_to_utc_offset(utc_offset, colon) end # Compare this time zone to the parameter. The two are comapred first on diff --git a/activesupport/test/core_ext/numeric_ext_test.rb b/activesupport/test/core_ext/numeric_ext_test.rb index 5401ed7c7e..1beb038d56 100644 --- a/activesupport/test/core_ext/numeric_ext_test.rb +++ b/activesupport/test/core_ext/numeric_ext_test.rb @@ -145,18 +145,3 @@ class NumericExtSizeTest < Test::Unit::TestCase assert_equal 3458764513820540928, 3.exabyte end end - -class NumericExtConversionsTest < Test::Unit::TestCase - - def test_to_utc_offset_s_with_colon - assert_equal "-06:00", -21_600.to_utc_offset_s - assert_equal "+00:00", 0.to_utc_offset_s - assert_equal "+05:00", 18_000.to_utc_offset_s - end - - def test_to_utc_offset_s_without_colon - assert_equal "-0600", -21_600.to_utc_offset_s(false) - assert_equal "+0000", 0.to_utc_offset_s(false) - assert_equal "+0500", 18_000.to_utc_offset_s(false) - end -end diff --git a/activesupport/test/time_zone_test.rb b/activesupport/test/time_zone_test.rb index b01f62460a..d3dbeda2c8 100644 --- a/activesupport/test/time_zone_test.rb +++ b/activesupport/test/time_zone_test.rb @@ -196,6 +196,18 @@ class TimeZoneTest < Test::Unit::TestCase assert_equal(-18_000, zone.utc_offset) end + def test_seconds_to_utc_offset_with_colon + assert_equal "-06:00", TimeZone.seconds_to_utc_offset(-21_600) + assert_equal "+00:00", TimeZone.seconds_to_utc_offset(0) + assert_equal "+05:00", TimeZone.seconds_to_utc_offset(18_000) + end + + def test_seconds_to_utc_offset_without_colon + assert_equal "-0600", TimeZone.seconds_to_utc_offset(-21_600) + assert_equal "+0000", TimeZone.seconds_to_utc_offset(0) + assert_equal "+0500", TimeZone.seconds_to_utc_offset(18_000) + end + def test_formatted_offset_positive zone = ActiveSupport::TimeZone['Moscow'] assert_equal "+03:00", zone.formatted_offset -- cgit v1.2.3