class

PlaceOS::Model::Settings

Inherits PlaceOS::Model::Utilities::Versions < PlaceOS::Model::Utilities::LastModified < PlaceOS::Model::Timestamps < PlaceOS::Model::ModelBase < PlaceOS::Model::Associations < Neuroplastic < PgORM::Base < PgORM::Validators < PgORM::Table < PgORM::Persistence < PgORM::Associations < ActiveModel::Callbacks < ActiveModel::Validation < ActiveModel::Model < DB::Mappable < DB::Serializable < YAML::Serializable < JSON::Serializable < Reference < Object

Constants

CALLBACKS = { before_save: [:set_modified_by, :parse_parent_type, :build_keys, :encrypt_settings] of Nil, after_save: [:clear_modifier, :__create_version__, :cleanup_history] of Nil, before_create: [do self.created_at = self.updated_at = Time.utc end] of Nil, after_create: [] of Nil, before_update: [do self.updated_at = Time.utc end] of Nil, after_update: [] of Nil, before_destroy: [:destroy_settings] 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

from_json(string_or_io : String | IO, trusted : Bool = false) : 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">
from_trusted_json(string_or_io : String | IO, root : String) : self
from_trusted_json(string_or_io : String | IO) : self

Serialize from a trusted JSON source

from_trusted_yaml(string_or_io : String | IO) : self

Serialize from a trusted YAML source

from_yaml(string_or_io : String | IO, trusted : Bool = false) : self
new(rs : DB::ResultSet)
new(created_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, updated_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, modified_by_id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, settings_id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, encryption_level : PlaceOS::Encryption::Level | ActiveModel::Model::None = ::ActiveModel::Model::None.new, settings_string : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, keys : Array(String) | ActiveModel::Model::None = ::ActiveModel::Model::None.new, parent_type : PlaceOS::Model::Settings::ParentType | ActiveModel::Model::None = ::ActiveModel::Model::None.new, parent_id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new)

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

Class methods

attributes

Returns all attribute keys.

by_parent_id(id)

Look up instances of this model dependent on the foreign key

Source
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.

elastic
for_parent(parent_ids : String | Array(String), &) : Array(self)

Get Settings for given parent id/s

Source
for_parent(parent_ids : String | Array(String)) : Array(self)

Get Settings for given parent id/s

Source
from_rs(__temp_2044 : DB::ResultSet)
get_setting_for?(user : Model::User, key : String, settings : Array(Settings) = [] of Settings) : YAML::Any | Nil

Look up a settings key, if it exists and the user has the correct privilege

Source
has_privilege?(user : User, encryption_level : Encryption::Level)
Source
master_settings_query(offset : Int32 = 0, limit : Int32 = 100, &)

Query on main settings records

Gets records where the settings_id does not exist, i.e. is the main

Source
master_settings_query_count

Count of records returned by query on main settings records

Gets records where the settings_id does not exist, i.e. is the main

Source
master_settings_raw_query(count : Bool = false, &)

Query on main settings records

Gets records where the settings_id does not exist, i.e. is the main

Source
on_error(err : Exception | IO::Error)
primary_key

Base class for all Engine models

Source
query(ids : String | Array(String))

Query all settings under parent_id

Source
table_name

Instance methods

__control_system
__control_system=(__control_system : ControlSystem | Nil)
__driver
__driver=(__driver : Driver | Nil)
__mod
__mod=(__mod : Module | Nil)
__modified_by
__modified_by=(__modified_by : User | Nil)
__zone
__zone=(__zone : Zone | Nil)
after_create

Base class for all Engine models

after_destroy

Base class for all Engine models

after_initialize(trusted : Bool)
after_save

Base class for all Engine models

after_update

Base class for all Engine models

any(user : User) : Hash(YAML::Any, YAML::Any) | Nil

Decrypts settings for a user, merges into single JSON object

Source
any

Decrypts settings, merges into single JSON object

Source
apply_defaults

Generate code to apply default values

assign_attributes(created_at : Time | Missing = Missing, updated_at : Time | Missing = Missing, modified_by_id : String | Nil | Missing = Missing, settings_id : String | Nil | Missing = Missing, encryption_level : PlaceOS::Encryption::Level | Missing = Missing, settings_string : String | Missing = Missing, keys : Array(String) | Missing = Missing, parent_type : PlaceOS::Model::Settings::ParentType | Missing = Missing, parent_id : String | Nil | Missing = Missing, id : String | Nil | Missing = Missing)

Assign to multiple attributes.

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

Assign to multiple attributes via HTTP::Params.

assign_attributes(model : PlaceOS::Model::Settings)

Assign to multiple attributes from a model object

assign_attributes_from_json(json, root : String)
assign_attributes_from_json(json)
assign_attributes_from_trusted_json(json, root : String)
assign_attributes_from_trusted_json(json)

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

assign_attributes_from_trusted_yaml(yaml)
assign_attributes_from_yaml(yaml)

Uses the YAML parser as JSON is valid YAML

attributes

Returns a Hash of all attribute values

attributes_tuple

Returns a NamedTuple of all attribute values.

before_create

Base class for all Engine models

before_destroy

Base class for all Engine models

before_save

Base class for all Engine models

before_update

Base class for all Engine models

changed?

Check if any attributes have changed.

changed_attributes

Returns a Hash with all changed attributes.

changed_json(io : IO) : Nil

Serialize the set of changed attributes to JSON.

changed_json

Serialize the set of changed attributes to JSON.

changed_persist_attributes
changed_yaml(io : IO) : Nil

Serialize the set of changed attributes to YAML.

changed_yaml

Serialize the set of changed attributes to YAML.

clear_changes_information

Reset changes for all attributes.

control_system

Retrieves the parent relationship

Source
control_system!
Source
control_system=(parent : ControlSystem)

Sets the parent relationship

Source
created_at

created_at getter

created_at=(value : Time)

Setters created_at setter

created_at?

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.

created_at_assigned?
created_at_change

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

created_at_changed?
created_at_default

created_at's default value

created_at_present?
created_at_removed?
created_at_was
created_at_will_change!

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

decrypt_for(user) : String

Decrypts (if user has correct privilege) and returns the settings string

Source
decrypt_for!(user)

Decrypts the model's settings string dependent on user privileges

Source
dependent_modules

Locate the modules that will be affected by the change of this setting

Source
destroy_settings
driver

Retrieves the parent relationship

Source
driver!
Source
driver=(parent : Driver)

Sets the parent relationship

Source
encrypt!

Encrypt in place

Source
encryption_level

encryption_level getter

encryption_level=(value : PlaceOS::Encryption::Level)

encryption_level setter

encryption_level?

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.

encryption_level_assigned?
encryption_level_change

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

encryption_level_changed?
encryption_level_default

encryption_level's default value

Source
encryption_level_present?
encryption_level_removed?
encryption_level_was
encryption_level_will_change!

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

get_setting_for?(user, setting) : YAML::Any | Nil

Decrypt and pick off the setting

Source
has_key_for?(user, key)

Check if top-level settings key present for the supplied user

Source
history(offset : Int32 = 0, limit : Int32 = 10, &)

Get version history

Versions are in descending order of creation

Source
history(offset : Int32 = 0, limit : Int32 = 10)

Get version history

Versions are in descending order of creation

Source
history_count

Return the number of versions for the main record.

If the record is a version, this is always 0.

Source
id

id getter

id=(value : String | Nil)

id setter

id?
id_assigned?
id_change

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

id_changed?
id_default

id's default value

id_present?
id_removed?
id_was
id_will_change!

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

invoke_props

Base class for all Engine models

is_encrypted?

Determine if setting_string is encrypted

Source
is_version?

If a PlaceOS::Model::Settings has a parent, it's a version

Source
keys

keys getter

keys=(value : Array(String))

keys setter

keys?

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.

keys_assigned?
keys_change

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

keys_changed?
keys_default

keys's default value

Source
keys_present?
keys_removed?
keys_was
keys_will_change!

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

mod

Retrieves the parent relationship

Source
mod!
Source
mod=(parent : Module)

Sets the parent relationship

Source
modified_by

Get cached child or attempt to load an associated modified_by

modified_by!
modified_by=(user)
Source
modified_by_id

modified_by_id getter

modified_by_id=(value : String | Nil)

modified_by_id setter

modified_by_id_assigned?
modified_by_id_change

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

modified_by_id_changed?
modified_by_id_default

modified_by_id's default value

modified_by_id_present?
modified_by_id_removed?
modified_by_id_was
modified_by_id_will_change!

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

parent

Retrieve the parent relation

Source
parent=(parent : Union(Zone, ControlSystem, Driver, Module))
Source
parent_id

parent_id getter

parent_id=(value : String | Nil)

parent_id setter

parent_id_assigned?
parent_id_change

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

parent_id_changed?
parent_id_default

parent_id's default value

parent_id_present?
parent_id_removed?
parent_id_was
parent_id_will_change!

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

parent_type

parent_type getter

parent_type setter

parent_type?

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.

parent_type_assigned?
parent_type_change

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

parent_type_changed?
parent_type_default

parent_type's default value

Source
parent_type_present?
parent_type_removed?
parent_type_was
parent_type_will_change!

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

persistent_attributes

Returns a Hash of all attributes that can be persisted.

primary_key

Base class for all Engine models

Source
primary_key_hash
reset_associations
Source
restore_attributes

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

settings
settings_id

settings_id getter

settings_id=(value : String | Nil)

settings_id setter

settings_id_assigned?
settings_id_change

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

settings_id_changed?
settings_id_default

settings_id's default value

Source
settings_id_present?

Associate with main version

settings_id_removed?
settings_id_was
settings_id_will_change!

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

settings_json

Decrypts settings, encodes as a json object

Source
settings_string

settings_string getter

settings_string=(value : String)

settings_string setter

settings_string?

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.

settings_string_assigned?
settings_string_change

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

settings_string_changed?
settings_string_default

settings_string's default value

Source
settings_string_present?
settings_string_removed?
settings_string_was
settings_string_will_change!

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

table_name
updated_at

updated_at getter

updated_at=(value : Time)

updated_at setter

updated_at?

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.

updated_at_assigned?
updated_at_change

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

updated_at_changed?
updated_at_default

updated_at's default value

updated_at_present?
updated_at_removed?
updated_at_was
updated_at_will_change!

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

validate_nilability

Validate that all non-nillable fields have values.

zone

Retrieves the parent relationship

Source
zone!
Source
zone=(parent : Zone)

Sets the parent relationship

Source

Nested types