class PlaceOS::Model::Tenant

Included Modules

Defined in:

placeos-models/tenant.cr
placeos-models/tenant/outlook_config.cr

Constant Summary

CALLBACKS = {before_save: [:set_delegated, :"encrypt!"] of Nil, after_save: [] 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_attendees, :destroy_guests, :destroy_event_metadata] of Nil, after_destroy: [] of Nil}
Log = ::Log.for(self)
PRIMARY_KEY_TYPES = {:id => (Int64 | Nil)} of Nil => Nil

macro level key => type

PRIMARY_KEYS = [{:id}]
VALID_PLATFORMS = ["office365", "google"]

Constructors

Class Method Summary

Macro Summary

Instance Method Summary

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

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

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::ModelWithAutoKey)
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::ModelWithAutoKey

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

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

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

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(parent_id : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, name : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, domain : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, email_domain : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, platform : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, credentials : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, booking_limits : JSON::Any | ActiveModel::Model::None = ::ActiveModel::Model::None.new, booking_range : Hash(String, UInt32) | ActiveModel::Model::None = ::ActiveModel::Model::None.new, booking_period : Hash(String, UInt32) | ActiveModel::Model::None = ::ActiveModel::Model::None.new, outlook_config : PlaceOS::Model::Tenant::OutlookConfig | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, delegated : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, service_account : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, secret_expiry : Time | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, early_checkin : Int64 | ActiveModel::Model::None = ::ActiveModel::Model::None.new, id : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, created_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, updated_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new) #

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

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


Class Method Detail

def self.attributes : Array(Symbol) #

Returns all attribute keys.


def self.changefeed_ignored_update_columns : Array(String) | Nil #

def self.changes(id : Int64 | 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_2013 : DB::ResultSet) #

def self.on_error(err : Exception | IO::Error) #

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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


[View source]
def self.table_name #

Macro Detail

macro scope(name, &block) #

Instance Method Detail

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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def after_initialize(trusted : Bool) #

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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def apply_defaults #

Generate code to apply default values


def as_json #

[View source]
def assign_attributes(parent_id : Int64 | Nil | Missing = Missing, name : String | Nil | Missing = Missing, domain : String | Missing = Missing, email_domain : String | Nil | Missing = Missing, platform : String | Missing = Missing, credentials : String | Missing = Missing, booking_limits : JSON::Any | Missing = Missing, booking_range : Hash(String, UInt32) | Missing = Missing, booking_period : Hash(String, UInt32) | Missing = Missing, outlook_config : PlaceOS::Model::Tenant::OutlookConfig | Nil | Missing = Missing, delegated : Bool | Missing = Missing, service_account : String | Nil | Missing = Missing, secret_expiry : Time | Nil | Missing = Missing, early_checkin : Int64 | Missing = Missing, id : Int64 | Nil | Missing = Missing, created_at : Time | Missing = Missing, updated_at : Time | 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::Tenant) #

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 attendees #

[View source]
def attributes #

Returns a Hash of all attribute values


def attributes_json(io : IO) : Nil #

Serialize attributes to JSON, without any other properties to_json may include, as .from_json expects them.

Values are serialized as in to_json, applying any attribute converters.


def attributes_json(json : JSON::Builder) : Nil #

Serialize attributes to JSON, without any other properties to_json may include, as .from_json expects them.

Values are serialized as in to_json, applying any attribute converters.


def attributes_json : String #

Serialize attributes to JSON, without any other properties to_json may include, as .from_json expects them.

Values are serialized as in to_json, applying any attribute converters.


def attributes_tuple #

Returns a NamedTuple of all attribute values.


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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def booking_limits : JSON::Any #

def booking_limits=(value : JSON::Any) #

def booking_limits? : JSON::Any | 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 booking_limits_assigned? : Bool #

def booking_limits_change : Tuple(JSON::Any | Nil, JSON::Any | Nil) | Nil #

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


def booking_limits_changed? : Bool #

def booking_limits_default : JSON::Any #

#booking_limits's default value


[View source]
def booking_limits_present? : Bool #

booking type => no. bookings


def booking_limits_removed? : Bool #

def booking_limits_was : JSON::Any | Nil #

def booking_limits_will_change! : Nil #

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


