Module: YAML
- Defined in:
- lib/safe_yaml/syck_hack.rb,
lib/safe_yaml.rb
Overview
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
Constant Summary collapse
- Syck =
JRuby’s “Syck” is called “Yecht”
YAML::Yecht
Class Method Summary collapse
- .load_file_with_options(file, options = {}) ⇒ Object (also: load_file)
- .load_with_options(yaml, *original_arguments) ⇒ Object (also: load)
- .safe_load(yaml, options = {}) ⇒ Object
- .safe_load_file(filename, options = {}) ⇒ Object
- .unsafe_load_file(filename) ⇒ Object
Class Method Details
.load_file_with_options(file, options = {}) ⇒ Object Also known as: load_file
148 149 150 151 152 153 154 155 |
# File 'lib/safe_yaml.rb', line 148 def self.(file, ={}) safe_mode = ("load_file", ) if safe_mode == :safe safe_load_file(file, ()) else unsafe_load_file(file) end end |
.load_with_options(yaml, *original_arguments) ⇒ Object Also known as: load
133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/safe_yaml.rb', line 133 def self.(yaml, *original_arguments) filename, = (original_arguments) safe_mode = ("load", ) arguments = [yaml] if safe_mode == :safe arguments << filename if SafeYAML::YAML_ENGINE == "psych" arguments << () safe_load(*arguments) else arguments << filename if SafeYAML::MULTI_ARGUMENT_YAML_LOAD unsafe_load(*arguments) end end |
.safe_load(yaml, options = {}) ⇒ Object
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/safe_yaml.rb', line 162 def self.safe_load(yaml, filename=nil, ={}) return false if yaml =~ /\A\s*\Z/ # If the user hasn't whitelisted any tags, we can go with this implementation which is # significantly faster. if ( && [:whitelisted_tags] || SafeYAML::OPTIONS[:whitelisted_tags]).empty? safe_handler = SafeYAML::PsychHandler.new() do |result| return result end arguments_for_parse = [yaml] arguments_for_parse << filename if SafeYAML::MULTI_ARGUMENT_YAML_LOAD Psych::Parser.new(safe_handler).parse(*arguments_for_parse) else safe_resolver = SafeYAML::PsychResolver.new() tree = SafeYAML::MULTI_ARGUMENT_YAML_LOAD ? Psych.parse(yaml, filename) : Psych.parse(yaml) return safe_resolver.resolve_node(tree) end end |
.safe_load_file(filename, options = {}) ⇒ Object
184 185 186 |
# File 'lib/safe_yaml.rb', line 184 def self.safe_load_file(filename, ={}) File.open(filename, 'r:bom|utf-8') { |f| self.safe_load(f, filename, ) } end |
.unsafe_load_file(filename) ⇒ Object
188 189 190 191 192 193 194 195 196 |
# File 'lib/safe_yaml.rb', line 188 def self.unsafe_load_file(filename) if SafeYAML::MULTI_ARGUMENT_YAML_LOAD # 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) } else # https://github.com/tenderlove/psych/blob/v1.2.2/lib/psych.rb#L231-233 self.unsafe_load File.open(filename) end end |