From 5db58be1bfa1393dbf087d972465b61b3d6baa31 Mon Sep 17 00:00:00 2001 From: Marcus Stollsteimer Date: Sat, 2 Dec 2017 14:32:29 +0100 Subject: [PATCH] Convert fallback option to a keyword argument Converting the optional fallback argument to a keyword argument fixes a problem that is caused by mixing optional arguments and optional keyword arguments. Without this change, a hash as fallback value is not handled correctly: in Psych.load("", nil, {}) the hash is not interpreted as the fallback value, and the default value for the fallback argument is used instead. --- lib/psych.rb | 10 +++++----- test/psych/test_psych.rb | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/psych.rb b/lib/psych.rb index 0f14fe44..03bb4a8b 100644 --- a/lib/psych.rb +++ b/lib/psych.rb @@ -259,8 +259,8 @@ module Psych # Psych.load("---\n foo: bar") # => {"foo"=>"bar"} # Psych.load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"} # - def self.load yaml, filename = nil, fallback = false, symbolize_names: false - result = parse(yaml, filename, fallback) + def self.load yaml, filename = nil, fallback: false, symbolize_names: false + result = parse(yaml, filename, fallback: fallback) result = result.to_ruby if result symbolize_names!(result) if symbolize_names result @@ -336,7 +336,7 @@ def self.safe_load yaml, whitelist_classes = [], whitelist_symbols = [], aliases # end # # See Psych::Nodes for more information about YAML AST. - def self.parse yaml, filename = nil, fallback = false + def self.parse yaml, filename = nil, fallback: false parse_stream(yaml, filename) do |node| return node end @@ -483,9 +483,9 @@ def self.load_stream yaml, filename = nil # 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 - def self.load_file filename, fallback = false + def self.load_file filename, fallback: false File.open(filename, 'r:bom|utf-8') { |f| - self.load f, filename, FALLBACK.new(fallback) + self.load f, filename, fallback: FALLBACK.new(fallback) } end diff --git a/test/psych/test_psych.rb b/test/psych/test_psych.rb index 82906f0a..2812fd1b 100644 --- a/test/psych/test_psych.rb +++ b/test/psych/test_psych.rb @@ -146,7 +146,7 @@ def test_load_file def test_load_file_with_fallback Tempfile.create(['empty', 'yml']) {|t| - assert_equal Hash.new, Psych.load_file(t.path, Hash.new) + assert_equal Hash.new, Psych.load_file(t.path, fallback: Hash.new) } end