Sha256: e9d7c0b56478b7fc19338239862c3d2fcdb8b5428c5fc3fa9b4051a70fd4b334
Contents?: true
Size: 1.06 KB
Versions: 1
Compression:
Stored size: 1.06 KB
Contents
require "json" class JsonSerializer module Utils def self.const(context, name) case name when Symbol, String context.const_get(name) else name end end end def self.attribute(name, serializer = nil) attributes[name] ||= serializer end def self.attributes @attributes ||= {} end attr :object def initialize(object) @object = object end def to_json(options={}) if root = options[:root] { root => serializable_object }.to_json else serializable_object.to_json end end protected def serializable_object return nil unless @object if @object.respond_to?(:to_a) @object.to_a.map { |item| self.class.new(item).to_hash } else to_hash end end def to_hash self.class.attributes.each_with_object({}) do |(name, serializer), hash| data = self.class.method_defined?(name) ? self.send(name) : @object.send(name) data = Utils.const(self.class, serializer).new(data).serializable_object if serializer hash[name] = data end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
json-serializer-0.0.8 | lib/json_serializer.rb |