class CQL::Repository(T, Pk)

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.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new(schema : CQL::Schema, table : Symbol) #

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)

[View source]

Instance Method Detail

def all #

Fetch all records of type T

  • @return [Array(T)] The records

Example Fetching all records

user_repo.all

[View source]
def build(attrs : Hash(Symbol, DB::Any)) #

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

[View source]
def count : Int64 #

Count all records in the table

  • @return [Int64] The number of records

Example Counting all records

user_repo.count

[View source]
def 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")

[View source]
def create(**fields) #

[View source]
def delete(id : Pk) #

Delete a record by ID

  • @param id [PrimaryKey] The ID of the record

Example Deleting a record by ID

user_repo.delete(1)

[View source]
def delete #

[View source]
def delete_all #

Delete all records in the table

Example Deleting all records

user_repo.delete_all

[View source]
def delete_by(**fields) #

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

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

Example Checking if a record exists by email

user_repo.exists?(email: "alice@example.com")

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

Example Fetching a record by ID

user_repo.find(1)

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

Example Fetching a record by ID

user_repo.find!(1)

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

Example Fetching all active users

user_repo.find_all_by(active: true)

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

Example Fetching a record by email

user_repo.find_by(email: "alice@example.com")

[View source]
def first #

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

[View source]
def insert #

[View source]
def last #

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

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

Example Paginating results

user_repo.page(1, 10)

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

Example Limiting results per page

user_repo.per_page(10)

[View source]
def query #

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

Example Updating a record by ID

user_repo.update(1, {:active => true} of Symbol => DB::Any)

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

Example Updating a record by ID

user_repo.update(1, active: true)

[View source]
def update #

[View source]
def update_all(attrs : Hash(Symbol, DB::Any)) #

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)

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

Example Updating records by email

user_repo.update_by({:email => "alice@example.com"} of Symbol => DB::Any, {:active => true} of Symbol => DB::Any)

[View source]