class EventMetadata

Included Modules

Extended Modules

Defined in:

models/event_metadata.cr

Constant Summary

COLUMNS = {"id" => {type: Int64, primary: true, converter: "Int64", db_column_name: "id", crystal_variable_name: id, presence: false, mass_assign: true}, "system_id" => {type: String, primary: false, converter: "String", db_column_name: "system_id", crystal_variable_name: system_id, presence: true, mass_assign: true}, "event_id" => {type: String, primary: false, converter: "String", db_column_name: "event_id", crystal_variable_name: event_id, presence: true, mass_assign: true}, "recurring_master_id" => {type: String | ::Nil, primary: false, converter: "String", db_column_name: "recurring_master_id", crystal_variable_name: recurring_master_id, presence: true, mass_assign: true}, "ical_uid" => {type: String, primary: false, converter: "String", db_column_name: "ical_uid", crystal_variable_name: ical_uid, presence: true, mass_assign: true}, "host_email" => {type: String, primary: false, converter: "String", db_column_name: "host_email", crystal_variable_name: host_email, presence: true, mass_assign: true}, "resource_calendar" => {type: String, primary: false, converter: "String", db_column_name: "resource_calendar", crystal_variable_name: resource_calendar, presence: true, mass_assign: true}, "event_start" => {type: Int64, primary: false, converter: "Int64", db_column_name: "event_start", crystal_variable_name: event_start, presence: true, mass_assign: true}, "event_end" => {type: Int64, primary: false, converter: "Int64", db_column_name: "event_end", crystal_variable_name: event_end, presence: true, mass_assign: true}, "ext_data" => {type: JSON::Any | ::Nil, primary: false, converter: "JSON::Any", db_column_name: "ext_data", crystal_variable_name: ext_data, presence: true, mass_assign: true}, "tenant_id" => {type: Int64, primary: false, converter: "Int64", db_column_name: "tenant_id", crystal_variable_name: tenant_id, presence: false, mass_assign: true}} of Nil => Nil
POLYMORPHISM_SETTINGS = {} of Nil => Nil
RELATION_FILTERS = {} of String => (Clear::SQL::SelectBuilder ->)

Constructors

Class Method Summary

Instance Method Summary

Constructor Detail

def self.create(x : Hash) : self #

[View source]
def self.create(x : NamedTuple) : self #

[View source]
def self.create(**args) : self #

Build and new model and save it. Returns the model.

The model may not be saved due to validation failure; check the returned model errors? and persisted? flags.


[View source]
def self.create!(a : Hash) : self #

[View source]
def self.create!(x : NamedTuple) : self #

[View source]
def self.create!(**args) : self #

Build and new model and save it. Returns the model.

Returns the newly inserted model Raises an exception if validation failed during the saving process.


[View source]
def self.new(h : Hash(String, _), cache : Clear::Model::QueryCache | Nil = nil, persisted = false, fetch_columns = false) #

[View source]
def self.new(json : JSON::Any, cache : Clear::Model::QueryCache | Nil = nil, persisted = false) #

[View source]
def self.new(t : NamedTuple, persisted = false) #

[View source]
def self.new #

[View source]

Class Method Detail

def self.__call_relation_filter__(name : String, query : Clear::SQL::SelectBuilder) #

[View source]
def self.__relation_filter_attendees__(query) #

def self.build(**x : **T) forall T #

Build a new empty model and fill the columns using the NamedTuple in argument.

Returns the new model


[View source]
def self.by_tenant(tenant_id) #

[View source]
def self.columns #

[View source]
def self.connection : String #

Define on which connection the model is living. Useful in case of models living in different databases.

Is set to "default" by default.

See Clear::SQL#init(URI, *opts) for more information about multi-connections.

Example:

 Clear::SQL.init("postgres://postgres@localhost/database_1", connection_pool_size: 5)
 Clear::SQL.init("secondary", "postgres://postgres@localhost/database_2", connection_pool_size: 5)

class ModelA
  include Clear::Model

  # Performs all the queries on `database_1`
  # self.connection = "default"
  column id : Int32, primary: true, presence: false
  column title : String
end

class ModelB
  include Clear::Model

  # Performs all the queries on `database_2`
  self.connection = "secondary"

  column id : Int32, primary: true, presence: false
end

def self.connection=(connection : String) #

Define on which connection the model is living. Useful in case of models living in different databases.

Is set to "default" by default.

See Clear::SQL#init(URI, *opts) for more information about multi-connections.

Example:

 Clear::SQL.init("postgres://postgres@localhost/database_1", connection_pool_size: 5)
 Clear::SQL.init("secondary", "postgres://postgres@localhost/database_2", connection_pool_size: 5)

class ModelA
  include Clear::Model

  # Performs all the queries on `database_1`
  # self.connection = "default"
  column id : Int32, primary: true, presence: false
  column title : String
end

class ModelB
  include Clear::Model

  # Performs all the queries on `database_2`
  self.connection = "secondary"

  column id : Int32, primary: true, presence: false
end

def self.create(x : Array(NamedTuple)) : Array(self) #

Multi-models creation. See Collection#create(**args)

