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

ruby-changes:37194

From: tenderlove <ko1@a...>
Date: Fri, 16 Jan 2015 15:37:36 +0900 (JST)
Subject: [ruby-changes:37194] tenderlove:r49275 (trunk): * ext/psych/lib/psych.rb: bump version

tenderlove	2015-01-16 15:37:22 +0900 (Fri, 16 Jan 2015)

  New Revision: 49275

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

  Log:
    * ext/psych/lib/psych.rb: bump version
    
    * ext/psych/lib/psych/visitors/yaml_tree.rb: fix line width wrapping
      for long strings.  Thanks Jakub Jirutka <jakub@j...>
    
    * test/psych/test_string.rb: test for change

  Modified files:
    trunk/ChangeLog
    trunk/ext/psych/lib/psych/visitors/yaml_tree.rb
    trunk/ext/psych/lib/psych.rb
    trunk/test/psych/test_string.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 49274)
+++ ChangeLog	(revision 49275)
@@ -1,3 +1,12 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Fri Jan 16 15:35:21 2015  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych.rb: bump version
+
+	* ext/psych/lib/psych/visitors/yaml_tree.rb: fix line width wrapping
+	  for long strings.  Thanks Jakub Jirutka <jakub@j...>
+
+	* test/psych/test_string.rb: test for change
+
 Fri Jan 16 11:44:44 2015  Kazuki Tsujimoto  <kazuki@c...>
 
 	* eval_intern.h, vm.c, vm_eval.c, vm_insnhelper.c:
Index: ext/psych/lib/psych/visitors/yaml_tree.rb
===================================================================
--- ext/psych/lib/psych/visitors/yaml_tree.rb	(revision 49274)
+++ ext/psych/lib/psych/visitors/yaml_tree.rb	(revision 49275)
@@ -62,13 +62,14 @@ module Psych https://github.com/ruby/ruby/blob/trunk/ext/psych/lib/psych/visitors/yaml_tree.rb#L62
 
       def initialize emitter, ss, options
         super()
-        @started  = false
-        @finished = false
-        @emitter  = emitter
-        @st       = Registrar.new
-        @ss       = ss
-        @options  = options
-        @coders   = []
+        @started    = false
+        @finished   = false
+        @emitter    = emitter
+        @st         = Registrar.new
+        @ss         = ss
+        @options    = options
+        @line_width = options[:line_width]
+        @coders     = []
 
         @dispatch_cache = Hash.new do |h,klass|
           method = "visit_#{(klass.name || '').split('::').join('_')}"
@@ -301,28 +302,27 @@ module Psych https://github.com/ruby/ruby/blob/trunk/ext/psych/lib/psych/visitors/yaml_tree.rb#L302
         quote = true
         style = Nodes::Scalar::PLAIN
         tag   = nil
-        str   = o
 
         if binary?(o)
-          str   = [o].pack('m').chomp
+          o     = [o].pack('m').chomp
           tag   = '!binary' # FIXME: change to below when syck is removed
           #tag   = 'tag:yaml.org,2002:binary'
           style = Nodes::Scalar::LITERAL
           plain = false
           quote = false
-        elsif o =~ /\n/
+        elsif o =~ /\n[^\Z]/  # match \n except blank line at the end of string
           style = Nodes::Scalar::LITERAL
         elsif o == '<<'
           style = Nodes::Scalar::SINGLE_QUOTED
           tag   = 'tag:yaml.org,2002:str'
           plain = false
           quote = false
