class Conglomerate::TreeSerializer
Attributes
object[RW]
Public Class Methods
new(object)
click to toggle source
# File lib/conglomerate/tree_serializer.rb, line 3 def initialize(object) self.object = object end
Public Instance Methods
serialize(item = object)
click to toggle source
# File lib/conglomerate/tree_serializer.rb, line 7 def serialize(item = object) if Conglomerate::Particle === item serialize_particle(item) elsif Conglomerate::Array === item serialize_array(item) elsif ::Array === item serialize_array(item) elsif item.is_a?(Numeric) || item.is_a?(String) || item.nil? item elsif item.respond_to?(:to_s) case item when DateTime item.to_time.utc.iso8601.sub(/\+00:00$/, "Z") when Time item.utc.iso8601.sub(/\+00:00$/, "Z") when Date item.strftime("%Y-%m-%d") else item end end end
Private Instance Methods
cull_attribute(attribute)
click to toggle source
# File lib/conglomerate/tree_serializer.rb, line 55 def cull_attribute(attribute) (attribute == nil) || (Conglomerate::Array === attribute && attribute.empty?) end
serialize_array(array)
click to toggle source
# File lib/conglomerate/tree_serializer.rb, line 49 def serialize_array(array) array.map do |item| serialize(item) end end
serialize_particle(particle)
click to toggle source
# File lib/conglomerate/tree_serializer.rb, line 34 def serialize_particle(particle) attributes = particle.class.attributes attributes.inject({}) do |hash, (attr, attr_metadata)| hash.tap do |h| attribute = particle.send(attr) attribute = attr_metadata[:default] if attribute == nil unless attr_metadata[:cull] && cull_attribute(attribute) h[attr.to_s] = serialize(attribute) end end end end