Class: OpenC3::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:, use_regex: false) ⇒ 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 OpenC3 conversion.
-
#as_json(*a) ⇒ 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 OpenC3 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 OpenC3.
-
#update ⇒ Object
Alias for create(update: true).
Constructor Details
#initialize(primary_key, **kw_args) ⇒ Model
Store the primary key and keyword arguments
133 134 135 136 137 138 139 140 |
# File 'lib/openc3/models/model.rb', line 133 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/openc3/models/model.rb', line 25 def name @name end |
#plugin ⇒ Object
Returns the value of attribute plugin.
27 28 29 |
# File 'lib/openc3/models/model.rb', line 27 def plugin @plugin end |
#scope ⇒ Object
Returns the value of attribute scope.
28 29 30 |
# File 'lib/openc3/models/model.rb', line 28 def scope @scope end |
#updated_at ⇒ Object
Returns the value of attribute updated_at.
26 27 28 |
# File 'lib/openc3/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/openc3/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, :allow_nan => true, :create_additions => true) end hash end |
.filter(key, value, scope:, use_regex: false) ⇒ Object
Loops over all items and returns objects that match a key value pair
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/openc3/models/model.rb', line 63 def self.filter(key, value, scope:, use_regex: false) filtered = {} results = all(scope: scope) regex = nil regex = Regexp.new(value) if use_regex results.each do |name, result| if regex if result[key] =~ regex filtered[name] = result end else if result[key] == value filtered[name] = result end 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.
119 120 121 122 123 124 125 126 |
# File 'lib/openc3/models/model.rb', line 119 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.
90 91 92 93 94 95 96 97 |
# File 'lib/openc3/models/model.rb', line 90 def self.from_json(json, scope:) json = JSON.parse(json, :allow_nan => true, :create_additions => true) 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/openc3/models/model.rb', line 38 def self.get(primary_key, name:) json = store.hget(primary_key, name) if json return JSON.parse(json, :allow_nan => true, :create_additions => true) else return nil end end |
.get_all_models(scope:) ⇒ Array<Object>
Returns All the models (as Model objects) stored under the primary key.
111 112 113 114 115 |
# File 'lib/openc3/models/model.rb', line 111 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.
101 102 103 104 105 106 107 108 |
# File 'lib/openc3/models/model.rb', line 101 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
128 129 130 |
# File 'lib/openc3/models/model.rb', line 128 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/openc3/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
83 84 85 86 87 |
# File 'lib/openc3/models/model.rb', line 83 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 OpenC3 conversion
194 195 196 |
# File 'lib/openc3/models/model.rb', line 194 def as_config "" end |
#as_json(*a) ⇒ Hash
Returns JSON encoding of this model.
186 187 188 189 190 191 |
# File 'lib/openc3/models/model.rb', line 186 def as_json(*a) { '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
144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/openc3/models/model.rb', line 144 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(:allow_nan => true))) end |
#deploy(gem_path, variables) ⇒ Object
Deploy the model into the OpenC3 system. Subclasses must implement this and typically create MicroserviceModels to implement.
164 165 166 |
# File 'lib/openc3/models/model.rb', line 164 def deploy(gem_path, variables) raise "must be implemented by subclass" end |
#destroy ⇒ Object
Delete the model from the Store
174 175 176 177 178 |
# File 'lib/openc3/models/model.rb', line 174 def destroy @destroyed = true undeploy() self.class.store.hdel(@primary_key, @name) end |
#destroyed? ⇒ Boolean
Indicate if destroy has been called
181 182 183 |
# File 'lib/openc3/models/model.rb', line 181 def destroyed? @destroyed end |
#undeploy ⇒ Object
Undo the actions of deploy and remove the model from OpenC3. Subclasses must implement this as by default it is a noop.
170 171 |
# File 'lib/openc3/models/model.rb', line 170 def undeploy end |
#update ⇒ Object
Alias for create(update: true)
158 159 160 |
# File 'lib/openc3/models/model.rb', line 158 def update create(update: true) end |