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

ruby-changes:21968

From: tenderlove <ko1@a...>
Date: Tue, 13 Dec 2011 02:47:45 +0900 (JST)
Subject: [ruby-changes:21968] tenderlove:r34017 (ruby_1_9_3): merge revision(s) 33160,33381,33382,33383,33384,33385:

tenderlove	2011-12-13 02:47:29 +0900 (Tue, 13 Dec 2011)

  New Revision: 34017

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

  Log:
    merge revision(s) 33160,33381,33382,33383,33384,33385:
    
        * ext/psych/lib/psych.rb: update psych version.
        * ext/psych/psych.gemspec: generate new gemspec for new version.
    
        * ext/psych/lib/psych.rb: calling `yaml` rather than `to_yaml`.
        * ext/psych/lib/psych/nodes/node.rb: Rename `to_yaml` to just `yaml`
          in order to avoid YAML::ENGINE switching from replacing this method.
        * test/psych/helper.rb: fix tests for method name change.
        * test/psych/test_document.rb: ditto
        * test/psych/visitors/test_emitter.rb: ditto
    
        * ext/psych/lib/psych/scalar_scanner.rb: Match values against the
          floating point spec defined in YAML to avoid erronious parses.
        * test/psych/test_numeric.rb: corresponding test.
    
        * ext/psych/lib/psych/visitors/to_ruby.rb: ToRuby visitor can be
          constructed with a ScalarScanner.
        * ext/psych/lib/psych/visitors/yaml_tree.rb: ScalarScanner can be
          passed to the YAMLTree visitor.
    
        * ext/psych/lib/psych/visitors/to_ruby.rb: Define Regexp::NOENCODING
          for 1.9.2 backwards compatibility.
        * ext/psych/lib/psych/visitors/yaml_tree.rb: Fix Date string
          generation for 1.9.2 backwards compatibility.
    
        * ext/psych/lib/psych/visitors/yaml_tree.rb: emit strings tagged as
          ascii-8bit as binary in YAML.
        * test/psych/test_string.rb: corresponding test.

  Added directories:
    branches/ruby_1_9_3/test/dtrace/
  Added files:
    branches/ruby_1_9_3/test/dtrace/test_object_create.rb
    branches/ruby_1_9_3/test/psych/test_numeric.rb
  Modified files:
    branches/ruby_1_9_3/ChangeLog
    branches/ruby_1_9_3/ext/psych/lib/psych/nodes/node.rb
    branches/ruby_1_9_3/ext/psych/lib/psych/scalar_scanner.rb
    branches/ruby_1_9_3/ext/psych/lib/psych/visitors/to_ruby.rb
    branches/ruby_1_9_3/ext/psych/lib/psych/visitors/yaml_tree.rb
    branches/ruby_1_9_3/ext/psych/lib/psych.rb
    branches/ruby_1_9_3/test/psych/helper.rb
    branches/ruby_1_9_3/test/psych/test_document.rb
    branches/ruby_1_9_3/test/psych/test_string.rb
    branches/ruby_1_9_3/test/psych/visitors/test_emitter.rb
    branches/ruby_1_9_3/version.h

Index: ruby_1_9_3/ChangeLog
===================================================================
--- ruby_1_9_3/ChangeLog	(revision 34016)
+++ ruby_1_9_3/ChangeLog	(revision 34017)
@@ -1,3 +1,43 @@
+Tue Oct  4 06:43:47 2011  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych.rb: update psych version.
+	* ext/psych/psych.gemspec: generate new gemspec for new version.
+
+Tue Oct  4 06:29:55 2011  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych.rb: calling `yaml` rather than `to_yaml`.
+	* ext/psych/lib/psych/nodes/node.rb: Rename `to_yaml` to just `yaml`
+	  in order to avoid YAML::ENGINE switching from replacing this method.
+	* test/psych/helper.rb: fix tests for method name change.
+	* test/psych/test_document.rb: ditto
+	* test/psych/visitors/test_emitter.rb: ditto
+
+Tue Oct  4 06:20:19 2011  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych/scalar_scanner.rb: Match values against the
+	  floating point spec defined in YAML to avoid erronious parses.
+	* test/psych/test_numeric.rb: corresponding test.
+
+Tue Oct  4 05:59:24 2011  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych/visitors/to_ruby.rb: ToRuby visitor can be
+	  constructed with a ScalarScanner.
+	* ext/psych/lib/psych/visitors/yaml_tree.rb: ScalarScanner can be
+	  passed to the YAMLTree visitor.
+
+Tue Oct  4 05:47:23 2011  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych/visitors/to_ruby.rb: Define Regexp::NOENCODING
+	  for 1.9.2 backwards compatibility.
+	* ext/psych/lib/psych/visitors/yaml_tree.rb: Fix Date string
+	  generation for 1.9.2 backwards compatibility.
+
+Fri Sep  2 04:05:25 2011  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych/visitors/yaml_tree.rb: emit strings tagged as
+	  ascii-8bit as binary in YAML.
+	* test/psych/test_string.rb: corresponding test.
+
 Wed Dec  7 19:04:22 2011  Nobuyoshi Nakada  <nobu@r...>
 
 	* configure.in (rpath): fix typo in the help string.  a patch from
