class PlaceOS::Model::Settings

Included Modules

Defined in:

placeos-models/settings.cr

Constant Summary

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)

Constructors

Class Method Summary

Instance Method Summary

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

create_version(version : self) : self create_version

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, run_create_callbacks(&) run_create_callbacks, run_destroy_callbacks(&) run_destroy_callbacks, run_save_callbacks(&) run_save_callbacks, run_update_callbacks(&) run_update_callbacks

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, auto_generate_id : Bool auto_generate_id, from_rs(rs : DB::ResultSet) from_rs, primary_key : Symbol 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, 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) #

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

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


Class Method Detail

def self.attributes : Array(Symbol) #

Returns all attribute keys.


def self.auto_generate_id : Bool #

def self.by_parent_id(id) #

Look up instances of this model dependent on the foreign key


[View source]
def self.changes(id : PrimaryKeyType = 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.for_parent(parent_ids : String | Array(String), &) : Array(self) #

Get Settings for given parent id/s


[View source]
def self.for_parent(parent_ids : String | Array(String)) : Array(self) #

Get Settings for given parent id/s


[View source]
def self.from_rs(__temp_712 : DB::ResultSet) #

def self.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


[View source]
def self.has_privilege?(user : User, encryption_level : Encryption::Level) #

[View source]
def self.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


[View source]
def self.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


[View source]
def self.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


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

def self.primary_key : Symbol #

def self.query(ids : String | Array(String)) #

Query all settings under #parent_id


[View source]
def self.table_name #

Instance Method Detail

def __control_system : ControlSystem | Nil #

def __control_system=(__control_system : ControlSystem | Nil) #

def __driver : Driver | Nil #

def __driver=(__driver : Driver | Nil) #

def __mod : Module | Nil #

def __mod=(__mod : Module | Nil) #

def __modified_by : User | Nil #

def __modified_by=(__modified_by : User | Nil) #

def __zone : Zone | Nil #

def __zone=(__zone : Zone | Nil) #

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

Base class for all Engine models


[View source]
def after_destroy #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
def after_initialize(trusted : Bool) #

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

Base class for all Engine models


[View source]
def after_update #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
def any(user : User) : Hash(YAML::Any, YAML::Any) | Nil #

Decrypts settings for a user, merges into single JSON object


[View source]
def any : Hash(YAML::Any, YAML::Any) #

Decrypts settings, merges into single JSON object


[View source]
def apply_defaults #

Generate code to apply default values


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


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

Assign to mulitple attributes via HTTP::Params.


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

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


[View source]
def before_destroy #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
def before_save #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
def before_update #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
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 control_system : ControlSystem | Nil #

Retrieves the parent relationship


[View source]
def control_system! : ControlSystem #

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

Sets the parent relationship


[View source]
def created_at : Time #

#created_at getter


def created_at=(value : Time) #

Setters #created_at setter


def created_at? : Time | Nil #

Assign instance variable to correct type


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_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 decrypt_for(user) : String #

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


[View source]
def decrypt_for!(user) #

Decrypts the model's settings string dependent on user privileges


[View source]
def dependent_modules : Array(Model::Module) #

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


[View source]
def destroy_settings #

def driver : Driver | Nil #

Retrieves the parent relationship


[View source]
def driver! : Driver #

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

Sets the parent relationship


[View source]
def encrypt! #

Encrypt in place


[View source]
def encryption_level : PlaceOS::Encryption::Level #

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

def encryption_level? : PlaceOS::Encryption::Level | Nil #

Assign instance variable to correct type


def encryption_level_assigned? : Bool #

def encryption_level_change : Tuple(PlaceOS::Encryption::Level | Nil, PlaceOS::Encryption::Level | Nil) | Nil #

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


def encryption_level_changed? : Bool #

def encryption_level_default : Encryption::Level #

#encryption_level's default value


[View source]
def encryption_level_present? : Bool #

def encryption_level_was : PlaceOS::Encryption::Level | Nil #

def encryption_level_will_change! : Nil #

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


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

Decrypt and pick off the setting


[View source]
def has_key_for?(user, key) #

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


[View source]
def history(offset : Int32 = 0, limit : Int32 = 10, &) #

Get version history

Versions are in descending order of creation


[View source]
def history(offset : Int32 = 0, limit : Int32 = 10) #

Get version history

Versions are in descending order of creation


[View source]
def history_count #

Return the number of versions for the main record.

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


[View source]
def id : String | Nil #

#id getter


def id=(value : String | Nil) #

#id setter


def id? : String | Nil | Nil #
Description copied from class PgORM::Base

Same as #id but may return nil when the record hasn't been saved instead of raising.


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_was : String | Nil | Nil #

def id_will_change! : Nil #

Include #id 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 is_encrypted? : Bool #

Determine if setting_string is encrypted


[View source]
def is_version? : Bool #

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


[View source]
def keys : Array(String) #

#keys getter


def keys=(value : Array(String)) #

#keys setter


def keys? : Array(String) | Nil #

Assign instance variable to correct type


def keys_assigned? : Bool #

def keys_change : Tuple(Array(String) | Nil, Array(String) | Nil) | Nil #

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


def keys_changed? : Bool #

def keys_default : Array(String) #

#keys's default value


[View source]
def keys_present? : Bool #

def keys_was : Array(String) | Nil #

def keys_will_change! : Nil #

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


def mod : Module | Nil #

Retrieves the parent relationship


[View source]
def mod! : Module #

[View source]
def mod=(parent : Module) #

Sets the parent relationship


[View source]
def modified_by : User | Nil #

Get cached child or attempt to load an associated modified_by


def modified_by! : User #

def modified_by=(user) #

[View source]
def modified_by_id : String | Nil #

def modified_by_id=(value : String | Nil) #

def modified_by_id_assigned? : Bool #

def modified_by_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 modified_by_id_changed? : Bool #

def modified_by_id_default : String | Nil #

#modified_by_id's default value


def modified_by_id_present? : Bool #

def modified_by_id_was : String | Nil | Nil #

def modified_by_id_will_change! : Nil #

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


def parent #

Retrieve the parent relation


[View source]
def parent=(parent : Union(Zone, ControlSystem, Driver, Module)) #

[View source]
def parent_id : String | Nil #

#parent_id getter


def parent_id=(value : String | Nil) #

#parent_id setter


def parent_id_assigned? : Bool #

def parent_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 parent_id_changed? : Bool #

def parent_id_default : String | Nil #

#parent_id's default value


def parent_id_present? : Bool #

def parent_id_was : String | Nil | Nil #

def parent_id_will_change! : Nil #

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


#parent_type getter


def parent_type=(value : PlaceOS::Model::Settings::ParentType) #

#parent_type setter


def parent_type? : PlaceOS::Model::Settings::ParentType | Nil #

Assign instance variable to correct type


def parent_type_assigned? : Bool #

def parent_type_change : Tuple(PlaceOS::Model::Settings::ParentType | Nil, PlaceOS::Model::Settings::ParentType | Nil) | Nil #

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


def parent_type_changed? : Bool #

def parent_type_default : ParentType #

#parent_type's default value


[View source]
def parent_type_present? : Bool #

def parent_type_was : PlaceOS::Model::Settings::ParentType | Nil #

def parent_type_will_change! : Nil #

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


def persistent_attributes #

Returns a Hash of all attributes that can be persisted.


def reset_associations #

[View source]
def restore_attributes #

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


def run_create_callbacks(&) #

Wrap a block with callbacks for the appropriate crud operation


[View source]
def run_destroy_callbacks(&) #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
def run_save_callbacks(&) #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
def run_update_callbacks(&) #
Description copied from class PlaceOS::Model::ModelBase

Base class for all Engine models


[View source]
def settings #

def settings_id : String | Nil #

#settings_id getter


def settings_id=(value : String | Nil) #

#settings_id setter


def settings_id_assigned? : Bool #

def settings_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 settings_id_changed? : Bool #

def settings_id_default : String | Nil #

#settings_id's default value


[View source]
def settings_id_present? : Bool #

Associate with main version


def settings_id_was : String | Nil | Nil #

def settings_id_will_change! : Nil #

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


def settings_json #

Decrypts settings, encodes as a json object


[View source]
def settings_string : String #

def settings_string=(value : String) #

def settings_string? : String | Nil #

Assign instance variable to correct type


def settings_string_assigned? : Bool #

def settings_string_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 settings_string_changed? : Bool #

def settings_string_default : String #

#settings_string's default value


[View source]
def settings_string_present? : Bool #

def settings_string_was : String | Nil #

def settings_string_will_change! : Nil #

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


def table_name #

def updated_at : Time #

#updated_at getter


def updated_at=(value : Time) #

#updated_at setter


def updated_at? : Time | Nil #

Assign instance variable to correct type


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_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 validate_nilability #

Validate that all non-nillable fields have values.


def zone : Zone | Nil #

Retrieves the parent relationship


[View source]
def zone! : Zone #

[View source]
def zone=(parent : Zone) #

Sets the parent relationship


[View source]