Class: Tzispa::Data::Repository
- Inherits:
-
Object
- Object
- Tzispa::Data::Repository
- Defined in:
- lib/tzispa/data/repository.rb
Constant Summary collapse
- LOCAL_REPO_ROOT =
:repository
Instance Attribute Summary collapse
-
#adapters ⇒ Object
readonly
Returns the value of attribute adapters.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Instance Method Summary collapse
- #[](model, repo_id = nil) ⇒ Object
-
#initialize(config, root = LOCAL_REPO_ROOT) ⇒ Repository
constructor
A new instance of Repository.
- #load!(domain) ⇒ Object
- #models(repo_id = nil) ⇒ Object
- #module_const(repo_id = nil) ⇒ Object
- #register(model_id, model_class, repo_id, config) ⇒ Object
Constructor Details
#initialize(config, root = LOCAL_REPO_ROOT) ⇒ Repository
Returns a new instance of Repository.
23 24 25 26 27 28 |
# File 'lib/tzispa/data/repository.rb', line 23 def initialize(config, root = LOCAL_REPO_ROOT) @config = config @root = root @pool = Hash.new @adapters = AdapterPool.new config end |
Instance Attribute Details
#adapters ⇒ Object (readonly)
Returns the value of attribute adapters.
19 20 21 |
# File 'lib/tzispa/data/repository.rb', line 19 def adapters @adapters end |
#root ⇒ Object (readonly)
Returns the value of attribute root.
19 20 21 |
# File 'lib/tzispa/data/repository.rb', line 19 def root @root end |
Instance Method Details
#[](model, repo_id = nil) ⇒ Object
30 31 32 33 34 |
# File 'lib/tzispa/data/repository.rb', line 30 def [](model, repo_id=nil) selected_repo = repo_id || @adapters.default raise UnknownModel.new("The '#{model}' model does not exists in the adapter '#{selected_repo}'") unless @pool.has_key?(selected_repo) && @pool[selected_repo].has_key?(model.to_sym) @pool[selected_repo][model.to_sym] end |
#load!(domain) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/tzispa/data/repository.rb', line 45 def load!(domain) @config.each { |id, cfg| Mutex.new.synchronize { @pool[id] = Hash.new Sequel::Model.db = @adapters[id] if cfg.local load_local_helpers id, cfg load_local_models id, cfg else require cfg.gem repo_module = "#{id.to_s.camelize}".constantize self.class.include repo_module self.class.send "load_#{id}", self, id, cfg end domain.include module_const(id) } } self end |
#models(repo_id = nil) ⇒ Object
36 37 38 |
# File 'lib/tzispa/data/repository.rb', line 36 def models(repo_id=nil) @pool[repo_id || @adapters.default].values end |
#module_const(repo_id = nil) ⇒ Object
40 41 42 43 |
# File 'lib/tzispa/data/repository.rb', line 40 def module_const(repo_id=nil) selected_repo = repo_id || @adapters.default @pool[selected_repo][:'__repository_module'] ||= repository_module(selected_repo) end |
#register(model_id, model_class, repo_id, config) ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/tzispa/data/repository.rb', line 65 def register(model_id, model_class, repo_id, config) model_class.db = @adapters[repo_id] config.extensions.split(',').each { |ext| model_class.db.extension ext.to_sym } if config.respond_to? :extensions @pool[repo_id][model_id.to_sym] = model_class end |