class Sawyer::Serializer
Public Class Methods
any_json()
click to toggle source
# File lib/sawyer/serializer.rb, line 6 def self.any_json yajl || multi_json || json end
json()
click to toggle source
# File lib/sawyer/serializer.rb, line 16 def self.json require 'json' new(JSON) rescue LoadError end
message_pack()
click to toggle source
# File lib/sawyer/serializer.rb, line 28 def self.message_pack require 'msgpack' new(MessagePack, :pack, :unpack) rescue LoadError end
multi_json()
click to toggle source
# File lib/sawyer/serializer.rb, line 22 def self.multi_json require 'multi_json' new(MultiJson) rescue LoadError end
new(format, dump_method_name = nil, load_method_name = nil)
click to toggle source
Public: Wraps a serialization format for Sawyer. Nested objects are prepared for serialization (such as changing Times to ISO 8601 Strings). Any serialization format that responds to dump and load will work.
# File lib/sawyer/serializer.rb, line 37 def initialize(format, dump_method_name = nil, load_method_name = nil) @format = format @dump = @format.method(dump_method_name || :dump) @load = @format.method(load_method_name || :load) end
yajl()
click to toggle source
# File lib/sawyer/serializer.rb, line 10 def self.yajl require 'yajl' new(Yajl) rescue LoadError end
Public Instance Methods
decode(data)
click to toggle source
Public: Decodes a String into an Object (usually a Hash or Array of Hashes).
data - An encoded String.
Returns a decoded Object.
# File lib/sawyer/serializer.rb, line 60 def decode(data) return nil if data.nil? || data.strip.empty? decode_object(@load.call(data)) end
Also aliased as: load
decode_hash(hash)
click to toggle source
# File lib/sawyer/serializer.rb, line 94 def decode_hash(hash) hash.keys.each do |key| hash[key.to_sym] = decode_hash_value(key, hash.delete(key)) end hash end
decode_hash_value(key, value)
click to toggle source
# File lib/sawyer/serializer.rb, line 101 def decode_hash_value(key, value) if time_field?(key, value) if value.is_a?(String) begin Time.parse(value) rescue ArgumentError value end elsif value.is_a?(Integer) || value.is_a?(Float) Time.at(value) else value end elsif value.is_a?(Hash) decode_hash(value) elsif value.is_a?(Array) value.map { |o| decode_hash_value(key, o) } else value end end
decode_object(data)
click to toggle source
# File lib/sawyer/serializer.rb, line 86 def decode_object(data) case data when Hash then decode_hash(data) when Array then data.map { |o| decode_object(o) } else data end end
encode(data)
click to toggle source
Public: Encodes an Object (usually a Hash or Array of Hashes).
data - Object to be encoded.
Returns an encoded String.
# File lib/sawyer/serializer.rb, line 48 def encode(data) @dump.call(encode_object(data)) end
Also aliased as: dump
encode_hash(hash)
click to toggle source
# File lib/sawyer/serializer.rb, line 75 def encode_hash(hash) hash.keys.each do |key| case value = hash[key] when Date then hash[key] = value.to_time.utc.xmlschema when Time then hash[key] = value.utc.xmlschema when Hash then hash[key] = encode_hash(value) end end hash end
encode_object(data)
click to toggle source
# File lib/sawyer/serializer.rb, line 67 def encode_object(data) case data when Hash then encode_hash(data) when Array then data.map { |o| encode_object(o) } else data end end
time_field?(key, value)
click to toggle source
# File lib/sawyer/serializer.rb, line 123 def time_field?(key, value) value && (key =~ /_(at|on)\z/ || key =~ /(\A|_)date\z/) end