Sha256: 2bcf8825d9027d8f3f3cfd5fc6c15b018ac9f530a782f34410955282bd734d54

Contents?: true

Size: 1.64 KB

Versions: 3

Compression:

Stored size: 1.64 KB

Contents

module ActiverecordToPoro
  SourceObjectInfo = Yaoc::Helper::StructH(:class_name, :column, :value, :lock_version, :object_id) do

    include Equalizer.new(:class_name, :column, :value)

    def to_hash
      {
       class_name: class_name,
       primary_key: {column: column, value: value},
       object_id: object_id,
       lock_version: lock_version
      }
    end

    def as_scope_hash
      result = column.nil? ? {} : {column => value}
      result[:lock_version] = lock_version unless lock_version.nil?

      result
    end
  end

  class Metadata
    attr_accessor :source_object_info

    def initialize()
      self.source_object_info = Set.new()
    end

    def initialize_from_ar(ar_object=nil)
      unless ar_object.nil?
        set_source_info(ar_object)
      end
    end

    def for_ar_class(ar_class_name)
      Set.new.find
      source_object_info.find(->{SourceObjectInfo.new}){|data|
        data.class_name == ar_class_name
      }
    end

    def set_source_info(ar_object)
      self.source_object_info << SourceObjectInfo.new(class_name: ar_object.class.name,
                                                      column: ar_object.class.primary_key,
                                                      value: ar_object.send(ar_object.class.primary_key),
                                                      object_id: ar_object.object_id,
                                                      lock_version: ar_object.respond_to?(:lock_version) ? ar_object.lock_version : nil
                                                     )
    end

    def to_hash
      { source_objects_info: source_object_info.map(&:to_hash)  }
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
activerecord_to_poro-0.0.5 lib/activerecord_to_poro/metadata.rb
activerecord_to_poro-0.0.4 lib/activerecord_to_poro/metadata.rb
activerecord_to_poro-0.0.3 lib/activerecord_to_poro/metadata.rb