summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--lib/pp.rb18
-rw-r--r--lib/time.rb35
3 files changed, 47 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index cbd89e6d6f..203d126631 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sat Aug 24 13:57:28 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/time.rb (Time.rfc2822, Time#rfc2822): preserve localtimeness.
+
+ * lib/pp.rb: pretty_print_cycled is renamed to pretty_print_cycle.
+
Fri Aug 23 23:59:57 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
* eval.c (method_call): check receiver is defined.
diff --git a/lib/pp.rb b/lib/pp.rb
index 46e066a078..81b06df003 100644
--- a/lib/pp.rb
+++ b/lib/pp.rb
@@ -83,9 +83,9 @@ PP#pp to print the object.
== methods
--- pp(obj)
adds ((|obj|)) to the pretty printing buffer
- using Object#pretty_print or Object#pretty_print_cycled.
+ using Object#pretty_print or Object#pretty_print_cycle.
- Object#pretty_print_cycled is used when ((|obj|)) is already
+ Object#pretty_print_cycle is used when ((|obj|)) is already
printed, a.k.a the object reference chain has a cycle.
--- object_group(obj) { ... }
@@ -111,7 +111,7 @@ PP#pp to print the object.
This module provides predefined pretty_print() methods for some of
the most commonly used built-in classes for convenience.
---- pretty_print_cycled(pp)
+--- pretty_print_cycle(pp)
is a default pretty printing method for general objects that are
detected as part of a cycle.
@@ -179,7 +179,7 @@ class PP < PrettyPrint
id = obj.__id__
if Thread.current[InspectKey].include? id
- group {obj.pretty_print_cycled self}
+ group {obj.pretty_print_cycle self}
return
end
@@ -273,7 +273,7 @@ class PP < PrettyPrint
end
end
- def pretty_print_cycled(pp)
+ def pretty_print_cycle(pp)
pp.object_address_group(self) {
pp.breakable
pp.text '...'
@@ -304,7 +304,7 @@ class Array
}
end
- def pretty_print_cycled(pp)
+ def pretty_print_cycle(pp)
pp.text(empty? ? '[]' : '[...]')
end
end
@@ -314,7 +314,7 @@ class Hash
pp.pp_hash self
end
- def pretty_print_cycled(pp)
+ def pretty_print_cycle(pp)
pp.text(empty? ? '{}' : '{...}')
end
end
@@ -341,7 +341,7 @@ class Struct
}
end
- def pretty_print_cycled(pp)
+ def pretty_print_cycle(pp)
pp.text sprintf("#<%s:...>", self.class.name)
end
end
@@ -440,7 +440,7 @@ end
[Numeric, Symbol, FalseClass, TrueClass, NilClass, Module].each {|c|
c.class_eval {
- alias :pretty_print_cycled :pretty_print
+ alias :pretty_print_cycle :pretty_print
}
}
diff --git a/lib/time.rb b/lib/time.rb
index 093d8f4a8b..bc1147104b 100644
--- a/lib/time.rb
+++ b/lib/time.rb
@@ -212,7 +212,10 @@ class Time
year
end
- Time.utc(year, mon, day, hour, min, sec) - zone_offset(zone)
+ t = Time.utc(year, mon, day, hour, min, sec)
+ offset = zone_offset(zone)
+ t = (t - offset).localtime if offset != 0 || zone == '+0000'
+ t
else
raise ArgumentError.new("not RFC 2822 compliant date: #{date.inspect}")
end
@@ -303,7 +306,7 @@ class Time
where zone is [+-]hhmm.
- If self is a UTC time, +0000 is used as zone.
+ If self is a UTC time, -0000 is used as zone.
=end
RFC2822_DAY_NAME = [
@@ -319,7 +322,7 @@ class Time
day, RFC2822_MONTH_NAME[mon-1], year,
hour, min, sec) +
if utc?
- '+0000'
+ '-0000'
else
off = utc_offset
sign = off < 0 ? '-' : '+'
@@ -447,6 +450,32 @@ if __FILE__ == $0
Time.httpdate("Fri, 31 Dec 1999 23:59:59 GMT"))
end
+ def test_rfc3339
+ t = Time.utc(1985, 4, 12, 23, 20, 50, 520000)
+ s = "1985-04-12T23:20:50.52Z"
+ assert_equal(t, Time.iso8601(s))
+ assert_equal(s, t.iso8601(2))
+
+ t = Time.utc(1996, 12, 20, 0, 39, 57)
+ s = "1996-12-19T16:39:57-08:00"
+ assert_equal(t, Time.iso8601(s))
+ # There is no way to generate time string with arbitrary timezone.
+ s = "1996-12-20T00:39:57Z"
+ assert_equal(t, Time.iso8601(s))
+ assert_equal(s, t.iso8601)
+
+ t = Time.utc(1990, 12, 31, 23, 59, 60)
+ s = "1990-12-31T23:59:60Z"
+ assert_equal(t, Time.iso8601(s))
+ # leap second is representable only if timezone file has it.
+ s = "1990-12-31T15:59:60-08:00"
+ assert_equal(t, Time.iso8601(s))
+
+ t = Time.utc(1937, 1, 1, 11, 40, 27, 870000)
+ s = "1937-01-01T12:00:27.87+00:20"
+ assert_equal(t, Time.iso8601(s))
+ end
+
# http://www.w3.org/TR/xmlschema-2/
def test_xmlschema
assert_equal(Time.utc(1999, 5, 31, 13, 20, 0) + 5 * 3600,