From f114089585d486920f53c0c4cb92d73dc4ed577c Mon Sep 17 00:00:00 2001 From: hsbt Date: Sat, 28 Apr 2018 01:47:58 +0000 Subject: [PATCH] Merge Pysch 3.0.3.pre1. I added the following additional commits from 3.0.3.pre1: * https://github.com/ruby/psych/pull/356 * https://github.com/ruby/psych/pull/357 * https://github.com/ruby/psych/pull/359 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63280 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/psych/lib/psych.rb | 24 ++++++++++++++--- ext/psych/lib/psych/handler.rb | 2 +- ext/psych/lib/psych/nodes/alias.rb | 2 ++ ext/psych/lib/psych/nodes/document.rb | 2 ++ ext/psych/lib/psych/nodes/mapping.rb | 2 ++ ext/psych/lib/psych/nodes/node.rb | 7 +++++ ext/psych/lib/psych/nodes/scalar.rb | 2 ++ ext/psych/lib/psych/nodes/sequence.rb | 2 ++ ext/psych/lib/psych/nodes/stream.rb | 2 ++ ext/psych/lib/psych/versions.rb | 4 +-- ext/psych/psych.gemspec | 7 +++-- ext/psych/yaml/emitter.c | 2 +- test/psych/test_psych.rb | 37 +++++++++++++++++++++++++++ test/psych/test_stream.rb | 16 ++++++++++++ 14 files changed, 100 insertions(+), 11 deletions(-) diff --git a/ext/psych/lib/psych.rb b/ext/psych/lib/psych.rb index a4d5a96dce..a728dd7e76 100644 --- a/ext/psych/lib/psych.rb +++ b/ext/psych/lib/psych.rb @@ -418,6 +418,24 @@ module Psych # to control the output format. If an IO object is passed in, the YAML will # be dumped to that IO object. # + # Currently supported options are: + # + # [:indentation] Number of space characters used to indent. + # Acceptable value should be in 0..9 range, + # otherwise option is ignored. + # + # Default: 2. + # [:line_width] Max character to wrap line at. + # + # Default: 0 (meaning "wrap at 81"). + # [:canonical] Write "canonical" YAML form (very verbose, yet + # strictly formal). + # + # Default: false. + # [:header] Write %YAML [version] at the beginning of document. + # + # Default: false. + # # Example: # # # Dump an array, get back a YAML string @@ -427,10 +445,10 @@ module Psych # Psych.dump(['a', 'b'], StringIO.new) # => # # # # Dump an array with indentation set - # Psych.dump(['a', ['b']], :indentation => 3) # => "---\n- a\n- - b\n" + # Psych.dump(['a', ['b']], indentation: 3) # => "---\n- a\n- - b\n" # # # Dump an array to an IO with indentation set - # Psych.dump(['a', ['b']], StringIO.new, :indentation => 3) + # Psych.dump(['a', ['b']], StringIO.new, indentation: 3) def self.dump o, io = nil, options = {} if Hash === io options = io @@ -492,7 +510,7 @@ module Psych ### # Load the document contained in +filename+. Returns the yaml contained in # +filename+ as a Ruby object, or if the file is empty, it returns - # the specified default return value, which defaults to an empty Hash + # the specified +fallback+ return value, which defaults to +false+. def self.load_file filename, fallback: false File.open(filename, 'r:bom|utf-8') { |f| self.load f, filename, fallback: FALLBACK.new(fallback) diff --git a/ext/psych/lib/psych/handler.rb b/ext/psych/lib/psych/handler.rb index 84a3b4f2bc..8f23e366fa 100644 --- a/ext/psych/lib/psych/handler.rb +++ b/ext/psych/lib/psych/handler.rb @@ -105,7 +105,7 @@ module Psych # - first element # - *ponies # - # &ponies is the achor, *ponies is the alias. In this case, alias is + # &ponies is the anchor, *ponies is the alias. In this case, alias is # called with "ponies". def alias anchor end diff --git a/ext/psych/lib/psych/nodes/alias.rb b/ext/psych/lib/psych/nodes/alias.rb index 8131a4befb..6da655f0fd 100644 --- a/ext/psych/lib/psych/nodes/alias.rb +++ b/ext/psych/lib/psych/nodes/alias.rb @@ -14,6 +14,8 @@ module Psych def initialize anchor @anchor = anchor end + + def alias?; true; end end end end diff --git a/ext/psych/lib/psych/nodes/document.rb b/ext/psych/lib/psych/nodes/document.rb index 3cd418eaf3..f57410d636 100644 --- a/ext/psych/lib/psych/nodes/document.rb +++ b/ext/psych/lib/psych/nodes/document.rb @@ -56,6 +56,8 @@ module Psych def root children.first end + + def document?; true; end end end end diff --git a/ext/psych/lib/psych/nodes/mapping.rb b/ext/psych/lib/psych/nodes/mapping.rb index b921ddc862..d49678cb0e 100644 --- a/ext/psych/lib/psych/nodes/mapping.rb +++ b/ext/psych/lib/psych/nodes/mapping.rb @@ -52,6 +52,8 @@ module Psych @implicit = implicit @style = style end + + def mapping?; true; end end end end diff --git a/ext/psych/lib/psych/nodes/node.rb b/ext/psych/lib/psych/nodes/node.rb index 6d86669a17..f59fb8916b 100644 --- a/ext/psych/lib/psych/nodes/node.rb +++ b/ext/psych/lib/psych/nodes/node.rb @@ -63,6 +63,13 @@ module Psych io end alias :to_yaml :yaml + + def alias?; false; end + def document?; false; end + def mapping?; false; end + def scalar?; false; end + def sequence?; false; end + def stream?; false; end end end end diff --git a/ext/psych/lib/psych/nodes/scalar.rb b/ext/psych/lib/psych/nodes/scalar.rb index b448858831..e2616b6a84 100644 --- a/ext/psych/lib/psych/nodes/scalar.rb +++ b/ext/psych/lib/psych/nodes/scalar.rb @@ -63,6 +63,8 @@ module Psych @quoted = quoted @style = style end + + def scalar?; true; end end end end diff --git a/ext/psych/lib/psych/nodes/sequence.rb b/ext/psych/lib/psych/nodes/sequence.rb index 77c2c602b9..740f1938a4 100644 --- a/ext/psych/lib/psych/nodes/sequence.rb +++ b/ext/psych/lib/psych/nodes/sequence.rb @@ -77,6 +77,8 @@ module Psych @implicit = implicit @style = style end + + def sequence?; true; end end end end diff --git a/ext/psych/lib/psych/nodes/stream.rb b/ext/psych/lib/psych/nodes/stream.rb index 2474fe62c4..b525217821 100644 --- a/ext/psych/lib/psych/nodes/stream.rb +++ b/ext/psych/lib/psych/nodes/stream.rb @@ -33,6 +33,8 @@ module Psych super() @encoding = encoding end + + def stream?; true; end end end end diff --git a/ext/psych/lib/psych/versions.rb b/ext/psych/lib/psych/versions.rb index 33993ec837..1920f5d6ac 100644 --- a/ext/psych/lib/psych/versions.rb +++ b/ext/psych/lib/psych/versions.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true module Psych # The version is Psych you're using - VERSION = '3.0.2' + VERSION = '3.0.3.pre1' if RUBY_ENGINE == 'jruby' - DEFAULT_SNAKEYAML_VERSION = '1.18'.freeze + DEFAULT_SNAKEYAML_VERSION = '1.21'.freeze end end diff --git a/ext/psych/psych.gemspec b/ext/psych/psych.gemspec index 2254d46829..8d3cceb186 100644 --- a/ext/psych/psych.gemspec +++ b/ext/psych/psych.gemspec @@ -3,10 +3,9 @@ Gem::Specification.new do |s| s.name = "psych" - s.version = "3.0.2" + s.version = "3.0.3.pre1" s.authors = ["Aaron Patterson", "SHIBATA Hiroshi", "Charles Oliver Nutter"] s.email = ["aaron@tenderlovemaking.com", "hsbt@ruby-lang.org", "headius@headius.com"] - s.date = "2017-12-04" s.summary = "Psych is a YAML parser and emitter" s.description = <<-DESCRIPTION Psych is a YAML parser and emitter. Psych leverages libyaml[http://pyyaml.org/wiki/LibYAML] @@ -20,7 +19,7 @@ DESCRIPTION # for ruby core repository. It was generated by `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } s.files = [ ".gitignore", ".travis.yml", "CHANGELOG.rdoc", "Gemfile", "Mavenfile", "README.md", "Rakefile", "bin/console", - "bin/setup", "ext/psych/.gitignore", "ext/psych/depend", "ext/psych/extconf.rb", "ext/psych/psych.c", "ext/psych/psych.h", + "bin/setup", "ext/psych/depend", "ext/psych/extconf.rb", "ext/psych/psych.c", "ext/psych/psych.h", "ext/psych/psych_emitter.c", "ext/psych/psych_emitter.h", "ext/psych/psych_parser.c", "ext/psych/psych_parser.h", "ext/psych/psych_to_ruby.c", "ext/psych/psych_to_ruby.h", "ext/psych/psych_yaml_tree.c", "ext/psych/psych_yaml_tree.h", "ext/psych/yaml/LICENSE", "ext/psych/yaml/api.c", "ext/psych/yaml/config.h", "ext/psych/yaml/dumper.c", @@ -54,7 +53,7 @@ DESCRIPTION "ext/java/PsychEmitter.java", "ext/java/PsychLibrary.java", "ext/java/PsychParser.java", "ext/java/PsychToRuby.java", "ext/java/PsychYamlTree.java", "lib/psych_jars.rb", "lib/psych.jar" ] - s.requirements = "jar org.yaml:snakeyaml, 1.18" + s.requirements = "jar org.yaml:snakeyaml, 1.21" s.add_dependency 'jar-dependencies', '>= 0.1.7' s.add_development_dependency 'ruby-maven' else diff --git a/ext/psych/yaml/emitter.c b/ext/psych/yaml/emitter.c index 580a8d2123..f59c085755 100644 --- a/ext/psych/yaml/emitter.c +++ b/ext/psych/yaml/emitter.c @@ -1234,7 +1234,7 @@ yaml_emitter_select_scalar_style(yaml_emitter_t *emitter, yaml_event_t *event) } /* - * Write an achor. + * Write an anchor. */ static int diff --git a/test/psych/test_psych.rb b/test/psych/test_psych.rb index 2812fd1bd8..8f9a10013d 100644 --- a/test/psych/test_psych.rb +++ b/test/psych/test_psych.rb @@ -144,12 +144,49 @@ class TestPsych < Psych::TestCase } end + def test_load_file_default_return_value + Tempfile.create(['empty', 'yml']) {|t| + assert_equal false, Psych.load_file(t.path) + } + end + def test_load_file_with_fallback + Tempfile.create(['empty', 'yml']) {|t| + assert_equal 42, Psych.load_file(t.path, fallback: 42) + } + end + + def test_load_file_with_fallback_nil_or_false + Tempfile.create(['empty', 'yml']) {|t| + assert_nil Psych.load_file(t.path, fallback: nil) + assert_equal false, Psych.load_file(t.path, fallback: false) + } + end + + def test_load_file_with_fallback_hash Tempfile.create(['empty', 'yml']) {|t| assert_equal Hash.new, Psych.load_file(t.path, fallback: Hash.new) } end + def test_load_file_with_fallback_for_nil + Tempfile.create(['nil', 'yml']) {|t| + t.binmode + t.write('--- null') + t.close + assert_nil Psych.load_file(t.path, fallback: 42) + } + end + + def test_load_file_with_fallback_for_false + Tempfile.create(['false', 'yml']) {|t| + t.binmode + t.write('--- false') + t.close + assert_equal false, Psych.load_file(t.path, fallback: 42) + } + end + def test_parse_file Tempfile.create(['yikes', 'yml']) {|t| t.binmode diff --git a/test/psych/test_stream.rb b/test/psych/test_stream.rb index 3bd557cb68..9b71c6d996 100644 --- a/test/psych/test_stream.rb +++ b/test/psych/test_stream.rb @@ -3,6 +3,22 @@ require_relative 'helper' module Psych class TestStream < TestCase + [ + [Psych::Nodes::Alias, :alias?], + [Psych::Nodes::Document, :document?], + [Psych::Nodes::Mapping, :mapping?], + [Psych::Nodes::Scalar, :scalar?], + [Psych::Nodes::Sequence, :sequence?], + [Psych::Nodes::Stream, :stream?], + ].each do |klass, block| + define_method :"test_predicate_#{block}" do + rb = Psych.parse_stream("---\n- foo: bar\n- &a !!str Anchored\n- *a") + nodes = rb.grep(klass) + assert_operator nodes.length, :>, 0 + assert_equal nodes, rb.find_all(&block) + end + end + def test_parse_partial rb = Psych.parse("--- foo\n...\n--- `").to_ruby assert_equal 'foo', rb