lib/vcr/cassette/serializers/yaml.rb
require 'yaml'
module VCR
class Cassette
class Serializers
# The YAML serializer. This will use either Psych or Syck, which ever your
# ruby interpreter defaults to. You can also force VCR to use Psych or Syck by
# using one of those serializers.
#
# @see JSON
# @see Psych
# @see Syck
module YAML
extend self
extend EncodingErrorHandling
extend SyntaxErrorHandling
# @private
ENCODING_ERRORS = [ArgumentError]
# @private
SYNTAX_ERRORS = [::Psych::SyntaxError]
# The file extension to use for this serializer.
#
# @return [String] "yml"
def file_extension
"yml"
end
# Serializes the given hash using YAML.
#
# @param [Hash] hash the object to serialize
# @return [String] the YAML string
def serialize(hash)
handle_encoding_errors do
result = ::YAML.dump(hash)
result.gsub!(": \n", ": null\n") # set canonical null value in order to avoid trailing whitespaces
result
end
end
# Deserializes the given string using YAML.
#
# @param [String] string the YAML string
# @return [Hash] the deserialized object
def deserialize(string)
handle_encoding_errors do
handle_syntax_errors do
if ::YAML.respond_to?(:unsafe_load)
::YAML.unsafe_load(string)
else
::YAML.load(string)
end
end
end
end
end
end
end
end