class PlaceOS::Model::Module

Included Modules

Defined in:

placeos-models/module.cr

Constant Summary

CALLBACKS = {before_save: [:set_name_and_role] of Nil, after_save: [] of Nil, before_create: [do self.created_at = self.updated_at = Time.utc end, :set_edge_hint, :set_alert_level] of Nil, after_create: [:add_logic_module] of Nil, before_update: [do self.updated_at = Time.utc end] of Nil, after_update: [] of Nil, before_destroy: [:destroy_settings_and_versions, :remove_module] of Nil, after_destroy: [] of Nil}
Log = ::Log.for(self)
PRIMARY_KEY_TYPES = {:id => (String | Nil)} of Nil => Nil

macro level key => type

PRIMARY_KEYS = [{:id}]

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from module PlaceOS::Model::Utilities::SettingsHelper

all_settings : Hash(YAML::Any, YAML::Any) all_settings, settings : Array(Settings) settings, settings_at(encryption_level : Encryption::Level) settings_at, settings_at?(encryption_level : Encryption::Level) : PlaceOS::Model::Settings | Nil settings_at?, settings_hierarchy : Array(Settings) settings_hierarchy, settings_json : String settings_json

Instance methods inherited from class PlaceOS::Model::ModelBase

after_create after_create, after_destroy after_destroy, after_save after_save, after_update after_update, apply_defaults apply_defaults, assign_attributes(params : HTTP::Params | Hash(String, String) | Tuple(String, String))
assign_attributes(model : PlaceOS::Model::ModelBase)
assign_attributes
assign_attributes
, attributes attributes, attributes_tuple attributes_tuple, before_create before_create, before_destroy before_destroy, before_save before_save, before_update before_update, invoke_props invoke_props, persistent_attributes persistent_attributes, primary_key primary_key

Constructor methods inherited from class PlaceOS::Model::ModelBase

new(ctx : YAML::ParseContext, node : YAML::Nodes::Node)
new(pull : JSON::PullParser)
new(rs : DB::ResultSet)
new

Class methods inherited from class PlaceOS::Model::ModelBase

attributes : Array(Symbol) attributes, changefeed_ignored_update_columns : Array(String) | Nil changefeed_ignored_update_columns, from_rs(rs : DB::ResultSet) from_rs, primary_key primary_key

Instance methods inherited from module PlaceOS::Model::Associations

format_list_for_postgres(list : Enumerable(String)) : String format_list_for_postgres, reset_associations reset_associations

Class methods inherited from module PlaceOS::Model::Associations

format_list_for_postgres(list : Enumerable(String)) : String format_list_for_postgres

Macros inherited from module PlaceOS::Model::Associations

belongs_to(parent_class, dependent = :none, association_name = nil, foreign_key = nil, presence = false, pk_type = nil, serialize = true) belongs_to, has_many(child_class, collection_name = nil, dependent = :none, foreign_key = nil, serialize = false) has_many, has_one(child_class, dependent = :none, association_name = nil, presence = false) has_one

Constructor Detail

def self.from_json(string_or_io : String | IO, trusted : Bool = false) : self #

def self.from_json(string_or_io : String | IO, root : String, trusted : Bool = false) : self #

Deserializes the given JSON in string_or_io into an instance of self, assuming the JSON consists of an JSON object with key root, and whose value is the value to deserialize. Will not deserialise from fields with mass_assign: false

class User < ActiveModel::Model
  attribute name : String
  attribute google_id : UUID, mass_assign: false
end

User.from_json(%({"main": {"name": "Jason", "google_id": "f6f70bfb-c882-446d-8758-7ce47db39620"}}), root: "main") # => #<User:0x103131b20 @name="Jason">

def self.from_trusted_json(string_or_io : String | IO, root : String) : self #

def self.from_trusted_json(string_or_io : String | IO) : self #

Serialize from a trusted JSON source


def self.from_trusted_yaml(string_or_io : String | IO) : self #

Serialize from a trusted YAML source


