Skip to content

Commit 4e1dd37

Browse files
committed
Forward keyword arguments in load_file and load_stream
1 parent 181a727 commit 4e1dd37

File tree

2 files changed

+39
-5
lines changed

2 files changed

+39
-5
lines changed

lib/psych.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -549,18 +549,18 @@ def self.to_json object
549549
# end
550550
# list # => ['foo', 'bar']
551551
#
552-
def self.load_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: []
552+
def self.load_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: [], **kwargs
553553
if legacy_filename != NOT_GIVEN
554554
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
555555
filename = legacy_filename
556556
end
557557

558558
result = if block_given?
559559
parse_stream(yaml, filename: filename) do |node|
560-
yield node.to_ruby
560+
yield node.to_ruby(**kwargs)
561561
end
562562
else
563-
parse_stream(yaml, filename: filename).children.map(&:to_ruby)
563+
parse_stream(yaml, filename: filename).children.map { |node| node.to_ruby(**kwargs) }
564564
end
565565

566566
return fallback if result.is_a?(Array) && result.empty?
@@ -571,9 +571,9 @@ def self.load_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback:
571571
# Load the document contained in +filename+. Returns the yaml contained in
572572
# +filename+ as a Ruby object, or if the file is empty, it returns
573573
# the specified +fallback+ return value, which defaults to +false+.
574-
def self.load_file filename, fallback: false
574+
def self.load_file filename, **kwargs
575575
File.open(filename, 'r:bom|utf-8') { |f|
576-
self.load f, filename: filename, fallback: fallback
576+
self.load f, filename: filename, **kwargs
577577
}
578578
end
579579

test/psych/test_psych.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,19 @@ def test_load_stream
125125
assert_equal %w{ foo bar }, docs
126126
end
127127

128+
def test_load_stream_freeze
129+
docs = Psych.load_stream("--- foo\n...\n--- bar\n...", freeze: true)
130+
assert_equal %w{ foo bar }, docs
131+
docs.each do |string|
132+
assert_predicate string, :frozen?
133+
end
134+
end
135+
136+
def test_load_stream_symbolize_names
137+
docs = Psych.load_stream("---\nfoo: bar", symbolize_names: true)
138+
assert_equal [{foo: 'bar'}], docs
139+
end
140+
128141
def test_load_stream_default_fallback
129142
assert_equal [], Psych.load_stream("")
130143
end
@@ -242,6 +255,27 @@ def test_load_file
242255
}
243256
end
244257

258+
def test_load_file_freeze
259+
Tempfile.create(['yikes', 'yml']) {|t|
260+
t.binmode
261+
t.write('--- hello world')
262+
t.close
263+
264+
object = Psych.load_file(t.path, freeze: true)
265+
assert_predicate object, :frozen?
266+
}
267+
end
268+
269+
def test_load_file_symbolize_names
270+
Tempfile.create(['yikes', 'yml']) {|t|
271+
t.binmode
272+
t.write("---\nfoo: bar")
273+
t.close
274+
275+
assert_equal({foo: 'bar'}, Psych.load_file(t.path, symbolize_names: true))
276+
}
277+
end
278+
245279
def test_load_file_default_fallback
246280
Tempfile.create(['empty', 'yml']) {|t|
247281
assert_equal false, Psych.load_file(t.path)

0 commit comments

Comments
 (0)