summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/psych/lib/psych.rb24
-rw-r--r--ext/psych/lib/psych/handler.rb2
-rw-r--r--ext/psych/lib/psych/nodes/alias.rb2
-rw-r--r--ext/psych/lib/psych/nodes/document.rb2
-rw-r--r--ext/psych/lib/psych/nodes/mapping.rb2
-rw-r--r--ext/psych/lib/psych/nodes/node.rb7
-rw-r--r--ext/psych/lib/psych/nodes/scalar.rb2
-rw-r--r--ext/psych/lib/psych/nodes/sequence.rb2
-rw-r--r--ext/psych/lib/psych/nodes/stream.rb2
-rw-r--r--ext/psych/lib/psych/versions.rb4
-rw-r--r--ext/psych/psych.gemspec7
-rw-r--r--ext/psych/yaml/emitter.c2
-rw-r--r--test/psych/test_psych.rb37
-rw-r--r--test/psych/test_stream.rb16
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:
+ #
+ # [<tt>:indentation</tt>] Number of space characters used to indent.
+ # Acceptable value should be in <tt>0..9</tt> range,
+ # otherwise option is ignored.
+ #
+ # Default: <tt>2</tt>.
+ # [<tt>:line_width</tt>] Max character to wrap line at.
+ #
+ # Default: <tt>0</tt> (meaning "wrap at 81").
+ # [<tt>:canonical</tt>] Write "canonical" YAML form (very verbose, yet
+ # strictly formal).
+ #
+ # Default: <tt>false</tt>.
+ # [<tt>:header</tt>] Write <tt>%YAML [version]</tt> at the beginning of document.
+ #
+ # Default: <tt>false</tt>.
+ #
# Example:
#
# # Dump an array, get back a YAML string
@@ -427,10 +445,10 @@ module Psych
# Psych.dump(['a', 'b'], StringIO.new) # => #<StringIO:0x000001009d0890>
#
# # 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