def self.from_yaml(string_or_io : String | IO, trusted : Bool = false) : self #

def self.new(ctx : YAML::ParseContext, node : YAML::Nodes::Node) #

[View source]
def self.new(pull : JSON::PullParser) #

[View source]
def self.new(rs : DB::ResultSet) #

def self.new(created_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, updated_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, ip : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, port : Int32 | ActiveModel::Model::None = ::ActiveModel::Model::None.new, tls : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, udp : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, makebreak : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, uri : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, name : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, custom_name : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, role : PlaceOS::Model::Driver::Role | ActiveModel::Model::None = ::ActiveModel::Model::None.new, alert_level : PlaceOS::Model::Alert::Severity | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, connected : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, running : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, notes : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, ignore_connected : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, ignore_startstop : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, has_runtime_error : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, error_timestamp : Time | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, launch_on_execute : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, control_system_id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, driver_id : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, edge_id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new) #

def self.new(params : HTTP::Params | Hash(String, String) | Tuple(String, String)) #

Initialize PlaceOS::Model::Module from HTTP::Params.


Class Method Detail

def self.attributes : Array(Symbol) #

Returns all attribute keys.


def self.by_control_system_id(id) #

Look up instances of this model dependent on the foreign key


[View source]
def self.by_driver_id(id) #

Look up instances of this model dependent on the foreign key


[View source]
def self.by_edge_id(id) #

Look up instances of this model dependent on the foreign key


[View source]
def self.changefeed_ignored_update_columns : Array(String) | Nil #

def self.changes(id : String | Nil | Nil = nil) : ChangeFeed #

