Sha256: 9348b596159a339fd0c24630eb3b8fb0ea1b8a4d64b71a87ab478c87b2eadec7

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

module Unimatrix

  class Serializer

    def initialize( payload = [], options = {} )
      @payload = [ payload ].flatten
      @options = options
    end

    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 }"
                  node_object[ key.to_sym ] = value.send( nested_attribute )
                end
              else
                node_object[ name.to_sym ] = value
              end
            end
          end
        end
        node_object
      end
      result
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
unimatrix-2.5.0 lib/unimatrix/serializer.rb
unimatrix-2.4.2 lib/unimatrix/serializer.rb