def booking_period : Hash(String, UInt32) #

def booking_period=(value : Hash(String, UInt32)) #

def booking_period? : Hash(String, UInt32) | 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 booking_period_assigned? : Bool #

def booking_period_change : Tuple(Hash(String, UInt32) | Nil, Hash(String, UInt32) | Nil) | Nil #

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


def booking_period_changed? : Bool #

def booking_period_default : Hash(String, UInt32) #

#booking_period's default value


[View source]
def booking_period_present? : Bool #

booking type => maximum length of a booking in minutes


def booking_period_removed? : Bool #

def booking_period_was : Hash(String, UInt32) | Nil #

def booking_period_will_change! : Nil #

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


def booking_range : Hash(String, UInt32) #

def booking_range=(value : Hash(String, UInt32)) #

def booking_range? : Hash(String, UInt32) | 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 booking_range_assigned? : Bool #

def booking_range_change : Tuple(Hash(String, UInt32) | Nil, Hash(String, UInt32) | Nil) | Nil #

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


def booking_range_changed? : Bool #

def booking_range_default : Hash(String, UInt32) #

#booking_range's default value


[View source]
def booking_range_present? : Bool #

booking type => days from now a booking can be made


def booking_range_removed? : Bool #

def booking_range_was : Hash(String, UInt32) | Nil #

def booking_range_will_change! : Nil #

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


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 changes #

Returns a Hash of changed attributes, mapping each to a {previous, current} tuple.


def changes_json(io : IO) : Nil #

Serialize changed attributes to JSON as {"attribute": [previous, current]}.

Values are serialized as in to_json, applying any attribute converters.


def changes_json(json : JSON::Builder) : Nil #

Serialize changed attributes to JSON as {"attribute": [previous, current]}.

Values are serialized as in to_json, applying any attribute converters.


def changes_json : String #

Serialize changed attributes to JSON as {"attribute": [previous, current]}.

Values are serialized as in to_json, applying any attribute converters.


def clear_changes_information #

Reset changes for all attributes.


def created_at : Time #

#created_at getter


def created_at=(value : Time) #

#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 credentials : String #

#credentials getter


def credentials=(value : String) #

#credentials setter


def credentials? : 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 credentials_assigned? : Bool #

def credentials_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 credentials_changed? : Bool #

def credentials_default : String #

#credentials's default value


[View source]
def credentials_present? : Bool #

def credentials_removed? : Bool #

def credentials_was : String | Nil #

def credentials_will_change! : Nil #

Include #credentials 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 credentials string


[View source]
def decrypt_for!(user) #

[View source]
def delegated : Bool #

#delegated getter


def delegated=(value : Bool) #

#delegated setter


def delegated? : 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 delegated_assigned? : Bool #

def delegated_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 delegated_changed? : Bool #

def delegated_default : Bool #

#delegated's default value


[View source]
def delegated_present? : Bool #

def delegated_removed? : Bool #

def delegated_was : Bool | Nil #

def delegated_will_change! : Nil #

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


def destroy_attendees #

def destroy_event_metadata #

def destroy_guests #

def domain : String #

#domain getter


def domain=(value : String) #

#domain setter


def domain? : 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 domain_assigned? : Bool #

def domain_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 domain_changed? : Bool #

def domain_default : String #

#domain's default value


[View source]
def domain_present? : Bool #

def domain_removed? : Bool #

def domain_was : String | Nil #

def domain_will_change! : Nil #

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


def early_checkin : Int64 #

def early_checkin=(value : Int64) #

def early_checkin? : Int64 | 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 early_checkin_assigned? : Bool #

def early_checkin_change : Tuple(Int64 | Nil, Int64 | Nil) | Nil #

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


def early_checkin_changed? : Bool #

def early_checkin_default : Int64 #

#early_checkin's default value


[View source]
def early_checkin_present? : Bool #

def early_checkin_removed? : Bool #

def early_checkin_was : Int64 | Nil #

def early_checkin_will_change! : Nil #

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


def email_domain : String | Nil #

#email_domain getter


def email_domain=(value : String | Nil) #

#email_domain setter


def email_domain_assigned? : Bool #

def email_domain_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 email_domain_changed? : Bool #

def email_domain_default : String | Nil #

#email_domain's default value


