class Unimatrix::Serializer

Public Class Methods

new( payload = [], options = {} ) click to toggle source
# File lib/unimatrix/serializer.rb, line 5
def initialize( payload = [], options = {} )
  @payload = [ payload ].flatten
  @options = options
end

Public Instance Methods

serialize( node, options = {} ) click to toggle source
# File lib/unimatrix/serializer.rb, line 10
def serialize( node, options = {} )
  result = {}
  result[ node ] = @payload.map do | object |
    node_object = {}
    node_object[ :type_name ] = (
      object.respond_to?( :type_name ) ?
        object.type_name :
        object.class.name.split( '::' ).last.underscore
    )
    if object.respond_to?( :fields )
      object.fields.each do | name, options |
        unless options[ :read_only ]
          value = object.send( name ) if object.respond_to?( name )
          if value.is_a?( Struct )
            nested_attributes = value.members
            nested_attributes.each do | nested_attribute |
              key = "#{ name }.#{ nested_attribute }"
              nested_attribute_value = value.send( nested_attribute )
              node_object[ key.to_sym ] = value.send( nested_attribute ) if value.send( nested_attribute )
            end
          else
            node_object[ name.to_sym ] = value
          end
        end
      end
    end
    node_object
  end
  result
end