Class: BetterService::Repository::BaseRepository
- Inherits:
-
Object
- Object
- BetterService::Repository::BaseRepository
- Defined in:
- lib/better_service/repository/base_repository.rb
Overview
BaseRepository - Generic repository pattern for data access
Provides a clean abstraction layer between services and ActiveRecord models. Repositories handle all database queries using predicates-based search, enforcing separation of concerns and enabling easier testing.
Instance Attribute Summary collapse
-
#model ⇒ Object
readonly
Returns the value of attribute model.
Instance Method Summary collapse
-
#build(attributes = {}) ⇒ ActiveRecord::Base
(also: #new)
Build a new unsaved record.
-
#create(attributes = {}) ⇒ ActiveRecord::Base
Create a new record (may return invalid record).
-
#create!(attributes = {}) ⇒ ActiveRecord::Base
Create a new record (raises on validation failure).
-
#delete(record_or_id) ⇒ Integer
Delete a record without callbacks.
-
#destroy(record_or_id) ⇒ ActiveRecord::Base
(also: #destroy!)
Destroy a record.
-
#initialize(model_class = nil) ⇒ BaseRepository
constructor
Initialize repository with a model class.
-
#search(predicates = {}, page: 1, per_page: 20, includes: [], joins: [], order: nil, order_scope: nil, limit: :default) ⇒ ActiveRecord::Relation, ...
Search records using predicates.
-
#update(record_or_id, attributes) ⇒ ActiveRecord::Base
(also: #update!)
Update an existing record.
Constructor Details
#initialize(model_class = nil) ⇒ BaseRepository
Initialize repository with a model class
35 36 37 |
# File 'lib/better_service/repository/base_repository.rb', line 35 def initialize(model_class = nil) @model = model_class || derive_model_class end |
Instance Attribute Details
#model ⇒ Object (readonly)
Returns the value of attribute model.
29 30 31 |
# File 'lib/better_service/repository/base_repository.rb', line 29 def model @model end |
Instance Method Details
#build(attributes = {}) ⇒ ActiveRecord::Base Also known as: new
Build a new unsaved record
87 88 89 |
# File 'lib/better_service/repository/base_repository.rb', line 87 def build(attributes = {}) model.new(attributes) end |
#create(attributes = {}) ⇒ ActiveRecord::Base
Create a new record (may return invalid record)
96 97 98 |
# File 'lib/better_service/repository/base_repository.rb', line 96 def create(attributes = {}) model.create(attributes) end |
#create!(attributes = {}) ⇒ ActiveRecord::Base
Create a new record (raises on validation failure)
105 106 107 |
# File 'lib/better_service/repository/base_repository.rb', line 105 def create!(attributes = {}) model.create!(attributes) end |
#delete(record_or_id) ⇒ Integer
Delete a record without callbacks
137 138 139 140 |
# File 'lib/better_service/repository/base_repository.rb', line 137 def delete(record_or_id) id = record_or_id.respond_to?(:id) ? record_or_id.id : record_or_id model.where(id: id).delete_all end |
#destroy(record_or_id) ⇒ ActiveRecord::Base Also known as: destroy!
Destroy a record
126 127 128 129 130 |
# File 'lib/better_service/repository/base_repository.rb', line 126 def destroy(record_or_id) record = resolve_record(record_or_id) record.destroy! record end |
#search(predicates = {}, page: 1, per_page: 20, includes: [], joins: [], order: nil, order_scope: nil, limit: :default) ⇒ ActiveRecord::Relation, ...
Search records using predicates
Supports flexible querying through predicates hash that gets translated to ActiveRecord scopes via model’s Searchable concern.
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/better_service/repository/base_repository.rb', line 69 def search(predicates = {}, page: 1, per_page: 20, includes: [], joins: [], order: nil, order_scope: nil, limit: :default) cleaned_predicates = (predicates || {}).compact scope = build_base_scope(cleaned_predicates) scope = apply_joins(scope, joins) scope = apply_includes(scope, includes) scope = apply_ordering(scope, order, order_scope) apply_limit_or_pagination(scope, limit, page, per_page) end |
#update(record_or_id, attributes) ⇒ ActiveRecord::Base Also known as: update!
Update an existing record
115 116 117 118 119 |
# File 'lib/better_service/repository/base_repository.rb', line 115 def update(record_or_id, attributes) record = resolve_record(record_or_id) record.update!(attributes) record end |