[View source]
def email_domain_present? : Bool #

def email_domain_removed? : Bool #

def email_domain_was : String | Nil | Nil #

def email_domain_will_change! : Nil #

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


def encrypt! #

Encrypt in place


[View source]
def event_metadata #

[View source]
def guests #

[View source]
def id : Int64 | Nil #

#id getter


def id=(value : Int64 | Nil) #

#id setter


def id? #

def id_assigned? : Bool #

def id_change : Tuple(Int64 | Nil | Nil, Int64 | 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 : Int64 | Nil #

#id's default value


def id_present? : Bool #

def id_removed? : Bool #

def id_was : Int64 | 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::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def is_encrypted? : Bool #

Determine if attributes are encrypted


[View source]
def name : String | Nil #

#name getter


def name=(value : String | Nil) #

#name setter


def name_assigned? : Bool #

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

def name_default : String | Nil #

#name's default value


[View source]
def name_present? : Bool #

def name_removed? : Bool #

def name_was : String | Nil | Nil #

def name_will_change! : Nil #

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


def outlook_config : PlaceOS::Model::Tenant::OutlookConfig | Nil #

def outlook_config=(value : PlaceOS::Model::Tenant::OutlookConfig | Nil) #

def outlook_config_assigned? : Bool #

def outlook_config_change : Tuple(PlaceOS::Model::Tenant::OutlookConfig | Nil | Nil, PlaceOS::Model::Tenant::OutlookConfig | Nil | Nil) | Nil #

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


def outlook_config_changed? : Bool #

def outlook_config_default : OutlookConfig | Nil #

#outlook_config's default value


[View source]
def outlook_config_present? : Bool #

def outlook_config_removed? : Bool #

def outlook_config_was : PlaceOS::Model::Tenant::OutlookConfig | Nil | Nil #

def outlook_config_will_change! : Nil #

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


def parent #

[View source]
def parent_id : Int64 | Nil #

#parent_id getter


def parent_id=(value : Int64 | Nil) #

Setters #parent_id setter


def parent_id_assigned? : Bool #

def parent_id_change : Tuple(Int64 | Nil | Nil, Int64 | 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 : Int64 | Nil #

#parent_id's default value


[View source]
def parent_id_present? : Bool #

TODO : resolve for belongs_to Tenant, foreign_key: "parent_id", association_name: "parent"


def parent_id_removed? : Bool #

def parent_id_was : Int64 | Nil | Nil #

def parent_id_will_change! : Nil #

Include #parent_id 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 place_calendar_client(bearer_token : String, expires : Int64 | Nil) #

[View source]
def place_calendar_client #

[View source]
def platform : String #

#platform getter


def platform=(value : String) #

#platform setter


def platform? : 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 platform_assigned? : Bool #

def platform_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 platform_changed? : Bool #

def platform_default : String #

#platform's default value


[View source]
def platform_present? : Bool #

def platform_removed? : Bool #

def platform_was : String | Nil #

def platform_will_change! : Nil #

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


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

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


[View source]
def primary_key_hash #

def restore_attributes #

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


def secret_expiry : Time | Nil #

def secret_expiry=(value : Time | Nil) #

def secret_expiry_assigned? : Bool #

def secret_expiry_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 secret_expiry_changed? : Bool #

def secret_expiry_default : Time | Nil #

#secret_expiry's default value


[View source]
def secret_expiry_present? : Bool #

def secret_expiry_removed? : Bool #

def secret_expiry_was : Time | Nil | Nil #

def secret_expiry_will_change! : Nil #

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


def service_account : String | Nil #

def service_account=(value : String | Nil) #

def service_account_assigned? : Bool #

def service_account_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 service_account_changed? : Bool #

def service_account_default : String | Nil #

#service_account's default value


[View source]
def service_account_present? : Bool #

def service_account_removed? : Bool #

def service_account_was : String | Nil | Nil #

def service_account_will_change! : Nil #

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


def set_delegated #

ensure delegated column has been defined


[View source]
def table_name #

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 using_service_account? #

[View source]
def valid_json?(value : String) #

[View source]
def validate_nilability #

Validate that all non-nillable fields have values.


def which_account(user_email : String, resources = [] of String) : String #

distribute load as much as possible when using service accounts


[View source]