Returns the list of newly created model.

Each model will call an INSERT query. You may want to use Collection#import to insert multiple model more efficiently in one query.


[View source]
def self.create!(x : Array(NamedTuple)) : Array(self) #

Multi-models creation. See Collection#create!(**args)

Returns the list of newly created model. Raises exception if any of the model has validation error.


[View source]
def self.create_from_json(string_or_io : String | IO, trusted : Bool = false) #

Create a new model from json and save it. Returns the model.

The model may not be saved due to validation failure; check the returned model errors? and persisted? flags. Trusted flag set to true will allow mass assignment without protection, FALSE by default


def self.create_from_json!(string_or_io : String | IO, trusted : Bool = false) #

Create a new model from json and save it. Returns the model.

Returns the newly inserted model Raises an exception if validation failed during the saving process. Trusted flag set to true will allow mass assignment without protection, FALSE by default


def self.find(x) #

Returns a model using primary key equality Returns nil if not found.


[View source]
def self.find!(x) #

Returns a model using primary key equality. Raises error if the model is not found.


[View source]
def self.from_json(string_or_io : String | IO, trusted : Bool = false) #

Create a new empty model and fill the columns from json. Returns the new model

Trusted flag set to true will allow mass assignment without protection, FALSE by default


def self.full_table_name #

returns the fully qualified and escaped name for this table. add schema if schema is different from 'public' (default schema)

ex: "schema"."table"


[View source]
def self.import(array : Enumerable(self), on_conflict : Clear::SQL::InsertQuery -> | Nil = nil) #

Import a bulk of models in one SQL insert query. Each model must be non-persisted.

on_conflict callback can be optionnaly turned on to manage constraints of the database.

Note: Old models are not modified. This method return a copy of the models as saved in the database.

Example:


 users = [ User.new(id: 1), User.new(id: 2), User.new(id: 3)]
 users = User.import(users)

[View source]
def self.migrate_recurring_metadata(system_id : String, recurrance : PlaceCalendar::Event, parent_metadata : EventMetadata) #

[View source]
def self.polymorphic? : Bool #

def self.query #

Return a new empty query SELECT * FROM [my_model_table]. Can be refined after that.


[View source]
def self.read_only=(read_only : Bool) #

def self.read_only? : Bool #

def self.schema : Clear::SQL::Symbolic | Nil #

Define the current schema used in PostgreSQL. The value is nil by default, which lead to non-specified schema during the querying, and usage of "public" by PostgreSQL.

This property can be redefined on initialization. Example:

  class MyModel
    include Clear::Model

    self.schema = "my_schema"
  end
  MyModel.query.to_sql # SELECT * FROM "my_schema"."my_models"

def self.schema=(schema : Clear::SQL::Symbolic | Nil) #

Define the current schema used in PostgreSQL. The value is nil by default, which lead to non-specified schema during the querying, and usage of "public" by PostgreSQL.

This property can be redefined on initialization. Example:

  class MyModel
    include Clear::Model

    self.schema = "my_schema"
  end
  MyModel.query.to_sql # SELECT * FROM "my_schema"."my_models"

def self.table : Clear::SQL::Symbolic #

Return the table name setup for this model. By convention, the class name is by default equals to the pluralized underscored string form of the model name. Example:

  MyModel => "my_models"
  Person => "people"
  Project::Info => "project_infos"

The property can be updated at initialization to a custom table name:

  class MyModel
    include Clear::Model

    self.table = "another_table_name"
  end
  MyModel.query.to_sql # SELECT * FROM "another_table_name"

def self.table=(table : Clear::SQL::Symbolic) #

Return the table name setup for this model. By convention, the class name is by default equals to the pluralized underscored string form of the model name. Example:

  MyModel => "my_models"
  Person => "people"
  Project::Info => "project_infos"

The property can be updated at initialization to a custom table name:

  class MyModel
    include Clear::Model

    self.table = "another_table_name"
  end
  MyModel.query.to_sql # SELECT * FROM "another_table_name"

Instance Method Detail

def _cached_attendees : Array(Attendee) | Nil #

def _cached_tenant : Tenant | Nil #

def attendees : Attendee::Collection #

The method attendees is a has_many relation to Attendee


def attributes : Hash(String, Clear::SQL::Any) #

Attributes, used when fetch_columns is true


def cache : Clear::Model::QueryCache | Nil #

def changed? #

Return true if the model is dirty (e.g. one or more fields have been changed.). Return false otherwise.


def clear_change_flags #

Reset the #changed? flag on all columns

The model behave like its not dirty anymore and call to save would apply no changes.

Returns self


def event_end : Int64 #

Returns the value of #event_end column or throw an exception if the column is not defined.


def event_end=(x : Int64) #

Setter for #event_end column.


def event_end_column : Clear::Model::Column(Int64, Clear::Model::Converter::Int64Converter) #

Returns the column object used to manage #event_end field

See Clear::Model::Column


def event_id : String #

Returns the value of #event_id column or throw an exception if the column is not defined.


def event_id=(x : String) #

Setter for #event_id column.


