Sha256: 98877f0987def8317a123c8adc8eb287d7345e0e472acae1d4adb190cfde2d29

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

module RademadeAdmin
  module Model
    class Reflection
      module Data

        ORM_TYPE_ACTIVERECORD = 'ActiveRecord'
        ORM_TYPE_MONGOID = 'Mongoid'

        def association_fields
          relations.keys.map &:to_sym
        end

        def data_adapter
          @data_adapter ||= init_data_adapter
        end

        def orm_type
          @orm_type
        end

        def method_missing(name, *arguments)
          if data_adapter.respond_to? name
            data_adapter.send(name, *arguments)
          end
        end

        private

        def init_data_adapter
          adapter_map = {
            'ActiveRecord::Base' => ORM_TYPE_ACTIVERECORD,
            'Mongoid::Document' => ORM_TYPE_MONGOID
          }
          included_modules = @model.ancestors.map(&:to_s)
          adapter_map.each do |ar_class, orm_type|
            if included_modules.include? ar_class
              @orm_type = orm_type
              return "RademadeAdmin::Model::DataAdapter::#{orm_type}".constantize.new(@model)
            end
          end
          nil
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rademade_admin-0.0.1 lib/rademade_admin/model/reflection/data.rb