class PlaceOS::Model::Playlist

Overview

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).

Included Modules

Defined in:

placeos-models/playlist.cr
placeos-models/playlist/schedule.cr

Constant Summary

CALLBACKS = {before_save: [] 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: [] of Nil, after_destroy: [] of Nil}

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).

Log = ::Log.for(self)

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).

PRIMARY_KEY_TYPES = {:id => (String | Nil)} of Nil => Nil

macro level key => type

PRIMARY_KEYS = [{:id}]

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).

Constructors

Class Method Summary

Instance Method Summary

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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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 #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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 #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def self.new(created_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, updated_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, name : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, description : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, authority_id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, orientation : PlaceOS::Model::Playlist::Orientation | ActiveModel::Model::None = ::ActiveModel::Model::None.new, play_count : Int64 | ActiveModel::Model::None = ::ActiveModel::Model::None.new, play_through_count : Int64 | ActiveModel::Model::None = ::ActiveModel::Model::None.new, default_animation : PlaceOS::Model::Playlist::Animation | ActiveModel::Model::None = ::ActiveModel::Model::None.new, random : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, enabled : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, default_duration : Int32 | ActiveModel::Model::None = ::ActiveModel::Model::None.new, valid_from : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, valid_until : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, schedules : Array(PlaceOS::Model::Playlist::Schedule) | ActiveModel::Model::None = ::ActiveModel::Model::None.new, id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new) #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

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


Class Method Detail

def self.attributes : Array(Symbol) #

Returns all attribute keys.


def self.by_authority_id(id) #

Look up instances of this model dependent on the foreign key


[View source]
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 #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def self.primary_key #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def self.table_name #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def self.update_counts(metrics : Hash(String, Int32)) #

[View source]
def self.update_through_counts(metrics : Hash(String, Int32)) #

[View source]

Instance Method Detail

def __authority : Authority | Nil #

def __authority=(__authority : Authority | Nil) #

def after_create #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def after_destroy #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def after_save #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def after_update #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def apply_defaults #

Generate code to apply default values


def assign_attributes(created_at : Time | Missing = Missing, updated_at : Time | Missing = Missing, name : String | Missing = Missing, description : String | Missing = Missing, authority_id : String | Nil | Missing = Missing, orientation : PlaceOS::Model::Playlist::Orientation | Missing = Missing, play_count : Int64 | Missing = Missing, play_through_count : Int64 | Missing = Missing, default_animation : PlaceOS::Model::Playlist::Animation | Missing = Missing, random : Bool | Missing = Missing, enabled : Bool | Missing = Missing, default_duration : Int32 | Missing = Missing, valid_from : Int64 | Nil | Missing = Missing, valid_until : Int64 | Nil | Missing = Missing, schedules : Array(PlaceOS::Model::Playlist::Schedule) | 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::Playlist) #

Assign to multiple attributes from a model object


def assign_attributes_from_json(json, root : String) #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def assign_attributes_from_json(json) #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def assign_attributes_from_trusted_json(json, root : String) #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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 authority : Authority | Nil #

Retrieves the parent relationship


[View source]
def authority! : Authority #

[View source]
def authority=(parent : Authority) #

Sets the parent relationship


[View source]
def authority_id : String | Nil #

#authority_id getter


def authority_id=(value : String | Nil) #

#authority_id setter


def authority_id_assigned? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def authority_id_default : String | Nil #

#authority_id's default value


def authority_id_present? : Bool #

def authority_id_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def authority_id_was : String | Nil | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def authority_id_will_change! : Nil #

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


def before_create #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def before_destroy #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def before_save #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def before_update #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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 #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def created_at_default : Time #

#created_at's default value


def created_at_present? : Bool #

def created_at_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def created_at_was : Time | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def created_at_will_change! : Nil #

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


def default_animation : PlaceOS::Model::Playlist::Animation #

def default_animation=(value : PlaceOS::Model::Playlist::Animation) #

def default_animation? : PlaceOS::Model::Playlist::Animation | 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 default_animation_assigned? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def default_animation_change : Tuple(PlaceOS::Model::Playlist::Animation | Nil, PlaceOS::Model::Playlist::Animation | Nil) | Nil #

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


def default_animation_changed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def default_animation_default : Animation #

#default_animation's default value


[View source]
def default_animation_present? : Bool #

def default_animation_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def default_animation_was : PlaceOS::Model::Playlist::Animation | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def default_animation_will_change! : Nil #

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


def default_duration : Int32 #

def default_duration=(value : Int32) #

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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def default_duration_default : Int32 #

#default_duration's default value


[View source]
def default_duration_present? : Bool #

time in milliseconds


def default_duration_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def default_duration_was : Int32 | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def default_duration_will_change! : Nil #

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


def description : String #

#description getter


def description=(value : String) #

#description setter


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def description_default : String #

#description's default value


[View source]
def description_present? : Bool #

def description_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def description_was : String | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def description_will_change! : Nil #

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


def enabled : Bool #

#enabled getter


def enabled=(value : Bool) #

