class Relationship
- Relationship
- Reference
- Object
Included Modules
- Clear::Model
Extended Modules
- Clear::Model::HasHooks::ClassMethods
Defined in:
models/relationships.crConstant Summary
-
COLUMNS =
{"id" => {type: Int64, primary: true, converter: "Int64", db_column_name: "id", crystal_variable_name: id, presence: false}, "development" => {type: Bool | ::Nil, primary: false, converter: "Bool", db_column_name: "development", crystal_variable_name: development, presence: true}, "branch" => {type: String | ::Nil, primary: false, converter: "String", db_column_name: "branch", crystal_variable_name: branch, presence: true}, "version" => {type: String | ::Nil, primary: false, converter: "String", db_column_name: "version", crystal_variable_name: version, presence: true}, "master_id" => {type: Int64, primary: false, converter: "Int64", db_column_name: "master_id", crystal_variable_name: master_id, presence: false}, "dependency_id" => {type: Int64, primary: false, converter: "Int64", db_column_name: "dependency_id", crystal_variable_name: dependency_id, presence: false}} of Nil => Nil
-
POLYMORPHISM_SETTINGS =
{} of Nil => Nil
Constructors
- .create(x : Hash) : self
- .create(x : NamedTuple) : self
-
.create(**args) : self
Build and new model and save it.
- .create!(a : Hash) : self
- .create!(x : NamedTuple) : self
-
.create!(**args) : self
Build and new model and save it.
- .new(h : Hash(String, _), cache : Clear::Model::QueryCache | Nil = nil, persisted = false, fetch_columns = false)
- .new(json : JSON::Any, cache : Clear::Model::QueryCache | Nil = nil, persisted = false)
- .new(t : NamedTuple, persisted = false)
- .new
Class Method Summary
-
.build(**x : **T) forall T
Build a new empty model and fill the columns using the NamedTuple in argument.
- .columns
-
.connection : String
Define on which connection the model is living.
-
.connection=(connection : String)
Define on which connection the model is living.
-
.create(x : Array(NamedTuple)) : Array(self)
Multi-models creation.
-
.create!(x : Array(NamedTuple)) : Array(self)
Multi-models creation.
-
.find(x)
Returns a model using primary key equality Returns
nil
if not found. -
.find!(x)
Returns a model using primary key equality.
-
.import(array : Enumerable(self), on_conflict : Clear::SQL::InsertQuery -> | Nil = nil)
Import a bulk of models in one SQL insert query.
- .polymorphic? : Bool
-
.query
Return a new empty query
SELECT * FROM [my_model_table]
. - .read_only=(read_only : Bool)
- .read_only? : Bool
-
.schema : Clear::SQL::Symbolic | Nil
Define the current schema used in PostgreSQL.
-
.schema=(schema : Clear::SQL::Symbolic | Nil)
Define the current schema used in PostgreSQL.
-
.table : Clear::SQL::Symbolic
Return the table name setup for this model.
-
.table=(table : Clear::SQL::Symbolic)
Return the table name setup for this model.
Instance Method Summary
- #_cached_dependency : Repository | Nil
- #_cached_master : Repository | Nil
-
#attributes : Hash(String, Clear::SQL::Any)
Attributes, used when fetch_columns is true
-
#branch : String | Nil
Returns the value of
#branch
column or throw an exception if the column is not defined. -
#branch=(x : String | Nil)
Setter for
#branch
column. -
#branch_column : Clear::Model::Column(String | Nil, Clear::Model::Converter::StringConverter)
Returns the column object used to manage
#branch
field - #cache : Clear::Model::QueryCache | Nil
-
#changed?
Return
true
if the model is dirty (e.g. -
#clear_change_flags
Reset the
#changed?
flag on all columns -
#dependency : Repository
The method dependency is a
belongs_to
relation to Repository - #dependency=(model : Repository)
-
#dependency_id : Int64
Returns the value of
#dependency_id
column or throw an exception if the column is not defined. -
#dependency_id=(x : Int64)
Setter for
#dependency_id
column. -
#dependency_id_column : Clear::Model::Column(Int64, Clear::Model::Converter::Int64Converter)
Returns the column object used to manage
#dependency_id
field -
#development : Bool | Nil
Returns the value of
#development
column or throw an exception if the column is not defined. -
#development=(x : Bool | Nil)
Setter for
#development
column. -
#development_column : Clear::Model::Column(Bool | Nil, Clear::Model::Converter::BoolConverter)
Returns the column object used to manage
#development
field -
#id : Int64
Returns the value of
#id
column or throw an exception if the column is not defined. -
#id=(x : Int64)
Setter for
#id
column. -
#id_column : Clear::Model::Column(Int64, Clear::Model::Converter::Int64Converter)
Returns the column object used to manage
#id
field -
#master : Repository
The method master is a
belongs_to
relation to Repository - #master=(model : Repository)
-
#master_id : Int64
Returns the value of
#master_id
column or throw an exception if the column is not defined. -
#master_id=(x : Int64)
Setter for
#master_id
column. -
#master_id_column : Clear::Model::Column(Int64, Clear::Model::Converter::Int64Converter)
Returns the column object used to manage
#master_id
field -
#reset(h : Hash(Symbol, _))
Set the columns from hash
-
#reset(h : Hash(String, _))
Set the model fields from hash
- #reset(t : NamedTuple)
- #reset(from_json : JSON::Any)
-
#reset(**t : **T) forall T
reset flavors
-
#set(h : Hash(Symbol, _))
Set the columns from hash
-
#set(h : Hash(String, _))
Set the model fields from hash
- #set(t : NamedTuple)
- #set(from_json : JSON::Any)
-
#set(**t : **T) forall T
Set one or multiple columns to a specific value This two are equivalents:
-
#to_h(full = false) : Hash(String, Clear::SQL::Any)
Return a hash version of the columns of this model.
- #to_json(emit_nulls : Bool = false)
- #to_json(json, emit_nulls = false)
-
#update_h : Hash(String, Clear::SQL::Any)
Generate the hash for update request (like during save)
-
#validate_fields_presence
For each column, ensure than when needed the column has present information into it.
-
#version : String | Nil
Returns the value of
#version
column or throw an exception if the column is not defined. -
#version=(x : String | Nil)
Setter for
#version
column. -
#version_column : Clear::Model::Column(String | Nil, Clear::Model::Converter::StringConverter)
Returns the column object used to manage
#version
field
Constructor Detail
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.
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.
Class Method Detail
Build a new empty model and fill the columns using the NamedTuple in argument.
Returns the new model
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")
Clear::SQL.init("secondary", "postgres://postgres@localhost/database_2")
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
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")
Clear::SQL.init("secondary", "postgres://postgres@localhost/database_2")
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
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.
Multi-models creation. See Collection#create!(**args)
Returns the list of newly created model. Raises exception if any of the model has validation error.
Returns a model using primary key equality. Raises error if the model is not found.
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)
Return a new empty query SELECT * FROM [my_model_table]
. Can be refined after that.
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"
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"
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"
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
Returns the value of #branch
column or throw an exception if the column is not defined.
Returns the column object used to manage #branch
field
See Clear::Model::Column
Return true
if the model is dirty (e.g. one or more fields
have been changed.). Return false
otherwise.
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
Returns the value of #dependency_id
column or throw an exception if the column is not defined.
Returns the column object used to manage #dependency_id
field
See Clear::Model::Column
Returns the value of #development
column or throw an exception if the column is not defined.
Returns the column object used to manage #development
field
See Clear::Model::Column
Returns the value of #id
column or throw an exception if the column is not defined.
Returns the column object used to manage #id
field
See Clear::Model::Column
Returns the value of #master_id
column or throw an exception if the column is not defined.
Returns the column object used to manage #master_id
field
See Clear::Model::Column
Set one or multiple columns to a specific value This two are equivalents:
model.set(a: 1)
model.a = 1
Return a hash version of the columns of this model.
Generate the hash for update request (like during save)
For each column, ensure than when needed the column has present information into it.
This method is called on validation.