def event_id_column : Clear::Model::Column(String, Clear::Model::Converter::StringConverter) #

Returns the column object used to manage #event_id field

See Clear::Model::Column


def event_start : Int64 #

Returns the value of #event_start column or throw an exception if the column is not defined.


def event_start=(x : Int64) #

Setter for #event_start column.


def event_start_column : Clear::Model::Column(Int64, Clear::Model::Converter::Int64Converter) #

Returns the column object used to manage #event_start field

See Clear::Model::Column


def ext_data : JSON::Any | Nil #

Returns the value of #ext_data column or throw an exception if the column is not defined.


def ext_data=(x : JSON::Any | Nil) #

Setter for #ext_data column.


def ext_data_column : Clear::Model::Column(JSON::Any | Nil, Clear::Model::Converter::JSON::AnyConverter) #

Returns the column object used to manage #ext_data field

See Clear::Model::Column


def host_email : String #

Returns the value of #host_email column or throw an exception if the column is not defined.


def host_email=(x : String) #

Setter for #host_email column.


def host_email_column : Clear::Model::Column(String, Clear::Model::Converter::StringConverter) #

Returns the column object used to manage #host_email field

See Clear::Model::Column


def ical_uid : String #

Returns the value of #ical_uid column or throw an exception if the column is not defined.


def ical_uid=(x : String) #

Setter for #ical_uid column.


def ical_uid_column : Clear::Model::Column(String, Clear::Model::Converter::StringConverter) #

Returns the column object used to manage #ical_uid field

See Clear::Model::Column


def id : Int64 #

Returns the value of #id column or throw an exception if the column is not defined.


def id=(x : Int64) #

Setter for #id column.


def id_column : Clear::Model::Column(Int64, Clear::Model::Converter::Int64Converter) #

Returns the column object used to manage #id field

See Clear::Model::Column


def invalidate_caches #

Invalidate local-to-relation cache and eager-loading cache. Useful to forcefully query again when calling relation defined method


def recurring_master_id : String | Nil #

Returns the value of #recurring_master_id column or throw an exception if the column is not defined.


def recurring_master_id=(x : String | Nil) #

Setter for #recurring_master_id column.


def recurring_master_id_column : Clear::Model::Column(String | Nil, Clear::Model::Converter::StringConverter) #

Returns the column object used to manage #recurring_master_id field

See Clear::Model::Column


def reset(h : Hash(Symbol, _)) #

Set the columns from hash


def reset(h : Hash(String, _)) #

Set the model fields from hash


def reset(t : NamedTuple) #

def reset(from_json : JSON::Any) #

def reset(**t : **T) forall T #

reset flavors


def resource_calendar : String #

Returns the value of #resource_calendar column or throw an exception if the column is not defined.


def resource_calendar=(x : String) #

Setter for #resource_calendar column.


def resource_calendar_column : Clear::Model::Column(String, Clear::Model::Converter::StringConverter) #

Returns the column object used to manage #resource_calendar field

See Clear::Model::Column


def set(h : Hash(Symbol, _)) #

Set the columns from hash


def set(h : Hash(String, _)) #

Set the model fields from hash


def set(t : NamedTuple) #

def set(from_json : JSON::Any) #

def set(**t : **T) forall T #
Description copied from module Clear::Model::HasColumns

Set one or multiple columns to a specific value This two are equivalents:

model.set(a: 1)
model.a = 1

def set_from_json(string_or_io : String | IO, trusted : Bool = false) #

Set the fields from json passed as argument Trusted flag set to true will allow mass assignment without protection, FALSE by default


def system_id : String #

Returns the value of #system_id column or throw an exception if the column is not defined.


def system_id=(x : String) #

Setter for #system_id column.


def system_id_column : Clear::Model::Column(String, Clear::Model::Converter::StringConverter) #

Returns the column object used to manage #system_id field

See Clear::Model::Column


def tenant : Tenant #

The method tenant is a belongs_to relation to Tenant


def tenant=(model : Tenant) #

def tenant_id : Int64 #

Returns the value of #tenant_id column or throw an exception if the column is not defined.


def tenant_id=(x : Int64) #

Setter for #tenant_id column.


def tenant_id_column : Clear::Model::Column(Int64, Clear::Model::Converter::Int64Converter) #

Returns the column object used to manage #tenant_id field

See Clear::Model::Column


def to_h(full = false) : Hash(String, Clear::SQL::Any) #

Return a hash version of the columns of this model.


def to_json(emit_nulls : Bool = false) #

def to_json(json : JSON::Builder, emit_nulls = false) #

def update_from_json(string_or_io : String | IO, trusted : Bool = false) #

Set the fields from json passed as argument and call save on the object Trusted flag set to true will allow mass assignment without protection, FALSE by default


def update_from_json!(string_or_io : String | IO, trusted : Bool = false) #

Set the fields from json passed as argument and call save! on the object Trusted flag set to true will allow mass assignment without protection, FALSE by default


def update_h : Hash(String, Clear::SQL::Any) #

Generate the hash for update request (like during save)


def validate_fields_presence #

For each column, ensure than when needed the column has present information into it.

This method is called on validation.