#enabled setter


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def enabled_default : Bool #

#enabled's default value


[View source]
def enabled_present? : Bool #

def enabled_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def enabled_was : Bool | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def enabled_will_change! : Nil #

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


def id : String | Nil #

#id getter


def id=(value : String | Nil) #

#id setter


def id? #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def id_assigned? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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 #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def id_default : String | Nil #

#id's default value


def id_present? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def id_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def id_was : String | Nil | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def id_will_change! : Nil #

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


def invoke_props #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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 #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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 #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def name_default : String #

#name's default value


[View source]
def name_present? : Bool #

def name_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def name_was : String | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def name_will_change! : Nil #

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


#orientation getter


def orientation=(value : PlaceOS::Model::Playlist::Orientation) #

#orientation setter


def orientation? : PlaceOS::Model::Playlist::Orientation | 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 orientation_assigned? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def orientation_change : Tuple(PlaceOS::Model::Playlist::Orientation | Nil, PlaceOS::Model::Playlist::Orientation | Nil) | Nil #

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


def orientation_changed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def orientation_default : Orientation #

#orientation's default value


[View source]
def orientation_present? : Bool #

def orientation_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def orientation_was : PlaceOS::Model::Playlist::Orientation | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def orientation_will_change! : Nil #

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


def persistent_attributes #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def play_count : Int64 #

#play_count getter


def play_count=(value : Int64) #

#play_count setter


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def play_count_default : Int64 #

#play_count's default value


[View source]
def play_count_present? : Bool #

def play_count_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def play_count_was : Int64 | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def play_count_will_change! : Nil #

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


def play_through_count : Int64 #

def play_through_count=(value : Int64) #

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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def play_through_count_default : Int64 #

#play_through_count's default value


[View source]
def play_through_count_present? : Bool #

def play_through_count_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def play_through_count_was : Int64 | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def play_through_count_will_change! : Nil #

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


def primary_key #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def primary_key_hash #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def random : Bool #

#random getter


def random=(value : Bool) #

#random setter


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def random_default : Bool #

#random's default value


[View source]
def random_present? : Bool #

def random_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def random_was : Bool | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def random_will_change! : Nil #

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


def reset_associations #

[View source]
def restore_attributes #

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


def revision #

[View source]
def revisions #

[View source]
def run_create_callbacks(&) #

Wrap a block with callbacks for the appropriate crud operation


[View source]
def run_destroy_callbacks(&) #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def run_save_callbacks(&) #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def run_update_callbacks(&) #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


[View source]
def schedules : Array(PlaceOS::Model::Playlist::Schedule) #

#schedules getter


def schedules=(value : Array(PlaceOS::Model::Playlist::Schedule)) #

#schedules setter


def schedules? : Array(PlaceOS::Model::Playlist::Schedule) | 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 schedules_assigned? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def schedules_change : Tuple(Array(PlaceOS::Model::Playlist::Schedule) | Nil, Array(PlaceOS::Model::Playlist::Schedule) | Nil) | Nil #

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


def schedules_changed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def schedules_default : Array(Playlist::Schedule) #

#schedules's default value


[View source]
def schedules_present? : Bool #

when this playlist should play — at least one schedule is required, and each schedule must validate. Stored as a JSONB array.


def schedules_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def schedules_was : Array(PlaceOS::Model::Playlist::Schedule) | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def schedules_will_change! : Nil #

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


def should_present?(now : Time = Time.utc) : Bool #

[View source]
def systems #

[View source]
def table_name #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def to_items_json(json : JSON::Builder) #

Serialize attributes with :items in its serialization_group option


def to_items_json(io : IO) : Nil #

Serialize attributes with :items in its serialization_group option


def to_items_json : String #

Serialize attributes with :items in its serialization_group option


def to_items_struct #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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 #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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 #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def updated_at_default : Time #

#updated_at's default value


def updated_at_present? : Bool #

def updated_at_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def updated_at_was : Time | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def updated_at_will_change! : Nil #

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


def valid_from : Int64 | Nil #

#valid_from getter


def valid_from=(value : Int64 | Nil) #

#valid_from setter


def valid_from_assigned? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def valid_from_default : Int64 | Nil #

#valid_from's default value


[View source]
def valid_from_present? : Bool #

conditions that can determine when a playlist is valid


def valid_from_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def valid_from_was : Int64 | Nil | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def valid_from_will_change! : Nil #

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


def valid_until : Int64 | Nil #

#valid_until getter


def valid_until=(value : Int64 | Nil) #

#valid_until setter


def valid_until_assigned? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


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

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def valid_until_default : Int64 | Nil #

#valid_until's default value


[View source]
def valid_until_present? : Bool #

def valid_until_removed? : Bool #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def valid_until_was : Int64 | Nil | Nil #

forward declare so this file can be required before playlist.cr finishes defining the parent class (the attribute schedules : Array(Playlist::Schedule) line needs Schedule resolved at macro-expansion time).


def valid_until_will_change! : Nil #

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


def validate_nilability #

Validate that all non-nillable fields have values.


def zones #

[View source]