Class: Vedeu::Repositories::Repository
- Inherits:
-
Object
- Object
- Vedeu::Repositories::Repository
- Includes:
- Common, Registerable, Store
- Defined in:
- lib/vedeu/repositories/repository.rb
Overview
Provides common methods for accessing the various repositories Vedeu uses.
Direct Known Subclasses
Borders::Repository, Buffers::Repository, Cursors::Repository, Editor::Repository, Events::Repository, Geometries::Repository, Groups::Repository, Input::Repository, Interfaces::Repository, Menus::Repository
Instance Attribute Summary collapse
- #model ⇒ void readonly
- #storage ⇒ void readonly
Instance Method Summary collapse
-
#all ⇒ Array<void>
Return all the registered models.
-
#by_name(name = nil) ⇒ void
Return the named model or a null object if not registered.
-
#current ⇒ String|NilClass
Return the model for the interface currently in focus.
-
#find(name) ⇒ Hash<String => Object>|NilClass
Find the model by name.
-
#find!(name) ⇒ Hash<String => Object>
Find the model attributes by name, raises an exception when the model cannot be found.
-
#find_or_create(name) ⇒ void
Find a model by name, registers the model by name when not found.
-
#initialize(model = nil, storage = {}) ⇒ Vedeu::Repositories::Repository
constructor
Returns a new instance of Vedeu::Repositories::Repository.
- #inspect ⇒ String
- #log_store(model) ⇒ String private
-
#registered?(name) ⇒ Boolean
Returns a boolean indicating whether the named model is registered.
-
#remove(name) ⇒ Hash|Boolean
(also: #delete)
Returns the storage with the named model removed, or false when the model does not exist.
-
#repository ⇒ Class
Returns the repository class.
-
#store(model, &block) ⇒ void
(also: #register, #add)
Stores the model instance by name in the repository of the model.
- #valid_model?(model) ⇒ Boolean private
Methods included from Store
#each, #empty?, #exists?, #in_memory, #registered, #size
Methods included from Storage
Methods included from Common
#absent?, #array?, #boolean, #boolean?, #empty_value?, #escape?, #falsy?, #hash?, #line_model?, #numeric?, #positionable?, #present?, #snake_case, #stream_model?, #string?, #symbol?, #truthy?, #view_model?
Methods included from Registerable
Constructor Details
#initialize(model = nil, storage = {}) ⇒ Vedeu::Repositories::Repository
Returns a new instance of Vedeu::Repositories::Repository.
34 35 36 37 |
# File 'lib/vedeu/repositories/repository.rb', line 34 def initialize(model = nil, storage = {}) @model = model @storage = storage end |
Instance Attribute Details
#model ⇒ void (readonly)
This method returns an undefined value.
23 24 25 |
# File 'lib/vedeu/repositories/repository.rb', line 23 def model @model end |
#storage ⇒ void (readonly)
This method returns an undefined value.
27 28 29 |
# File 'lib/vedeu/repositories/repository.rb', line 27 def storage @storage end |
Instance Method Details
#all ⇒ Array<void>
Return all the registered models.
49 50 51 52 53 |
# File 'lib/vedeu/repositories/repository.rb', line 49 def all return storage.values if hash?(storage) registered end |
#by_name(name = nil) ⇒ void
This method returns an undefined value.
Return the named model or a null object if not registered.
67 68 69 70 71 72 73 |
# File 'lib/vedeu/repositories/repository.rb', line 67 def by_name(name = nil) name = present?(name) ? name : Vedeu.focus return find(name) if registered?(name) null_model.new(null_attributes.merge(name: name)) if null_model? end |
#current ⇒ String|NilClass
Return the model for the interface currently in focus.
78 79 80 |
# File 'lib/vedeu/repositories/repository.rb', line 78 def current find_or_create(Vedeu.focus) if Vedeu.focus end |
#find(name) ⇒ Hash<String => Object>|NilClass
Find the model by name.
86 87 88 |
# File 'lib/vedeu/repositories/repository.rb', line 86 def find(name) storage[name] end |
#find!(name) ⇒ Hash<String => Object>
Find the model attributes by name, raises an exception when the model cannot be found.
97 98 99 100 |
# File 'lib/vedeu/repositories/repository.rb', line 97 def find!(name) find(name) || raise(Vedeu::Error::ModelNotFound, "Cannot find model by name: '#{name}'") end |
#find_or_create(name) ⇒ void
This method returns an undefined value.
Find a model by name, registers the model by name when not found.
107 108 109 110 111 112 113 114 115 |
# File 'lib/vedeu/repositories/repository.rb', line 107 def find_or_create(name) return find(name) if registered?(name) Vedeu.log(type: :store, message: "Model (#{model}) not found, " \ "registering: '#{name}'") model.new(name).store end |
#inspect ⇒ String
118 119 120 |
# File 'lib/vedeu/repositories/repository.rb', line 118 def inspect "<#{self.class.name}>" end |
#log_store(model) ⇒ String (private)
174 175 176 177 178 179 |
# File 'lib/vedeu/repositories/repository.rb', line 174 def log_store(model) type = registered?(model.name) ? :update : :create Vedeu.log(type: type, message: "#{model.class.name}: '#{model.name}'") end |
#registered?(name) ⇒ Boolean
Returns a boolean indicating whether the named model is registered.
127 128 129 130 131 132 |
# File 'lib/vedeu/repositories/repository.rb', line 127 def registered?(name) return false if absent?(name) return false if empty? storage.include?(name) end |
#remove(name) ⇒ Hash|Boolean Also known as: delete
Returns the storage with the named model removed, or false when the model does not exist.
139 140 141 142 143 144 145 |
# File 'lib/vedeu/repositories/repository.rb', line 139 def remove(name) return false if empty? return false unless registered?(name) storage.delete(name) storage unless storage.is_a?(Set) end |
#repository ⇒ Class
Returns the repository class.
42 43 44 |
# File 'lib/vedeu/repositories/repository.rb', line 42 def repository self.class end |
#store(model, &block) ⇒ void Also known as: register, add
If a block is given, store the model, return the model after yielding.
This method returns an undefined value.
Stores the model instance by name in the repository of the model.
156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/vedeu/repositories/repository.rb', line 156 def store(model, &block) valid_model?(model) log_store(model) storage[model.name] = model yield if block_given? model end |
#valid_model?(model) ⇒ Boolean (private)
184 185 186 187 188 |
# File 'lib/vedeu/repositories/repository.rb', line 184 def valid_model?(model) raise Vedeu::Error::MissingRequired, "Cannot store model '#{model.class}' without a name " \ 'attribute.' unless present?(model.name) end |