class

PlaceOS::Model::GroupPlaylist

Inherits PgORM::Timestamps < PgORM::Base < PgORM::Validators < PgORM::Table < PgORM::Persistence < PgORM::Associations < ActiveModel::Callbacks < ActiveModel::Validation < ActiveModel::Model < DB::Mappable < DB::Serializable < YAML::Serializable < JSON::Serializable < Reference < Object

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

Constants

CALLBACKS = { before_save: [do if (__temp_1216 = @group) && __temp_1216.new_record? __temp_1216.save self.group_id = __temp_1216.id.not_nil! end end, do if (__temp_1218 = @playlist) && __temp_1218.new_record? __temp_1218.save self.playlist_id = __temp_1218.id.not_nil! end end] 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: [do end, do end] of Nil, }

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

PRIMARY_KEY_TYPES = {:group_id => UUID, :playlist_id => String} of Nil => Nil

macro level key => type

PRIMARY_KEYS = [{:group_id, :playlist_id}]

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

Constructors

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

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

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

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

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

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

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

from_trusted_json(string_or_io : String | IO) : self

Serialize from a trusted JSON source

from_trusted_yaml(string_or_io : String | IO) : self

Serialize from a trusted YAML source

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

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

Source
new(pull : JSON::PullParser)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

Source
new(rs : DB::ResultSet)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

new(created_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, updated_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, group_id : UUID | ActiveModel::Model::None = ::ActiveModel::Model::None.new, playlist_id : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

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

Class methods

attributes

Returns all attribute keys.

by_group_id(id)
Source
by_playlist_id(id)
Source
changes(id : Tuple(UUID, String) | 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.

from_rs(__temp_2380 : DB::ResultSet)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

on_error(err : Exception | IO::Error)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

primary_key

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

Source
table_name

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

Instance methods

after_create

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

after_destroy

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

after_initialize(trusted : Bool)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

after_save

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

after_update

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

apply_defaults

Generate code to apply default values

assign_attributes(created_at : Time | Missing = Missing, updated_at : Time | Missing = Missing, group_id : UUID | Missing = Missing, playlist_id : String | Missing = Missing)

Assign to multiple attributes.

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

Assign to multiple attributes via HTTP::Params.

assign_attributes(model : PlaceOS::Model::GroupPlaylist)

Assign to multiple attributes from a model object

assign_attributes_from_json(json, root : String)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

assign_attributes_from_json(json)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

assign_attributes_from_trusted_json(json, root : String)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

assign_attributes_from_trusted_json(json)

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

assign_attributes_from_trusted_yaml(yaml)

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

assign_attributes_from_yaml(yaml)

Uses the YAML parser as JSON is valid YAML

attributes

Returns a Hash of all attribute values

attributes_tuple

Returns a NamedTuple of all attribute values.

before_create

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

before_destroy

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

before_save

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

before_update

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

build_group
Source
build_playlist
Source
changed?

Check if any attributes have changed.

changed_attributes

Returns a Hash with all changed attributes.

changed_json(io : IO) : Nil

Serialize the set of changed attributes to JSON.

changed_json

Serialize the set of changed attributes to JSON.

changed_persist_attributes

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

changed_yaml(io : IO) : Nil

Serialize the set of changed attributes to YAML.

changed_yaml

Serialize the set of changed attributes to YAML.

clear_changes_information

Reset changes for all attributes.

create_group
Source
create_group!
Source
create_playlist
Source
create_playlist!
Source
created_at

created_at getter

created_at=(value : Time)

Setters created_at setter

created_at?

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

created_at_assigned?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

created_at_change

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

created_at_changed?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

created_at_default

created_at's default value

created_at_present?
created_at_removed?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

created_at_was

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

created_at_will_change!

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

group
Source
group!
Source
group=(record : Group) : Group
Source
group?
Source
group_id

group_id getter

group_id=(value : UUID)

group_id setter

group_id?

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.

group_id_assigned?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

group_id_change

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

group_id_changed?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

group_id_default

group_id's default value

Source
group_id_present?
group_id_removed?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

group_id_was

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

group_id_will_change!

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

id

Always returns this record's primary key value, even when the primary key isn't named id

id?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

invoke_props

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

persistent_attributes

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

playlist
Source
playlist!
Source
playlist=(record : Playlist) : Playlist
Source
playlist?
Source
playlist_id

playlist_id getter

playlist_id=(value : String)

playlist_id setter

playlist_id?

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.

playlist_id_assigned?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

playlist_id_change

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

playlist_id_changed?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

playlist_id_default

playlist_id's default value

Source
playlist_id_present?
playlist_id_removed?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

playlist_id_was

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

playlist_id_will_change!

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

primary_key

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

Source
primary_key_hash

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

reload_group
Source
reload_group?
Source
reload_playlist
Source
reload_playlist?
Source
restore_attributes

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

table_name

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

updated_at

updated_at getter

updated_at=(value : Time)

updated_at setter

updated_at?

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

updated_at_assigned?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

updated_at_change

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

updated_at_changed?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

updated_at_default

updated_at's default value

updated_at_present?
updated_at_removed?

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

updated_at_was

Junction between Group (authority-scoped, UUID) and Playlist (authority-scoped, legacy TEXT PK). Lets groups co-own / share playlists with each other within the same authority.

Presence-only — no per-row permission bitmask, no GroupHistory audit. A user's capability on a linked playlist comes from their GroupUser.permissions within the group.

Both sides must share an authority — enforced at the model layer (no single FK can express it).

updated_at_will_change!

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

validate_nilability

Validate that all non-nillable fields have values.

Nested types