blob: d61d1a995249dd920ed9f474a89bb53d16d7bdf9 [file] [log] [blame]
require 'base64'
module SafeYAML
class Transform
TRANSFORMERS = [
Transform::ToSymbol.new,
Transform::ToInteger.new,
Transform::ToFloat.new,
Transform::ToNil.new,
Transform::ToBoolean.new,
Transform::ToDate.new
]
def self.to_guessed_type(value, quoted=false, options=nil)
return value if quoted
if value.is_a?(String)
TRANSFORMERS.each do |transformer|
success, transformed_value = transformer.method(:transform?).arity == 1 ?
transformer.transform?(value) :
transformer.transform?(value, options)
return transformed_value if success
end
end
value
end
def self.to_proper_type(value, quoted=false, tag=nil, options=nil)
case tag
when "tag:yaml.org,2002:binary", "x-private:binary", "!binary"
decoded = Base64.decode64(value)
decoded = decoded.force_encoding(value.encoding) if decoded.respond_to?(:force_encoding)
decoded
else
self.to_guessed_type(value, quoted, options)
end
end
end
end