1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
require 'yaml'
module VCR
class Cassette
class Serializers
# The Syck serializer. Syck is the legacy YAML engine in ruby 1.8 and 1.9.
#
# @see JSON
# @see Psych
# @see YAML
module Syck
extend self
extend EncodingErrorHandling
# @private
ENCODING_ERRORS = [ArgumentError]
# The file extension to use for this serializer.
#
# @return [String] "yml"
def file_extension
"yml"
end
# Serializes the given hash using Syck.
#
# @param [Hash] hash the object to serialize
# @return [String] the YAML string
def serialize(hash)
handle_encoding_errors do
using_syck { ::YAML.dump(hash) }
end
end
# Deserializes the given string using Syck.
#
# @param [String] string the YAML string
# @return [Hash] the deserialized object
def deserialize(string)
handle_encoding_errors do
using_syck { ::YAML.load(string) }
end
end
private
def using_syck
return yield unless defined?(::YAML::ENGINE)
original_engine = ::YAML::ENGINE.yamler
::YAML::ENGINE.yamler = 'syck'
begin
yield
ensure
::YAML::ENGINE.yamler = original_engine
end
end
end
end
end
end
|