Index: ruby_1_9_3/ext/psych/lib/psych/scalar_scanner.rb
===================================================================
--- ruby_1_9_3/ext/psych/lib/psych/scalar_scanner.rb	(revision 34016)
+++ ruby_1_9_3/ext/psych/lib/psych/scalar_scanner.rb	(revision 34017)
@@ -7,6 +7,12 @@
     # Taken from http://yaml.org/type/timestamp.html
     TIME = /^\d{4}-\d{1,2}-\d{1,2}([Tt]|\s+)\d{1,2}:\d\d:\d\d(\.\d*)?(\s*Z|[-+]\d{1,2}(:\d\d)?)?/
 
+    # Taken from http://yaml.org/type/float.html
+    FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9.]*([eE][-+][0-9]+)?(?# base 10)
+              |[-+]?[0-9][0-9_,]*(:[0-5]?[0-9])+\.[0-9_]*(?# base 60)
+              |[-+]?\.(inf|Inf|INF)(?# infinity)
+              |\.(nan|NaN|NAN)(?# not a number))$/x
+
     # Create a new scanner
     def initialize
       @string_cache = {}
@@ -67,11 +73,18 @@
           i += (n.to_f * 60 ** (e - 2).abs)
         end
         i
-      else
-        return Integer(string.gsub(/[,_]/, '')) rescue ArgumentError
+      when FLOAT
         return Float(string.gsub(/[,_]/, '')) rescue ArgumentError
+
         @string_cache[string] = true
         string
+      else
+        if string.count('.') < 2
+          return Integer(string.gsub(/[,_]/, '')) rescue ArgumentError
+        end
+
+        @string_cache[string] = true
+        string
       end
     end
 
Index: ruby_1_9_3/ext/psych/lib/psych/visitors/yaml_tree.rb
===================================================================
--- ruby_1_9_3/ext/psych/lib/psych/visitors/yaml_tree.rb	(revision 34016)
+++ ruby_1_9_3/ext/psych/lib/psych/visitors/yaml_tree.rb	(revision 34017)
@@ -12,13 +12,13 @@
       alias :finished? :finished
       alias :started? :started
 
-      def initialize options = {}, emitter = Psych::TreeBuilder.new
+      def initialize options = {}, emitter = TreeBuilder.new, ss = ScalarScanner.new
         super()
         @started  = false
         @finished = false
         @emitter  = emitter
         @st       = {}
-        @ss       = ScalarScanner.new
+        @ss       = ss
         @options  = options
 
         @dispatch_cache = Hash.new do |h,klass|
@@ -214,12 +214,19 @@
         end
       end
 
+      def binary? string
+        string.encoding == Encoding::ASCII_8BIT ||
+          string.index("\x00") ||
+          string.count("\x00-\x7F", "^ -~\t\r\n").fdiv(string.length) > 0.3
+      end
+      private :binary?
+
       def visit_String o
         plain = false
         quote = false
         style = Nodes::Scalar::ANY
 
-        if o.index("\x00") || o.count("\x00-\x7F", "^ -~\t\r\n").fdiv(o.length) > 0.3
+        if binary?(o)
           str   = [o].pack('m').chomp
           tag   = '!binary' # FIXME: change to below when syck is removed
           #tag   = 'tag:yaml.org,2002:binary'
@@ -304,12 +311,28 @@
       end
 
       private
-      def format_time time
-        if time.utc?
-          time.strftime("%Y-%m-%d %H:%M:%S.%9N Z")
-        else
-          time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")
+      # '%:z' was no defined until 1.9.3
+      if RUBY_VERSION < '1.9.3'
+        def format_time time
+          formatted = time.strftime("%Y-%m-%d %H:%M:%S.%9N")
+
+          if time.utc?
+            formatted += " Z"
+          else
+            zone = time.strftime('%z')
+            formatted += " #{zone[0,3]}:#{zone[3,5]}"
+          end
+
+          formatted
         end
+      else
+        def format_time time
+          if time.utc?
+            time.strftime("%Y-%m-%d %H:%M:%S.%9N Z")
+          else
+            time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")
+          end
+        end
       end
 
       # FIXME: remove this method once "to_yaml_properties" is removed
Index: ruby_1_9_3/ext/psych/lib/psych/visitors/to_ruby.rb
===================================================================
--- ruby_1_9_3/ext/psych/lib/psych/visitors/to_ruby.rb	(revision 34016)
+++ ruby_1_9_3/ext/psych/lib/psych/visitors/to_ruby.rb	(revision 34017)
@@ -1,14 +1,18 @@
 require 'psych/scalar_scanner'
 
+unless defined?(Regexp::NOENCODING)
+  Regexp::NOENCODING = 32
+end
+
 module Psych
   module Visitors
     ###
     # This class walks a YAML AST, converting each node to ruby
     class ToRuby < Psych::Visitors::Visitor
-      def initialize
-        super
+      def initialize ss = ScalarScanner.new
+        super()
         @st = {}
-        @ss = ScalarScanner.new
+        @ss = ss
         @domain_types = Psych.domain_types
       end
 
Index: ruby_1_9_3/ext/psych/lib/psych/nodes/node.rb
===================================================================
--- ruby_1_9_3/ext/psych/lib/psych/nodes/node.rb	(revision 34016)
+++ ruby_1_9_3/ext/psych/lib/psych/nodes/node.rb	(revision 34017)
@@ -40,13 +40,14 @@
       # Convert this node to YAML.
       #
       # See also Psych::Visitors::Emitter
-      def to_yaml io = nil, options = {}
+      def yaml io = nil, options = {}
         real_io = io || StringIO.new(''.encode('utf-8'))
 
         Visitors::Emitter.new(real_io, options).accept self
         return real_io.string unless io
         io
       end
+      alias :to_yaml :yaml
     end
   end
 end
Index: ruby_1_9_3/ext/psych/lib/psych.rb
===================================================================
--- ruby_1_9_3/ext/psych/lib/psych.rb	(revision 34016)
+++ ruby_1_9_3/ext/psych/lib/psych.rb	(revision 34017)
@@ -90,7 +90,7 @@
 
 module Psych
   # The version is Psych you're using
-  VERSION         = '1.2.1'
+  VERSION         = '1.2.2'
 
   # The version of libyaml Psych is using
   LIBYAML_VERSION = Psych.libyaml_version.join '.'
@@ -187,7 +187,7 @@
 
     visitor = Psych::Visitors::YAMLTree.new options
     visitor << o
-    visitor.tree.to_yaml io, options
+    visitor.tree.yaml io, options
   end
 
   ###
@@ -201,7 +201,7 @@
     objects.each do |o|
       visitor << o
     end
-    visitor.tree.to_yaml
+    visitor.tree.yaml
   end
 
   ###
@@ -209,7 +209,7 @@
   def self.to_json o
     visitor = Psych::Visitors::JSONTree.new
     visitor << o
-    visitor.tree.to_yaml
+    visitor.tree.yaml
   end
 
   ###
Index: ruby_1_9_3/version.h
===================================================================
--- ruby_1_9_3/version.h	(revision 34016)
+++ ruby_1_9_3/version.h	(revision 34017)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 5
+#define RUBY_PATCHLEVEL 6
 
 #define RUBY_RELEASE_DATE "2011-12-07"
 #define RUBY_RELEASE_YEAR 2011
Index: ruby_1_9_3/test/dtrace/test_object_create.rb
===================================================================
--- ruby_1_9_3/test/dtrace/test_object_create.rb	(revision 0)
+++ ruby_1_9_3/test/dtrace/test_object_create.rb	(revision 34017)
@@ -0,0 +1,13 @@
+require 'minitest/autorun'
+
+module DTrace
+  class TestObjectCreate < MiniTest::Unit::TestCase
+    def setup
+      skip "must be setuid 0 to run dtrace tests" unless Process.euid == 0
+    end
+
+    def test_zomg
+      flunk "rawr"
+    end
+  end
+end
Index: ruby_1_9_3/test/psych/test_document.rb
===================================================================
--- ruby_1_9_3/test/psych/test_document.rb	(revision 34016)
+++ ruby_1_9_3/test/psych/test_document.rb	(revision 34017)
@@ -18,12 +18,12 @@
     end
 
     def test_emit_tag
-      assert_match('%TAG ! tag:tenderlovemaking.com,2009:', @stream.to_yaml)
+      assert_match('%TAG ! tag:tenderlovemaking.com,2009:', @stream.yaml)
     end
 
     def test_emit_multitag
       @doc.tag_directives << ['!!', 'foo.com,2009:']
-      yaml = @stream.to_yaml
+      yaml = @stream.yaml
       assert_match('%TAG ! tag:tenderlovemaking.com,2009:', yaml)
       assert_match('%TAG !! foo.com,2009:', yaml)
     end
@@ -31,7 +31,7 @@
     def test_emit_bad_tag
       assert_raises(RuntimeError) do
         @doc.tag_directives = [['!']]
-        @stream.to_yaml
+        @stream.yaml
       end
     end
 
@@ -40,7 +40,7 @@
     end
 
     def test_emit_version
-      assert_match('%YAML 1.1', @stream.to_yaml)
+      assert_match('%YAML 1.1', @stream.yaml)
     end
   end
 end
Index: ruby_1_9_3/test/psych/helper.rb
===================================================================
--- ruby_1_9_3/test/psych/helper.rb	(revision 34016)
+++ ruby_1_9_3/test/psych/helper.rb	(revision 34017)
@@ -32,7 +32,7 @@
     def assert_cycle( obj )
       v = Visitors::YAMLTree.new
       v << obj
-      assert_equal(obj, Psych.load(v.tree.to_yaml))
+      assert_equal(obj, Psych.load(v.tree.yaml))
       assert_equal( obj, Psych::load(Psych.dump(obj)))
       assert_equal( obj, Psych::load( obj.psych_to_yaml ) )
     end
Index: ruby_1_9_3/test/psych/visitors/test_emitter.rb
===================================================================
--- ruby_1_9_3/test/psych/visitors/test_emitter.rb	(revision 34016)
+++ ruby_1_9_3/test/psych/visitors/test_emitter.rb	(revision 34017)
@@ -46,7 +46,7 @@
         @visitor.accept s
 
         assert_match(/1.1/, @io.string)
-        assert_equal @io.string, s.to_yaml
+        assert_equal @io.string, s.yaml
       end
 
       def test_document_implicit_end
@@ -61,8 +61,8 @@
         @visitor.accept s
 
         assert_match(/key: value/, @io.string)
-        assert_equal @io.string, s.to_yaml
-        assert(/\.\.\./ !~ s.to_yaml)
+        assert_equal @io.string, s.yaml
+        assert(/\.\.\./ !~ s.yaml)
       end
 
       def test_scalar
@@ -76,7 +76,7 @@
         @visitor.accept s
 
         assert_match(/hello/, @io.string)
-        assert_equal @io.string, s.to_yaml
+        assert_equal @io.string, s.yaml
       end
 
       def test_scalar_with_tag
@@ -91,7 +91,7 @@
 
         assert_match(/str/, @io.string)
         assert_match(/hello/, @io.string)
-        assert_equal @io.string, s.to_yaml
+        assert_equal @io.string, s.yaml
       end
 
       def test_sequence
@@ -107,7 +107,7 @@
         @visitor.accept s
 
         assert_match(/- hello/, @io.string)
-        assert_equal @io.string, s.to_yaml
+        assert_equal @io.string, s.yaml
       end
 
       def test_mapping
@@ -122,7 +122,7 @@
         @visitor.accept s
 
         assert_match(/key: value/, @io.string)
-        assert_equal @io.string, s.to_yaml
+        assert_equal @io.string, s.yaml
       end
 
       def test_alias
@@ -137,7 +137,7 @@
         @visitor.accept s
 
         assert_match(/&A key: \*A/, @io.string)
-        assert_equal @io.string, s.to_yaml
+        assert_equal @io.string, s.yaml
       end
     end
   end
Index: ruby_1_9_3/test/psych/test_numeric.rb
===================================================================
--- ruby_1_9_3/test/psych/test_numeric.rb	(revision 0)
+++ ruby_1_9_3/test/psych/test_numeric.rb	(revision 34017)
@@ -0,0 +1,14 @@
+require 'psych/helper'
+
+module Psych
+  ###
+  # Test numerics from YAML spec:
+  # http://yaml.org/type/float.html
+  # http://yaml.org/type/int.html
+  class TestNumeric < TestCase
+    def test_non_float_with_0
+      str = Psych.load('--- 090')
+      assert_equal '090', str
+    end
+  end
+end
Index: ruby_1_9_3/test/psych/test_string.rb
===================================================================
--- ruby_1_9_3/test/psych/test_string.rb	(revision 34016)
+++ ruby_1_9_3/test/psych/test_string.rb	(revision 34017)
@@ -2,6 +2,14 @@
 
 module Psych
   class TestString < TestCase
+    def test_tagged_binary_should_be_dumped_as_binary
+      string = "hello world!"
+      string.force_encoding 'ascii-8bit'
+      yml = Psych.dump string
+      assert_match(/binary/, yml)
+      assert_equal string, Psych.load(yml)
+    end
+
     def test_binary_string_null
       string = "\x00"
       yml = Psych.dump string

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

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