Class: Cosmos::Model
Direct Known Subclasses
ActivityModel, EnvironmentModel, EphemeralModel, InterfaceModel, MicroserviceModel, PluginModel, ReactionModel, ScopeModel, SettingsModel, SortedModel, TargetModel, TimelineModel, ToolModel, TriggerGroupModel, TriggerModel, WidgetModel
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
-
#plugin ⇒ Object
Returns the value of attribute plugin.
-
#scope ⇒ Object
Returns the value of attribute scope.
-
#updated_at ⇒ Object
Returns the value of attribute updated_at.
Class Method Summary collapse
-
.all(primary_key) ⇒ Array<Hash>
All the models (as Hash objects) stored under the primary key.
-
.filter(key, value, scope:) ⇒ Object
Loops over all items and returns objects that match a key value pair.
-
.find_all_by_plugin(plugin:, scope:) ⇒ Array<Object>
All the models (as Model objects) stored under the primary key which have the plugin attribute.
-
.from_json(json, scope:) ⇒ Model
Model generated from the passed JSON.
-
.get(primary_key, name:) ⇒ Hash|nil
Hash of this model or nil if name not found under primary_key.
-
.get_all_models(scope:) ⇒ Array<Object>
All the models (as Model objects) stored under the primary key.
-
.get_model(name:, scope:) ⇒ Object|nil
Calls self.get and then from_json to turn the Hash configuration into a Ruby Model object.
- .handle_config(parser, model, keyword, parameters) ⇒ Object
-
.names(primary_key) ⇒ Array<String>
All the names stored under the primary key.
-
.set(json, scope:) ⇒ Object
Sets (updates) the redis hash of this model.
- .store ⇒ Object
Instance Method Summary collapse
-
#as_config ⇒ Object
TODO: Not currently used but may be used by a XTCE or other format to COSMOS conversion.
-
#as_json ⇒ Hash
JSON encoding of this model.
-
#create(update: false, force: false) ⇒ Object
Update the Redis hash at primary_key and set the field “name” to the JSON generated via calling as_json.
-
#deploy(gem_path, variables) ⇒ Object
Deploy the model into the COSMOS system.
-
#destroy ⇒ Object
Delete the model from the Store.
-
#destroyed? ⇒ Boolean
Indicate if destroy has been called.
-
#initialize(primary_key, **kw_args) ⇒ Model
constructor
Store the primary key and keyword arguments.
-
#undeploy ⇒ Object
Undo the actions of deploy and remove the model from COSMOS.
-
#update ⇒ Object
Alias for create(update: true).
Constructor Details
#initialize(primary_key, **kw_args) ⇒ Model
Store the primary key and keyword arguments
125 126 127 128 129 130 131 132 |
# File 'lib/cosmos/models/model.rb', line 125 def initialize(primary_key, **kw_args) @primary_key = primary_key @name = kw_args[:name] @updated_at = kw_args[:updated_at] @plugin = kw_args[:plugin] @scope = kw_args[:scope] @destroyed = false end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
25 26 27 |
# File 'lib/cosmos/models/model.rb', line 25 def name @name end |
#plugin ⇒ Object
Returns the value of attribute plugin.
27 28 29 |
# File 'lib/cosmos/models/model.rb', line 27 def plugin @plugin end |
#scope ⇒ Object
Returns the value of attribute scope.
28 29 30 |
# File 'lib/cosmos/models/model.rb', line 28 def scope @scope end |
#updated_at ⇒ Object
Returns the value of attribute updated_at.
26 27 28 |
# File 'lib/cosmos/models/model.rb', line 26 def updated_at @updated_at end |
Class Method Details
.all(primary_key) ⇒ Array<Hash>
Returns All the models (as Hash objects) stored under the primary key.
53 54 55 56 57 58 59 |
# File 'lib/cosmos/models/model.rb', line 53 def self.all(primary_key) hash = store.hgetall(primary_key) hash.each do |key, value| hash[key] = JSON.parse(value) end hash end |
.filter(key, value, scope:) ⇒ Object
Loops over all items and returns objects that match a key value pair
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/cosmos/models/model.rb', line 63 def self.filter(key, value, scope:) filtered = {} results = all(scope: scope) results.each do |name, result| if result[key] == value filtered[name] = result end end return filtered end |
.find_all_by_plugin(plugin:, scope:) ⇒ Array<Object>
Returns All the models (as Model objects) stored under the primary key which have the plugin attribute.
111 112 113 114 115 116 117 118 |
# File 'lib/cosmos/models/model.rb', line 111 def self.find_all_by_plugin(plugin:, scope:) result = {} models = get_all_models(scope: scope) models.each do |name, model| result[name] = model if model.plugin == plugin end result end |
.from_json(json, scope:) ⇒ Model
Returns Model generated from the passed JSON.
82 83 84 85 86 87 88 89 |
# File 'lib/cosmos/models/model.rb', line 82 def self.from_json(json, scope:) json = JSON.parse(json) if String === json raise "json data is nil" if json.nil? json[:scope] = scope json.transform_keys!(&:to_sym) self.new(**json, scope: scope) end |
.get(primary_key, name:) ⇒ Hash|nil
Returns Hash of this model or nil if name not found under primary_key.
38 39 40 41 42 43 44 45 |
# File 'lib/cosmos/models/model.rb', line 38 def self.get(primary_key, name:) json = store.hget(primary_key, name) if json return JSON.parse(json) else return nil end end |
.get_all_models(scope:) ⇒ Array<Object>
Returns All the models (as Model objects) stored under the primary key.
103 104 105 106 107 |
# File 'lib/cosmos/models/model.rb', line 103 def self.get_all_models(scope:) models = {} all(scope: scope).each { |name, json| models[name] = from_json(json, scope: scope) } models end |
.get_model(name:, scope:) ⇒ Object|nil
Calls self.get and then from_json to turn the Hash configuration into a Ruby Model object.
93 94 95 96 97 98 99 100 |
# File 'lib/cosmos/models/model.rb', line 93 def self.get_model(name:, scope:) json = get(name: name, scope: scope) if json return from_json(json, scope: scope) else return nil end end |
.handle_config(parser, model, keyword, parameters) ⇒ Object
120 121 122 |
# File 'lib/cosmos/models/model.rb', line 120 def self.handle_config(parser, model, keyword, parameters) raise "must be implemented by subclass" end |
.names(primary_key) ⇒ Array<String>
Returns All the names stored under the primary key.
48 49 50 |
# File 'lib/cosmos/models/model.rb', line 48 def self.names(primary_key) store.hkeys(primary_key).sort end |
.set(json, scope:) ⇒ Object
Sets (updates) the redis hash of this model
75 76 77 78 79 |
# File 'lib/cosmos/models/model.rb', line 75 def self.set(json, scope:) json[:scope] = scope json.transform_keys!(&:to_sym) self.new(**json).create(force: true) end |
Instance Method Details
#as_config ⇒ Object
TODO: Not currently used but may be used by a XTCE or other format to COSMOS conversion
186 187 188 |
# File 'lib/cosmos/models/model.rb', line 186 def as_config "" end |
#as_json ⇒ Hash
Returns JSON encoding of this model.
178 179 180 181 182 183 |
# File 'lib/cosmos/models/model.rb', line 178 def as_json { 'name' => @name, 'updated_at' => @updated_at, 'plugin' => @plugin, 'scope' => @scope } end |
#create(update: false, force: false) ⇒ Object
Update the Redis hash at primary_key and set the field “name” to the JSON generated via calling as_json
136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/cosmos/models/model.rb', line 136 def create(update: false, force: false) unless force existing = self.class.store.hget(@primary_key, @name) if existing raise "#{@primary_key}:#{@name} already exists at create" unless update else raise "#{@primary_key}:#{@name} doesn't exist at update" if update end end @updated_at = Time.now.to_nsec_from_epoch self.class.store.hset(@primary_key, @name, JSON.generate(self.as_json)) end |
#deploy(gem_path, variables) ⇒ Object
Deploy the model into the COSMOS system. Subclasses must implement this and typically create MicroserviceModels to implement.
156 157 158 |
# File 'lib/cosmos/models/model.rb', line 156 def deploy(gem_path, variables) raise "must be implemented by subclass" end |
#destroy ⇒ Object
Delete the model from the Store
166 167 168 169 170 |
# File 'lib/cosmos/models/model.rb', line 166 def destroy @destroyed = true undeploy() self.class.store.hdel(@primary_key, @name) end |
#destroyed? ⇒ Boolean
Indicate if destroy has been called
173 174 175 |
# File 'lib/cosmos/models/model.rb', line 173 def destroyed? @destroyed end |
#undeploy ⇒ Object
Undo the actions of deploy and remove the model from COSMOS. Subclasses must implement this as by default it is a noop.
162 163 |
# File 'lib/cosmos/models/model.rb', line 162 def undeploy end |
#update ⇒ Object
Alias for create(update: true)
150 151 152 |
# File 'lib/cosmos/models/model.rb', line 150 def update create(update: true) end |