mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	[ruby/psych] Forward keyword arguments in load_file and load_stream
4e1dd37f09
			
			
This commit is contained in:
		
							parent
							
								
									8ea1021f19
								
							
						
					
					
						commit
						b72f9200ac
					
				
					 2 changed files with 39 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue