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
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
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
Source
# File lib/safe_yaml.rb, line 28 def self.safe_load(*args) SafeYAML.load(*args) end
Source
# File lib/safe_yaml.rb, line 32 def self.safe_load_file(*args) SafeYAML.load_file(*args) end
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
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
Source
# File lib/safe_yaml.rb, line 88 def options_for_safe_load(base_options) options = base_options.dup options.delete(:safe) options end
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