From 4e1dd37f09132ddd4f954b95bce64c37a8f6a9ec Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Thu, 10 Sep 2020 15:12:11 +0200 Subject: Forward keyword arguments in load_file and load_stream --- lib/psych.rb | 10 +++++----- test/psych/test_psych.rb | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/lib/psych.rb b/lib/psych.rb index 3fc98db..b09866a 100644 --- a/lib/psych.rb +++ b/lib/psych.rb @@ -549,7 +549,7 @@ module Psych # end # list # => ['foo', 'bar'] # - def self.load_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: [] + def self.load_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: [], **kwargs if legacy_filename != NOT_GIVEN warn_with_uplevel 'Passing filename with the 2nd argument of Psych.load_stream is deprecated. Use keyword argument like Psych.load_stream(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE filename = legacy_filename @@ -557,10 +557,10 @@ module Psych result = if block_given? parse_stream(yaml, filename: filename) do |node| - yield node.to_ruby + yield node.to_ruby(**kwargs) end else - parse_stream(yaml, filename: filename).children.map(&:to_ruby) + parse_stream(yaml, filename: filename).children.map { |node| node.to_ruby(**kwargs) } end return fallback if result.is_a?(Array) && result.empty? @@ -571,9 +571,9 @@ 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 +fallback+ return value, which defaults to +false+. - def self.load_file filename, fallback: false + def self.load_file filename, **kwargs File.open(filename, 'r:bom|utf-8') { |f| - self.load f, filename: filename, fallback: fallback + self.load f, filename: filename, **kwargs } end diff --git a/test/psych/test_psych.rb b/test/psych/test_psych.rb index 55d9f19..7219e83 100644 --- a/test/psych/test_psych.rb +++ b/test/psych/test_psych.rb @@ -125,6 +125,19 @@ class TestPsych < Psych::TestCase assert_equal %w{ foo bar }, docs end + def test_load_stream_freeze + docs = Psych.load_stream("--- foo\n...\n--- bar\n...", freeze: true) + assert_equal %w{ foo bar }, docs + docs.each do |string| + assert_predicate string, :frozen? + end + end + + def test_load_stream_symbolize_names + docs = Psych.load_stream("---\nfoo: bar", symbolize_names: true) + assert_equal [{foo: 'bar'}], docs + end + def test_load_stream_default_fallback assert_equal [], Psych.load_stream("") end @@ -242,6 +255,27 @@ class TestPsych < Psych::TestCase } end + def test_load_file_freeze + Tempfile.create(['yikes', 'yml']) {|t| + t.binmode + t.write('--- hello world') + t.close + + object = Psych.load_file(t.path, freeze: true) + assert_predicate object, :frozen? + } + end + + def test_load_file_symbolize_names + Tempfile.create(['yikes', 'yml']) {|t| + t.binmode + t.write("---\nfoo: bar") + t.close + + assert_equal({foo: 'bar'}, Psych.load_file(t.path, symbolize_names: true)) + } + end + def test_load_file_default_fallback Tempfile.create(['empty', 'yml']) {|t| assert_equal false, Psych.load_file(t.path) -- cgit v1.2.3