class Lolita::DBI::Base

Lolita::DBI::Base is ORM Interface class, that handle the request to ORM classes. Depending on given class DBI::Base detect which ORM class is used and include right adapter for that class. Other Lolita classes that need to manipulate with data need to have dbi object or it can be created in that class. Lolita::DBI::Base support Mongoid and ActiveRecord::Base, or details see Lolita::Adapter.

Attributes

adapter[R]
adapter_name[R]
klass[R]

Public Class Methods

adapters() click to toggle source

Return Array of available adapters.

# File lib/lolita/dbi/base.rb, line 48
def adapters
  Dir[File.expand_path(File.join(File.dirname(__FILE__),'..','adapter','**','*.rb'))].map {|f|
    File.basename(f,".rb").to_sym
  }.reject{|el| el==:abstract_adapter}
end
create(class_object) click to toggle source
# File lib/lolita/dbi/base.rb, line 10
def self.create(class_object)
  dbi = self.new(class_object)
  return dbi.adapter
end
new(class_object) click to toggle source

Expect ORM class that is supported by Lolita. See Adapter for available adapters.

# File lib/lolita/dbi/base.rb, line 20
def initialize(class_object) 
  @klass=class_object
  detect_adapter
  connect_adapter
end

Public Instance Methods

connect_adapter() click to toggle source

Connect Adapter by including adapter module into DBI::Base class.

# File lib/lolita/dbi/base.rb, line 38
def connect_adapter()
  @adapter="Lolita::Adapter::#{self.adapter_name.to_s.camelize}".constantize.new(self)
end
detect_adapter() click to toggle source

Detect which ORM class is given and based on it connect Adapter.

# File lib/lolita/dbi/base.rb, line 27
def detect_adapter
  if defined?(Mongoid) && defined?(Mongoid::Document) && self.klass.ancestors.include?(Mongoid::Document)
    @adapter_name=:mongoid
  elsif defined?(ActiveRecord) && defined?(ActiveRecord::Base) && self.klass.ancestors.include?(ActiveRecord::Base)
    @adapter_name=:active_record
  else
    raise NotORMClassError.new("Lolita::DBI::Base can not find appropriate #{self.klass} class adapter.")
  end
end
method_missing(metod,*args,&block) click to toggle source
# File lib/lolita/dbi/base.rb, line 42
def method_missing(metod,*args,&block)
  @adapter.send(metod,*args,&block)
end