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/