Class: Lolita::DBI::Base
Overview
Lolita::DBI::Base is DataBase 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.
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
connected Adaptee for adapter.
-
#adapter_name ⇒ Object
readonly
return connected adapter name.
-
#klass ⇒ Object
readonly
return related orm class object.
Class Method Summary collapse
-
.adapters ⇒ Object
Return Array of available adapters.
Instance Method Summary collapse
-
#connect_adapter ⇒ Object
Connect Adapter by including adapter module into DBI::Base class.
-
#detect_adapter ⇒ Object
Detect which ORM class is given and based on it connect Adapter.
-
#initialize(class_object) ⇒ Base
constructor
Expect ORM class that is supported by Lolita.
- #method_missing(metod, *args, &block) ⇒ Object
Constructor Details
#initialize(class_object) ⇒ Base
Expect ORM class that is supported by Lolita. See Adapter for available adapters.
14 15 16 17 18 |
# File 'lib/lolita/dbi/base.rb', line 14 def initialize(class_object) @klass=class_object detect_adapter connect_adapter end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(metod, *args, &block) ⇒ Object
36 37 38 |
# File 'lib/lolita/dbi/base.rb', line 36 def method_missing(metod,*args,&block) @adapter.send(metod,*args,&block) end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
connected Adaptee for adapter
12 13 14 |
# File 'lib/lolita/dbi/base.rb', line 12 def adapter @adapter end |
#adapter_name ⇒ Object (readonly)
return connected adapter name
10 11 12 |
# File 'lib/lolita/dbi/base.rb', line 10 def adapter_name @adapter_name end |
#klass ⇒ Object (readonly)
return related orm class object
11 12 13 |
# File 'lib/lolita/dbi/base.rb', line 11 def klass @klass end |
Class Method Details
.adapters ⇒ Object
Return Array of available adapters.
42 43 44 45 46 |
# File 'lib/lolita/dbi/base.rb', line 42 def adapters Dir[File.(File.join(File.dirname(__FILE__),'..','adapter','**','*.rb'))].map {|f| File.basename(f,".rb").to_sym }.reject{|el| el==:abstract_adapter} end |
Instance Method Details
#connect_adapter ⇒ Object
Connect Adapter by including adapter module into DBI::Base class.
32 33 34 |
# File 'lib/lolita/dbi/base.rb', line 32 def connect_adapter() @adapter="Lolita::Adapter::#{self.adapter_name.to_s.camelize}".constantize.new(self) end |
#detect_adapter ⇒ Object
Detect which ORM class is given and based on it connect Adapter.
21 22 23 24 25 26 27 28 29 |
# File 'lib/lolita/dbi/base.rb', line 21 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 |