module YAML

Hack to JRuby 1.8's YAML Parser Yecht

This file is always loaded AFTER either syck or psych are already loaded. It then looks at what constants are available and creates a consistent view on all rubys.

Taken from rubygems and modified. See github.com/rubygems/rubygems/blob/master/lib/rubygems/syck_hack.rb

Constants

Syck

Public Class Methods

load(yaml, *original_arguments)
Also aliased as: unsafe_load
Alias for: load_with_options
load_file(file, options={})
load_file_with_options(file, options={}) click to toggle source
# File lib/safe_yaml.rb, line 19
def self.load_file_with_options(file, options={})
  safe_mode = safe_mode_from_options("load_file", options)
  if safe_mode == :safe
    safe_load_file(file, options_for_safe_load(options))
  else
    unsafe_load_file(file)
  end
end
Also aliased as: load_file
load_with_options(yaml, *original_arguments) click to toggle source
# File lib/safe_yaml.rb, line 4
def self.load_with_options(yaml, *original_arguments)
  filename, options = filename_and_options_from_arguments(original_arguments)
  safe_mode = safe_mode_from_options("load", options)
  arguments = [yaml]

  if safe_mode == :safe
    arguments << filename if SafeYAML::YAML_ENGINE == "psych"
    arguments << options_for_safe_load(options)
    safe_load(*arguments)
  else
    arguments << filename if SafeYAML::MULTI_ARGUMENT_YAML_LOAD
    unsafe_load(*arguments)
  end
end
Also aliased as: load
safe_load(*args) click to toggle source
# File lib/safe_yaml.rb, line 28
def self.safe_load(*args)
  SafeYAML.load(*args)
end
safe_load_file(*args) click to toggle source
# File lib/safe_yaml.rb, line 32
def self.safe_load_file(*args)
  SafeYAML.load_file(*args)
end
unsafe_load(yaml, *original_arguments)
Alias for: load
unsafe_load_file(filename) click to toggle source
# File lib/safe_yaml.rb, line 37
def self.unsafe_load_file(filename)
  # https://github.com/tenderlove/psych/blob/v1.3.2/lib/psych.rb#L296-298
  File.open(filename, 'r:bom|utf-8') { |f| self.unsafe_load(f, filename) }
end

Private Class Methods

filename_and_options_from_arguments(arguments) click to toggle source
# File lib/safe_yaml.rb, line 55
def filename_and_options_from_arguments(arguments)
  if arguments.count == 1
    if arguments.first.is_a?(String)
      return arguments.first, {}
    else
      return nil, arguments.first || {}
    end

  else
    return arguments.first, arguments.last || {}
  end
end
options_for_safe_load(base_options) click to toggle source
# File lib/safe_yaml.rb, line 88
def options_for_safe_load(base_options)
  options = base_options.dup
  options.delete(:safe)
  options
end
safe_mode_from_options(method, options={}) click to toggle source
# File lib/safe_yaml.rb, line 68
    def safe_mode_from_options(method, options={})
      if options[:safe].nil?
        safe_mode = SafeYAML::OPTIONS[:default_mode] || :safe

        if SafeYAML::OPTIONS[:default_mode].nil? && !SafeYAML::OPTIONS[:suppress_warnings]

          Kernel.warn <<-EOWARNING.gsub(/^\s+/, '')
            Called '#{method}' without the :safe option -- defaulting to #{safe_mode} mode.
            You can avoid this warning in the future by setting the SafeYAML::OPTIONS[:default_mode] option (to :safe or :unsafe).
          EOWARNING

          SafeYAML::OPTIONS[:suppress_warnings] = true
        end

        return safe_mode
      end

      options[:safe] ? :safe : :unsafe
    end