+        elsif @line_width && o.length > @line_width
+          style = Nodes::Scalar::FOLDED
         elsif o =~ /^[^[:word:]][^"]*$/
           style = Nodes::Scalar::DOUBLE_QUOTED
-        else
-          unless String === @ss.tokenize(o)
-            style = Nodes::Scalar::SINGLE_QUOTED
-          end
+        elsif not String === @ss.tokenize(o)
+          style = Nodes::Scalar::SINGLE_QUOTED
         end
 
         ivars = find_ivars o
@@ -333,14 +333,14 @@ module Psych https://github.com/ruby/ruby/blob/trunk/ext/psych/lib/psych/visitors/yaml_tree.rb#L333
             plain = false
             quote = false
           end
-          @emitter.scalar str, nil, tag, plain, quote, style
+          @emitter.scalar o, nil, tag, plain, quote, style
         else
           maptag = '!ruby/string'
           maptag << ":#{o.class}" unless o.class == ::String
 
           register o, @emitter.start_mapping(nil, maptag, false, Nodes::Mapping::BLOCK)
           @emitter.scalar 'str', nil, nil, true, false, Nodes::Scalar::ANY
-          @emitter.scalar str, nil, tag, plain, quote, style
+          @emitter.scalar o, nil, tag, plain, quote, style
 
           dump_ivars o
 
Index: ext/psych/lib/psych.rb
===================================================================
--- ext/psych/lib/psych.rb	(revision 49274)
+++ ext/psych/lib/psych.rb	(revision 49275)
@@ -217,7 +217,7 @@ require 'psych/class_loader' https://github.com/ruby/ruby/blob/trunk/ext/psych/lib/psych.rb#L217
 
 module Psych
   # The version is Psych you're using
-  VERSION         = '2.0.8'
+  VERSION         = '2.0.9'
 
   # The version of libyaml Psych is using
   LIBYAML_VERSION = Psych.libyaml_version.join '.'
Index: test/psych/test_string.rb
===================================================================
--- test/psych/test_string.rb	(revision 49274)
+++ test/psych/test_string.rb	(revision 49275)
@@ -30,8 +30,54 @@ module Psych https://github.com/ruby/ruby/blob/trunk/test/psych/test_string.rb#L30
     end
 
     def test_doublequotes_when_there_is_a_single
-      yaml = Psych.dump "@123'abc"
-      assert_match(/---\s*"/, yaml)
+      str = "@123'abc"
+      yaml = Psych.dump str
+      assert_match /---\s*"/, yaml
+      assert_equal str, Psych.load(yaml)
+    end
+
+    def test_plain_when_shorten_than_line_width_and_no_final_line_break
+      str = "Lorem ipsum"
+      yaml = Psych.dump str, line_width: 12
+      assert_match /---\s*[^>|]+\n/, yaml
+      assert_equal str, Psych.load(yaml)
+    end
+
+    def test_plain_when_shorten_than_line_width_and_with_final_line_break
+      str = "Lorem ipsum\n"
+      yaml = Psych.dump str, line_width: 12
+      assert_match /---\s*[^>|]+\n/, yaml
+      assert_equal str, Psych.load(yaml)
+    end
+
+    def test_folded_when_longer_than_line_width_and_with_final_line_break
+      str = "Lorem ipsum dolor sit\n"
+      yaml = Psych.dump str, line_width: 12
+      assert_match /---\s*>\n(.*\n){2}\Z/, yaml
+      assert_equal str, Psych.load(yaml)
+    end
+
+    # http://yaml.org/spec/1.2/2009-07-21/spec.html#id2593651
+    def test_folded_strip_when_longer_than_line_width_and_no_newlines
+      str = "Lorem ipsum dolor sit amet, consectetur"
+      yaml = Psych.dump str, line_width: 12
+      assert_match /---\s*>-\n(.*\n){3}\Z/, yaml
+      assert_equal str, Psych.load(yaml)
+    end
+
+    def test_literal_when_inner_and_final_line_break
+      str = "Lorem ipsum\ndolor\n"
+      yaml = Psych.dump str, line_width: 12
+      assert_match /---\s*|\n(.*\n){2}\Z/, yaml
+      assert_equal str, Psych.load(yaml)
+    end
+
+    # http://yaml.org/spec/1.2/2009-07-21/spec.html#id2593651
+    def test_literal_strip_when_inner_line_break_and_no_final_line_break
+      str = "Lorem ipsum\ndolor"
+      yaml = Psych.dump str, line_width: 12
+      assert_match /---\s*|-\n(.*\n){2}\Z/, yaml
+      assert_equal str, Psych.load(yaml)
     end
 
     def test_cycle_x

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

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