[前][次][番号順一覧][スレッド一覧]

ruby-changes:16550

From: tenderlove <ko1@a...>
Date: Mon, 5 Jul 2010 12:34:22 +0900 (JST)
Subject: [ruby-changes:16550] Ruby:r28541 (trunk): * ext/psych/lib/psych/scalar_scanner.rb (parse_string): support

tenderlove	2010-07-05 12:33:56 +0900 (Mon, 05 Jul 2010)

  New Revision: 28541

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28541

  Log:
    * ext/psych/lib/psych/scalar_scanner.rb (parse_string): support
      timezones that are not one hour off. [ruby-core:31023]
    * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto

  Modified files:
    trunk/ChangeLog
    trunk/ext/psych/lib/psych/scalar_scanner.rb
    trunk/ext/psych/lib/psych/visitors/yaml_tree.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28540)
+++ ChangeLog	(revision 28541)
@@ -1,3 +1,10 @@
+Mon Jul  5 12:32:01 2010  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych/scalar_scanner.rb (parse_string): support
+	  timezones that are not one hour off. [ruby-core:31023]
+
+	* ext/psych/lib/psych/visitors/yaml_tree.rb: ditto
+
 Sun Jul  4 22:49:54 2010  Tanaka Akira  <akr@f...>
 
 	* test/ruby/test_syntax.rb: split test_syntax from test_system.rb.
Index: ext/psych/lib/psych/scalar_scanner.rb
===================================================================
--- ext/psych/lib/psych/scalar_scanner.rb	(revision 28540)
+++ ext/psych/lib/psych/scalar_scanner.rb	(revision 28541)
@@ -88,9 +88,11 @@
       time = Time.utc(yy, m, dd, hh, mm, ss, us)
 
       return time if 'Z' == md[3]
+      return Time.at(time.to_i, us) unless md[3]
 
-      tz = md[3] ? Integer(md[3].split(':').first.sub(/([-+])0/, '\1')) : 0
-      Time.at((time - (tz * 3600)).to_i, us)
+      tz = md[3].split(':').map { |digit| Integer(digit.sub(/([-+])0/, '\1')) }
+      offset = tz.first * 3600 + ((tz[1] || 0) * 60)
+      Time.at((time - offset).to_i, us)
     end
   end
 end
Index: ext/psych/lib/psych/visitors/yaml_tree.rb
===================================================================
--- ext/psych/lib/psych/visitors/yaml_tree.rb	(revision 28540)
+++ ext/psych/lib/psych/visitors/yaml_tree.rb	(revision 28541)
@@ -136,26 +136,13 @@
       end
 
       def visit_DateTime o
-        o = o.to_time
-        formatted = o.strftime("%Y-%m-%d %H:%M:%S")
-        if o.utc?
-          formatted += ".%06dZ" % [o.nsec]
-        else
-          formatted += ".%06d %+.2d:00" % [o.nsec, o.gmt_offset / 3600]
-        end
-
+        formatted = format_time o.to_time
         tag = '!ruby/object:DateTime'
         @emitter.scalar formatted, nil, tag, false, false, Nodes::Scalar::ANY
       end
 
       def visit_Time o
-        formatted = o.strftime("%Y-%m-%d %H:%M:%S")
-        if o.utc?
-          formatted += ".%06dZ" % [o.nsec]
-        else
-          formatted += ".%06d %+.2d:00" % [o.nsec, o.gmt_offset / 3600]
-        end
-
+        formatted = format_time o
         @emitter.scalar formatted, nil, nil, true, false, Nodes::Scalar::ANY
       end
 
@@ -281,6 +268,17 @@
       end
 
       private
+      def format_time time
+        formatted = time.strftime("%Y-%m-%d %H:%M:%S")
+        if time.utc?
+          formatted += ".%06dZ" % [time.nsec]
+        else
+          formatted += ".%06d %+.2d:%.2d" % [time.nsec,
+            time.gmt_offset / 3600, time.gmt_offset % 3600 / 60]
+        end
+        formatted
+      end
+
       # FIXME: remove this method once "to_yaml_properties" is removed
       def find_ivars target
         loc = target.method(:to_yaml_properties).source_location.first

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]