Sha256: 511a5c6f75e89d56300c3b67220f5656bbb768fdc87d4001f1148f861f1aa73b

Contents?: true

Size: 1018 Bytes

Versions: 10

Compression:

Stored size: 1018 Bytes

Contents

module CanTango
  module Rules
    module Adaptor
      autoload_modules :Generic, :Relational, :Mongo
      autoload_modules :ActiveRecord, :DataMapper, :Mongoid, :MongoMapper

      # include adaptor depending on which ORM the object inherits from or includes
      def use_adaptor! base, object
        orm_map.each_pair do |orm, const|
          begin
            base.class.send :include, get_adapter(object, const.constantize, orm)
          rescue
            next
          end
        end
      end

      def get_adapter object, adaptor_class, orm
        object.kind_of?(adaptor_class) ? adaptor_for(orm) : adaptor_for(:generic)
      end

      def adaptor_for orm
        "CanTango::Rules::Adaptor::#{orm.to_s.camelize}".constantize
      end

      def orm_map
        {
          :active_record => "ActiveRecord::Base",
          :data_mapper => "DataMapper::Resource",
          :mongoid => "Mongoid::Document",
          :mongo_mapper => "MongoMapper::Document"
        }
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
cantango-core-0.1.2 lib/cantango/rules/adaptor.rb
cantango-core-0.1.1 lib/cantango/rules/adaptor.rb
cantango-core-0.1.0 lib/cantango/rules/adaptor.rb
cantango-0.9.4.7 lib/cantango/rules/adaptor.rb
cantango-0.9.4.6 lib/cantango/rules/adaptor.rb
cantango-0.9.4.5 lib/cantango/rules/adaptor.rb
cantango-0.9.4.3 lib/cantango/rules/adaptor.rb
cantango-0.9.4.2 lib/cantango/rules/adaptor.rb
cantango-0.9.4.1 lib/cantango/rules/adaptor.rb
cantango-0.9.4 lib/cantango/rules/adaptor.rb