class
CQL::Repository(T, Pk)
- CQL::Repository(T, Pk)
- Reference
- Object
Overview
A repository for a specific table This class provides a high-level interface for interacting with a table It provides methods for querying, creating, updating, and deleting records It also provides methods for pagination and counting records
Example Creating a new repository
user_repo = CQL::Repository(User, Int64).new(AcmeDB, :users)
user_repo.all
user_repo.find(1)
Defined in:
repository.crConstructors
-
.new(schema : CQL::Schema, table : Symbol)
Initialize the repository with a schema and table name
Instance Method Summary
-
#all
Fetch all records of type T - @return [Array(T)] The records
-
#build(attrs : Hash(Symbol, DB::Any))
Build a new object of type T with the given attributes.
-
#count : Int64
Count all records in the table - @return [Int64] The number of records
-
#create(attrs : Hash(Symbol, DB::Any))
Create a new record with given attributes - @param attrs [Hash(Symbol, DB::Any)] The attributes to use - @return [Pk] The ID of the new record Example Creating a new record
user_repo = CQL::Repository(User, Int64).new(AcmeDB, :users) user_repo.create({:name => "Alice", :email => "alice@example.com"} of Symbol => DB::Any) user_repo.create(name: "Alice", email: "alice@example.com") - #create(**fields)
-
#delete(id : Pk)
Delete a record by ID - @param id [PrimaryKey] The ID of the record
- #delete
-
#delete_all
Delete all records in the table
-
#delete_by(**fields)
Delete records matching specific fields - @param fields [Hash(Symbol, DB::Any)] The fields to match
-
#exists?(**fields)
Check if records exist matching specific fields - @param fields [Hash(Symbol, DB::Any)] The fields to match - @return [Bool] True if records exist, false otherwise
-
#find(id : Pk)
Find a record by ID, return nil if not found - @param id [PrimaryKey] The ID of the record - @return [T?] The record, or nil if not found
-
#find!(id : Pk)
Find a record by ID, raise an error if not found - @param id [PrimaryKey] The ID of the record - @return [T] The record
-
#find_all_by(**fields)
Find all records matching specific fields - @param fields [Hash(Symbol, DB::Any)] The fields to match - @return [Array(T)] The records
-
#find_by(**fields)
Find a record by specific fields - @param fields [Hash(Symbol, DB::Any)] The fields to match - @return [T?] The record, or nil if not found
-
#first
Fetch the first record in the table - @return [T?] The first record, or nil if the table is empty
- #insert
-
#last
Fetch the last record in the table - @return [T?] The last record, or nil if the table is empty
-
#page(page_number, per_page = 10)
Paginate results based on page number and items per page - @param page_number [Int32] The page number to fetch - @param per_page [Int32] The number of items per page - @return [Array(T)] The records for the page
-
#per_page(per_page)
Limit the number of results per page - @param per_page [Int32] The number of items per page - @return [Array(T)] The records for the page
- #query
-
#update(id : Pk, attrs : Hash(Symbol, DB::Any))
Update a record by ID with given attributes - @param id [PrimaryKey] The ID of the record - @param attrs [Hash(Symbol, DB::Any)] The attributes to update
-
#update(id : Pk, **fields)
Update a record by ID with given fields - @param id [PrimaryKey] The ID of the record - @param fields [Hash(Symbol, DB::Any)] The fields to update
- #update
-
#update_all(attrs : Hash(Symbol, DB::Any))
Update all records with given attributes - @param attrs [Hash(Symbol, DB::Any)] The attributes to update
-
#update_by(where_attrs : Hash(Symbol, DB::Any), update_attrs : Hash(Symbol, DB::Any))
Update records matching where attributes with update attributes - @param where_attrs [Hash(Symbol, DB::Any)] The attributes to match - @param update_attrs [Hash(Symbol, DB::Any)] The attributes to update
Constructor Detail
Initialize the repository with a schema and table name
- @param schema [Schema] The schema to use
- @param table [Symbol] The name of the table
- @return [Repository] The repository object
Example Creating a new repository
user_repo = CQL::Repository(User, Int64).new(AcmeDB, :users)
Instance Method Detail
Fetch all records of type T
- @return [Array(T)] The records
Example Fetching all records
user_repo.all
Build a new object of type T with the given attributes. It calls T.new(attrs), so it
compiles only when T has an initializer that takes a Hash(Symbol, DB::Any); an
ActiveRecord model has none, so use #create for one.
- @param attrs [Hash(Symbol, DB::Any)] The attributes to use
- @return [T] The new object
Count all records in the table
- @return [Int64] The number of records
Example Counting all records
user_repo.count
Create a new record with given attributes
- @param attrs [Hash(Symbol, DB::Any)] The attributes to use
- @return [Pk] The ID of the new record Example Creating a new record
user_repo = CQL::Repository(User, Int64).new(AcmeDB, :users)
user_repo.create({:name => "Alice", :email => "alice@example.com"} of Symbol => DB::Any)
user_repo.create(name: "Alice", email: "alice@example.com")
Delete a record by ID
- @param id [PrimaryKey] The ID of the record
Example Deleting a record by ID
user_repo.delete(1)
Delete records matching specific fields
- @param fields [Hash(Symbol, DB::Any)] The fields to match
Example Deleting records by email
user_repo.delete_by(email: "alice@example.com")
Check if records exist matching specific fields
- @param fields [Hash(Symbol, DB::Any)] The fields to match
- @return [Bool] True if records exist, false otherwise
Example Checking if a record exists by email
user_repo.exists?(email: "alice@example.com")
Find a record by ID, return nil if not found
- @param id [PrimaryKey] The ID of the record
- @return [T?] The record, or nil if not found
Example Fetching a record by ID
user_repo.find(1)
Find a record by ID, raise an error if not found
- @param id [PrimaryKey] The ID of the record
- @return [T] The record
Example Fetching a record by ID
user_repo.find!(1)
Find all records matching specific fields
- @param fields [Hash(Symbol, DB::Any)] The fields to match
- @return [Array(T)] The records
Example Fetching all active users
user_repo.find_all_by(active: true)
Find a record by specific fields
- @param fields [Hash(Symbol, DB::Any)] The fields to match
- @return [T?] The record, or nil if not found
Example Fetching a record by email
user_repo.find_by(email: "alice@example.com")
Fetch the first record in the table
- @return [T?] The first record, or nil if the table is empty
Example Fetching the first record
user_repo.first
Fetch the last record in the table
- @return [T?] The last record, or nil if the table is empty
Example Fetching the last record
user_repo.last
Paginate results based on page number and items per page
- @param page_number [Int32] The page number to fetch
- @param per_page [Int32] The number of items per page
- @return [Array(T)] The records for the page
Example Paginating results
user_repo.page(1, 10)
Limit the number of results per page
- @param per_page [Int32] The number of items per page
- @return [Array(T)] The records for the page
Example Limiting results per page
user_repo.per_page(10)
Update a record by ID with given attributes
- @param id [PrimaryKey] The ID of the record
- @param attrs [Hash(Symbol, DB::Any)] The attributes to update
Example Updating a record by ID
user_repo.update(1, {:active => true} of Symbol => DB::Any)
Update a record by ID with given fields
- @param id [PrimaryKey] The ID of the record
- @param fields [Hash(Symbol, DB::Any)] The fields to update
Example Updating a record by ID
user_repo.update(1, active: true)
Update all records with given attributes
- @param attrs [Hash(Symbol, DB::Any)] The attributes to update
Example Updating all records
user_repo.update_all({:active => true} of Symbol => DB::Any)
Update records matching where attributes with update attributes
- @param where_attrs [Hash(Symbol, DB::Any)] The attributes to match
- @param update_attrs [Hash(Symbol, DB::Any)] The attributes to update
Example Updating records by email
user_repo.update_by({:email => "alice@example.com"} of Symbol => DB::Any, {:active => true} of Symbol => DB::Any)