Changefeed at row (if #id passed) or whole table level. Returns a ChangeFeed instance which can be used to invoke async callbacks via on or use blocking Iterator via each method.


def self.elastic #

def self.from_rs(__temp_2125 : DB::ResultSet) #

def self.has_edge_hint?(module_id : String) #

Hint in the model id whether the module is an edge module


[View source]
def self.in_control_system(control_system_id : String) #

[View source]
def self.in_zone(zone_id : String) #

[View source]
def self.logic_for(control_system_id : String) #

Fetch Modules who have a direct parent ControlSystem


[View source]
def self.on_edge(edge_id : String) #

Find Modules allocated to an Edge


[View source]
def self.on_error(err : Exception | IO::Error) #

def self.primary_key #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
def self.table_name #

Instance Method Detail

def __control_system : ControlSystem | Nil #

Control System the logic module may be assigned to


def __control_system=(__control_system : ControlSystem | Nil) #

Control System the logic module may be assigned to


def __driver : Driver | Nil #

The binary the module is to run on


def __driver=(__driver : Driver | Nil) #

The binary the module is to run on


def __edge : Edge | Nil #

The edge node the module may be assigned to


def __edge=(__edge : Edge | Nil) #

The edge node the module may be assigned to


def after_create #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


def after_destroy #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


def after_initialize(trusted : Bool) #

def after_save #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


def after_update #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


def alert_level : PlaceOS::Model::Alert::Severity | Nil #

#alert_level getter


def alert_level=(value : PlaceOS::Model::Alert::Severity | Nil) #

#alert_level setter


def alert_level_assigned? : Bool #

def alert_level_change : Tuple(PlaceOS::Model::Alert::Severity | Nil | Nil, PlaceOS::Model::Alert::Severity | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def alert_level_changed? : Bool #

def alert_level_default : Alert::Severity | Nil #

#alert_level's default value


[View source]
def alert_level_present? : Bool #

def alert_level_removed? : Bool #

def alert_level_was : PlaceOS::Model::Alert::Severity | Nil | Nil #

def alert_level_will_change! : Nil #

Include #alert_level in the set of changed attributes, whether it has changed or not.


def apply_defaults #

Generate code to apply default values


def assign_attributes(created_at : Time | Missing = Missing, updated_at : Time | Missing = Missing, ip : String | Missing = Missing, port : Int32 | Missing = Missing, tls : Bool | Missing = Missing, udp : Bool | Missing = Missing, makebreak : Bool | Missing = Missing, uri : String | Missing = Missing, name : String | Missing = Missing, custom_name : String | Nil | Missing = Missing, role : PlaceOS::Model::Driver::Role | Missing = Missing, alert_level : PlaceOS::Model::Alert::Severity | Nil | Missing = Missing, connected : Bool | Missing = Missing, running : Bool | Missing = Missing, notes : String | Missing = Missing, ignore_connected : Bool | Missing = Missing, ignore_startstop : Bool | Missing = Missing, has_runtime_error : Bool | Missing = Missing, error_timestamp : Time | Nil | Missing = Missing, launch_on_execute : Bool | Missing = Missing, control_system_id : String | Nil | Missing = Missing, driver_id : String | Missing = Missing, edge_id : String | Nil | Missing = Missing, id : String | Nil | Missing = Missing) #

Assign to multiple attributes.


def assign_attributes(params : HTTP::Params | Hash(String, String) | Tuple(String, String)) #

Assign to multiple attributes via HTTP::Params.


def assign_attributes(model : PlaceOS::Model::Module) #

Assign to multiple attributes from a model object


def assign_attributes_from_json(json, root : String) #

def assign_attributes_from_json(json) #

def assign_attributes_from_trusted_json(json, root : String) #

def assign_attributes_from_trusted_json(json) #

Assign each field from JSON if field exists in JSON and has changed in model


def assign_attributes_from_trusted_yaml(yaml) #

def assign_attributes_from_yaml(yaml) #

Uses the YAML parser as JSON is valid YAML


def attributes #

Returns a Hash of all attribute values


def attributes_tuple #

Returns a NamedTuple of all attribute values.


def before_create #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


def before_destroy #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


def before_save #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


def before_update #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


def changed? #

Check if any attributes have changed.


def changed_attributes #

Returns a Hash with all changed attributes.


def changed_json(io : IO) : Nil #

Serialize the set of changed attributes to JSON.


def changed_json : String #

Serialize the set of changed attributes to JSON.


def changed_persist_attributes #

def changed_yaml(io : IO) : Nil #

Serialize the set of changed attributes to YAML.


def changed_yaml : String #

Serialize the set of changed attributes to YAML.


def clear_changes_information #

Reset changes for all attributes.


def connected : Bool #

#connected getter


def connected=(value : Bool) #

#connected setter


def connected? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def connected_assigned? : Bool #

def connected_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def connected_changed? : Bool #

def connected_default : Bool #

#connected's default value


[View source]
def connected_present? : Bool #

Connected state in model so we can filter and search on it


def connected_removed? : Bool #

def connected_was : Bool | Nil #

def connected_will_change! : Nil #

Include #connected in the set of changed attributes, whether it has changed or not.


def control_system : ControlSystem | Nil #

Retrieves the parent relationship


[View source]
def control_system! : ControlSystem #

Control System the logic module may be assigned to


[View source]
def control_system=(parent : ControlSystem) #

Sets the parent relationship


[View source]
def control_system_id : String | Nil #

def control_system_id=(value : String | Nil) #

def control_system_id_assigned? : Bool #

def control_system_id_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def control_system_id_changed? : Bool #

def control_system_id_default : String | Nil #

#control_system_id's default value


def control_system_id_present? : Bool #

Control System the logic module may be assigned to


def control_system_id_removed? : Bool #

def control_system_id_was : String | Nil | Nil #

def control_system_id_will_change! : Nil #

Include #control_system_id in the set of changed attributes, whether it has changed or not.


def created_at : Time #

#created_at getter


def created_at=(value : Time) #

Setters #created_at setter


def created_at? : Time | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def created_at_assigned? : Bool #

def created_at_change : Tuple(Time | Nil, Time | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def created_at_changed? : Bool #

def created_at_default : Time #

#created_at's default value


def created_at_present? : Bool #

def created_at_removed? : Bool #

def created_at_was : Time | Nil #

def created_at_will_change! : Nil #

Include #created_at in the set of changed attributes, whether it has changed or not.


def custom_name : String | Nil #

#custom_name getter


def custom_name=(value : String | Nil) #

#custom_name setter


def custom_name_assigned? : Bool #

def custom_name_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def custom_name_changed? : Bool #

def custom_name_default : String | Nil #

#custom_name's default value


[View source]
def custom_name_present? : Bool #

Custom module names (in addition to what is defined in the driver)


def custom_name_removed? : Bool #

def custom_name_was : String | Nil | Nil #

def custom_name_will_change! : Nil #

Include #custom_name in the set of changed attributes, whether it has changed or not.


def destroy_settings_and_versions #

Encrypted yaml settings, with metadata


def driver : Driver | Nil #

Retrieves the parent relationship


[View source]
def driver! : Driver #

The binary the module is to run on


[View source]
def driver=(driver : Driver) #

Set driver and role


[View source]
def driver_id : String #

#driver_id getter


def driver_id=(value : String) #

#driver_id setter


def driver_id? : String | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def driver_id_assigned? : Bool #

def driver_id_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def driver_id_changed? : Bool #

def driver_id_default : String #

#driver_id's default value


def driver_id_present? : Bool #

The binary the module is to run on


def driver_id_removed? : Bool #

def driver_id_was : String | Nil #

def driver_id_will_change! : Nil #

Include #driver_id in the set of changed attributes, whether it has changed or not.


def edge : Edge | Nil #

Retrieves the parent relationship


[View source]
def edge! : Edge #

The edge node the module may be assigned to


[View source]
def edge=(parent : Edge) #

Sets the parent relationship


[View source]
def edge_id : String | Nil #

#edge_id getter


def edge_id=(value : String | Nil) #

#edge_id setter


def edge_id_assigned? : Bool #

def edge_id_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def edge_id_changed? : Bool #

def edge_id_default : String | Nil #

#edge_id's default value


def edge_id_present? : Bool #

The edge node the module may be assigned to


def edge_id_removed? : Bool #

def edge_id_was : String | Nil | Nil #

def edge_id_will_change! : Nil #

Include #edge_id in the set of changed attributes, whether it has changed or not.


def error_timestamp : Time | Nil #

def error_timestamp=(value : Time | Nil) #

def error_timestamp_assigned? : Bool #

def error_timestamp_change : Tuple(Time | Nil | Nil, Time | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def error_timestamp_changed? : Bool #

def error_timestamp_default : Time | Nil #

#error_timestamp's default value


[View source]
def error_timestamp_present? : Bool #

def error_timestamp_removed? : Bool #

def error_timestamp_was : Time | Nil | Nil #

def error_timestamp_will_change! : Nil #

Include #error_timestamp in the set of changed attributes, whether it has changed or not.


def has_runtime_error : Bool #

def has_runtime_error=(value : Bool) #

def has_runtime_error? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def has_runtime_error_assigned? : Bool #

def has_runtime_error_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def has_runtime_error_changed? : Bool #

def has_runtime_error_default : Bool #

#has_runtime_error's default value


[View source]
def has_runtime_error_present? : Bool #

Runtime Error Indicators


def has_runtime_error_removed? : Bool #

def has_runtime_error_was : Bool | Nil #

def has_runtime_error_will_change! : Nil #

Include #has_runtime_error in the set of changed attributes, whether it has changed or not.


def hostname #

Getter for the module's host


[View source]
def hostname=(host : String) #

Setter for Device module ip


[View source]
def id : String | Nil #

#id getter


def id=(value : String | Nil) #

#id setter


def id? #

def id_assigned? : Bool #

def id_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def id_changed? : Bool #

def id_default : String | Nil #

#id's default value


def id_present? : Bool #

def id_removed? : Bool #

def id_was : String | Nil | Nil #

def id_will_change! : Nil #

Include #id in the set of changed attributes, whether it has changed or not.


def ignore_connected : Bool #

def ignore_connected=(value : Bool) #

def ignore_connected? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def ignore_connected_assigned? : Bool #

def ignore_connected_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def ignore_connected_changed? : Bool #

def ignore_connected_default : Bool #

#ignore_connected's default value


[View source]
def ignore_connected_present? : Bool #

Don't include this module in statistics or disconnected searches Might be a device that commonly goes offline (like a PC or Display that only supports Wake on Lan)


def ignore_connected_removed? : Bool #

def ignore_connected_was : Bool | Nil #

def ignore_connected_will_change! : Nil #

Include #ignore_connected in the set of changed attributes, whether it has changed or not.


def ignore_startstop : Bool #

def ignore_startstop=(value : Bool) #

def ignore_startstop? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def ignore_startstop_assigned? : Bool #

def ignore_startstop_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def ignore_startstop_changed? : Bool #

def ignore_startstop_default : Bool #

#ignore_startstop's default value


[View source]
def ignore_startstop_present? : Bool #

def ignore_startstop_removed? : Bool #

def ignore_startstop_was : Bool | Nil #

def ignore_startstop_will_change! : Nil #

Include #ignore_startstop in the set of changed attributes, whether it has changed or not.


def invoke_props #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


def ip : String #

#ip getter


def ip=(value : String) #

#ip setter


def ip? : String | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def ip_assigned? : Bool #

def ip_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def ip_changed? : Bool #

def ip_default : String #

#ip's default value


[View source]
def ip_present? : Bool #

def ip_removed? : Bool #

def ip_was : String | Nil #

def ip_will_change! : Nil #

Include #ip in the set of changed attributes, whether it has changed or not.


def launch_on_execute : Bool #

def launch_on_execute=(value : Bool) #

def launch_on_execute? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def launch_on_execute_assigned? : Bool #

def launch_on_execute_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def launch_on_execute_changed? : Bool #

def launch_on_execute_default : Bool #

#launch_on_execute's default value


[View source]
def launch_on_execute_present? : Bool #

def launch_on_execute_removed? : Bool #

def launch_on_execute_was : Bool | Nil #

def launch_on_execute_will_change! : Nil #

Include #launch_on_execute in the set of changed attributes, whether it has changed or not.


def makebreak : Bool #

#makebreak getter


def makebreak=(value : Bool) #

#makebreak setter


def makebreak? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def makebreak_assigned? : Bool #

def makebreak_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def makebreak_changed? : Bool #

def makebreak_default : Bool #

#makebreak's default value


[View source]
def makebreak_present? : Bool #

def makebreak_removed? : Bool #

def makebreak_was : Bool | Nil #

def makebreak_will_change! : Nil #

Include #makebreak in the set of changed attributes, whether it has changed or not.


def merge_settings #

Merge settings hierarchy to JSON

Read more


[View source]
def name : String #

#name getter


def name=(value : String) #

#name setter


def name? : String | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def name_assigned? : Bool #

def name_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def name_changed? : Bool #

def name_default : String #

#name's default value


[View source]
def name_present? : Bool #

Module name


def name_removed? : Bool #

def name_was : String | Nil #

def name_will_change! : Nil #

Include #name in the set of changed attributes, whether it has changed or not.


def notes : String #

#notes getter


def notes=(value : String) #

#notes setter


def notes? : String | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def notes_assigned? : Bool #

def notes_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def notes_changed? : Bool #

def notes_default : String #

#notes's default value


[View source]
def notes_present? : Bool #

def notes_removed? : Bool #

def notes_was : String | Nil #

def notes_will_change! : Nil #

Include #notes in the set of changed attributes, whether it has changed or not.


def on_edge? #

Whether or not module is an edge module


[View source]
def persistent_attributes #

Returns a Hash of all attributes that can be persisted.


def port : Int32 #

#port getter


def port=(value : Int32) #

#port setter


def port? : Int32 | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def port_assigned? : Bool #

def port_change : Tuple(Int32 | Nil, Int32 | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def port_changed? : Bool #

def port_default : Int32 #

#port's default value


[View source]
def port_present? : Bool #

def port_removed? : Bool #

def port_was : Int32 | Nil #

def port_will_change! : Nil #

Include #port in the set of changed attributes, whether it has changed or not.


def primary_key #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
def primary_key_hash #

def reset_associations #

The edge node the module may be assigned to


[View source]
def resolved_name : String #

Use custom name if it is defined and non-empty, otherwise use module name


[View source]
def resolved_name_changed? : Bool #

[View source]
def restore_attributes #

Reset each attribute to their previous values and clears all changes.


#role getter


def role=(value : PlaceOS::Model::Driver::Role) #

#role setter


def role? : PlaceOS::Model::Driver::Role | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def role_assigned? : Bool #

def role_change : Tuple(PlaceOS::Model::Driver::Role | Nil, PlaceOS::Model::Driver::Role | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def role_changed? : Bool #

def role_default : Driver::Role #

#role's default value


[View source]
def role_present? : Bool #

Cache the module's driver role locally for load order


def role_removed? : Bool #

def role_was : PlaceOS::Model::Driver::Role | Nil #

def role_will_change! : Nil #

Include #role in the set of changed attributes, whether it has changed or not.


def running : Bool #

#running getter


def running=(value : Bool) #

#running setter


def running? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def running_assigned? : Bool #

def running_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def running_changed? : Bool #

def running_default : Bool #

#running's default value


[View source]
def running_present? : Bool #

def running_removed? : Bool #

def running_was : Bool | Nil #

def running_will_change! : Nil #

Include #running in the set of changed attributes, whether it has changed or not.


def settings_and_versions #

Encrypted yaml settings, with metadata


[View source]
def settings_hierarchy : Array(Settings) #

Collect Settings ordered by hierarchy

Module > (Control System > Zones) > Driver


[View source]
def systems #

Finds the systems for which this module is in use


[View source]
def table_name #

def tls : Bool #

#tls getter


def tls=(value : Bool) #

#tls setter


def tls? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def tls_assigned? : Bool #

def tls_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def tls_changed? : Bool #

def tls_default : Bool #

#tls's default value


[View source]
def tls_present? : Bool #

def tls_removed? : Bool #

def tls_was : Bool | Nil #

def tls_will_change! : Nil #

Include #tls in the set of changed attributes, whether it has changed or not.


def udp : Bool #

#udp getter


def udp=(value : Bool) #

#udp setter


def udp? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def udp_assigned? : Bool #

def udp_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def udp_changed? : Bool #

def udp_default : Bool #

#udp's default value


[View source]
def udp_present? : Bool #

def udp_removed? : Bool #

def udp_was : Bool | Nil #

def udp_will_change! : Nil #

Include #udp in the set of changed attributes, whether it has changed or not.


def updated_at : Time #

#updated_at getter


def updated_at=(value : Time) #

#updated_at setter


def updated_at? : Time | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def updated_at_assigned? : Bool #

def updated_at_change : Tuple(Time | Nil, Time | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def updated_at_changed? : Bool #

def updated_at_default : Time #

#updated_at's default value


def updated_at_present? : Bool #

def updated_at_removed? : Bool #

def updated_at_was : Time | Nil #

def updated_at_will_change! : Nil #

Include #updated_at in the set of changed attributes, whether it has changed or not.


def uri : String #

#uri getter


def uri=(value : String) #

#uri setter


def uri? : String | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def uri_assigned? : Bool #

def uri_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def uri_changed? : Bool #

def uri_default : String #

#uri's default value


[View source]
def uri_present? : Bool #

HTTP Service module


def uri_removed? : Bool #

def uri_was : String | Nil #

def uri_will_change! : Nil #

Include #uri in the set of changed attributes, whether it has changed or not.


def validate_nilability #

Validate that all non-nillable fields have values.