Class: OpenC3::WidgetModel
- Defined in:
- lib/openc3/models/widget_model.rb
Constant Summary collapse
- PRIMARY_KEY =
'openc3_widgets'
Instance Attribute Summary collapse
-
#bucket_key ⇒ Object
Returns the value of attribute bucket_key.
-
#filename ⇒ Object
Returns the value of attribute filename.
-
#full_name ⇒ Object
Returns the value of attribute full_name.
-
#name ⇒ Object
Returns the value of attribute name.
-
#needs_dependencies ⇒ Object
Returns the value of attribute needs_dependencies.
Attributes inherited from Model
Class Method Summary collapse
- .all(scope: nil) ⇒ Object
- .all_scopes ⇒ Object
-
.get(name:, scope: nil) ⇒ Object
NOTE: The following three class methods are used by the ModelController and are reimplemented to enable various Model class methods to work.
-
.handle_config(parser, keyword, parameters, plugin: nil, needs_dependencies: false, scope:) ⇒ Object
Called by the PluginModel to allow this class to validate it’s top-level keyword: “WIDGET”.
- .names(scope: nil) ⇒ Object
Instance Method Summary collapse
- #as_json(*a) ⇒ Object
- #deploy(gem_path, variables, validate_only: false) ⇒ Object
- #handle_config(parser, keyword, parameters) ⇒ Object
-
#initialize(name:, updated_at: nil, plugin: nil, needs_dependencies: false, scope:) ⇒ WidgetModel
constructor
A new instance of WidgetModel.
- #undeploy ⇒ Object
Methods inherited from Model
#create, #destroy, #destroyed?, filter, find_all_by_plugin, from_json, get_all_models, get_model, set, store, #update
Constructor Details
#initialize(name:, updated_at: nil, plugin: nil, needs_dependencies: false, scope:) ⇒ WidgetModel
Returns a new instance of WidgetModel.
83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/openc3/models/widget_model.rb', line 83 def initialize( name:, updated_at: nil, plugin: nil, needs_dependencies: false, scope: ) super("#{scope}__#{PRIMARY_KEY}", name: name, plugin: plugin, updated_at: updated_at, scope: scope) @full_name = @name.capitalize + 'Widget' @filename = @full_name + '.umd.min.js' @bucket_key = 'widgets/' + @full_name + '/' + @filename @needs_dependencies = needs_dependencies end |
Instance Attribute Details
#bucket_key ⇒ Object
Returns the value of attribute bucket_key.
36 37 38 |
# File 'lib/openc3/models/widget_model.rb', line 36 def bucket_key @bucket_key end |
#filename ⇒ Object
Returns the value of attribute filename.
35 36 37 |
# File 'lib/openc3/models/widget_model.rb', line 35 def filename @filename end |
#full_name ⇒ Object
Returns the value of attribute full_name.
34 35 36 |
# File 'lib/openc3/models/widget_model.rb', line 34 def full_name @full_name end |
#name ⇒ Object
Returns the value of attribute name.
33 34 35 |
# File 'lib/openc3/models/widget_model.rb', line 33 def name @name end |
#needs_dependencies ⇒ Object
Returns the value of attribute needs_dependencies.
37 38 39 |
# File 'lib/openc3/models/widget_model.rb', line 37 def needs_dependencies @needs_dependencies end |
Class Method Details
.all(scope: nil) ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/openc3/models/widget_model.rb', line 53 def self.all(scope: nil) tools = Store.hgetall("#{scope}__#{PRIMARY_KEY}") tools.each do |key, value| tools[key] = JSON.parse(value, :allow_nan => true, :create_additions => true) end return tools end |
.all_scopes ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/openc3/models/widget_model.rb', line 61 def self.all_scopes result = {} scopes = OpenC3::ScopeModel.all scopes.each do |key, _scope| = all(scope: key) result.merge!() end result end |
.get(name:, scope: nil) ⇒ Object
NOTE: The following three class methods are used by the ModelController and are reimplemented to enable various Model class methods to work
41 42 43 |
# File 'lib/openc3/models/widget_model.rb', line 41 def self.get(name:, scope: nil) super("#{scope}__#{PRIMARY_KEY}", name: name) end |
.handle_config(parser, keyword, parameters, plugin: nil, needs_dependencies: false, scope:) ⇒ Object
Called by the PluginModel to allow this class to validate it’s top-level keyword: “WIDGET”
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/openc3/models/widget_model.rb', line 72 def self.handle_config(parser, keyword, parameters, plugin: nil, needs_dependencies: false, scope:) case keyword when 'WIDGET' parser.verify_num_parameters(1, 1, "WIDGET <Name>") return self.new(name: parameters[0], plugin: plugin, needs_dependencies: needs_dependencies, scope: scope) else raise ConfigParser::Error.new(parser, "Unknown keyword and parameters for Widget: #{keyword} #{parameters.join(" ")}") end return nil end |
.names(scope: nil) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/openc3/models/widget_model.rb', line 45 def self.names(scope: nil) array = [] all(scope: scope).each do |name, | array << name end array end |
Instance Method Details
#as_json(*a) ⇒ Object
97 98 99 100 101 102 103 104 |
# File 'lib/openc3/models/widget_model.rb', line 97 def as_json(*a) { 'name' => @name, 'updated_at' => @updated_at, 'plugin' => @plugin, 'needs_dependencies' => @needs_dependencies, } end |
#deploy(gem_path, variables, validate_only: false) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/openc3/models/widget_model.rb', line 110 def deploy(gem_path, variables, validate_only: false) # Ensure tools bucket exists bucket = nil unless validate_only bucket = Bucket.getClient() bucket.ensure_public(ENV['OPENC3_TOOLS_BUCKET']) end filename = gem_path + "/tools/widgets/" + @full_name + '/' + @filename # Load widget file data = File.read(filename, mode: "rb") OpenC3.set_working_dir(File.dirname(filename)) do data = ERB.new(data, trim_mode: "-").result(binding.set_variables(variables)) if data.is_printable? end unless validate_only cache_control = BucketUtilities.get_cache_control(@filename) # TODO: support widgets that aren't just a single js file (and its associated map file) bucket.put_object(bucket: ENV['OPENC3_TOOLS_BUCKET'], content_type: 'application/javascript', cache_control: cache_control, key: @bucket_key, body: data) data = File.read(filename + '.map', mode: "rb") bucket.put_object(bucket: ENV['OPENC3_TOOLS_BUCKET'], content_type: 'application/json', cache_control: cache_control, key: @bucket_key + '.map', body: data) end end |
#handle_config(parser, keyword, parameters) ⇒ Object
106 107 108 |
# File 'lib/openc3/models/widget_model.rb', line 106 def handle_config(parser, keyword, parameters) raise ConfigParser::Error.new(parser, "Unknown keyword and parameters for Widget: #{keyword} #{parameters.join(" ")}") end |