Class: JsonapiCompliable::Adapters::ActiveRecord
- Defined in:
- lib/jsonapi_compliable/adapters/active_record.rb
Overview
Instance Method Summary collapse
-
#associate(parent, child, association_name, association_type) ⇒ Object
When a has_many relationship, we need to avoid Activerecord implicitly firing a query.
-
#average(scope, attr) ⇒ Float
The average of the scope.
-
#count(scope, attr) ⇒ Numeric
The count of the scope.
-
#create(model_class, create_params) ⇒ Object
The model instance just created.
-
#destroy(model_class, id) ⇒ Object
The model instance just destroyed.
-
#filter(scope, attribute, value) ⇒ Object
The scope.
-
#maximum(scope, attr) ⇒ Numeric
The maximum value of the scope.
-
#minimum(scope, attr) ⇒ Numeric
The maximum value of the scope.
-
#order(scope, attribute, direction) ⇒ Object
The scope.
-
#paginate(scope, current_page, per_page) ⇒ Object
The scope.
-
#resolve(scope) ⇒ Object
Resolve the scope.
-
#sideloading_module ⇒ Object
This module gets mixed in to Sideload classes This is where you define methods like has_many, belongs_to etc that wrap the lower-level Sideload#allow_sideload.
-
#sum(scope, attr) ⇒ Numeric
The sum of the scope.
-
#transaction(model_class) ⇒ Object
Run this write request within an ActiveRecord transaction.
-
#update(model_class, update_params) ⇒ Object
The model instance just created.
Instance Method Details
#associate(parent, child, association_name, association_type) ⇒ Object
When a has_many relationship, we need to avoid Activerecord implicitly firing a query. Otherwise, simple assignment will do
71 72 73 74 75 76 77 78 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 71 def associate(parent, child, association_name, association_type) if association_type == :has_many parent.association(association_name).loaded! parent.association(association_name).add_to_target(child, :skip_callbacks) else child.send("#{association_name}=", parent) end end |
#average(scope, attr) ⇒ Float
Returns the average of the scope
29 30 31 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 29 def average(scope, attr) scope.average(attr).to_f end |
#count(scope, attr) ⇒ Numeric
Returns the count of the scope
23 24 25 26 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 23 def count(scope, attr) column = attr == :total ? :all : attr scope.uniq.count(column) end |
#create(model_class, create_params) ⇒ Object
Returns the model instance just created
81 82 83 84 85 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 81 def create(model_class, create_params) instance = model_class.new(create_params) instance.save instance end |
#destroy(model_class, id) ⇒ Object
Returns the model instance just destroyed
95 96 97 98 99 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 95 def destroy(model_class, id) instance = model_class.find(id) instance.destroy instance end |
#filter(scope, attribute, value) ⇒ Object
Returns the scope
8 9 10 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 8 def filter(scope, attribute, value) scope.where(attribute => value) end |
#maximum(scope, attr) ⇒ Numeric
Returns the maximum value of the scope
39 40 41 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 39 def maximum(scope, attr) scope.maximum(attr) end |
#minimum(scope, attr) ⇒ Numeric
Returns the maximum value of the scope
44 45 46 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 44 def minimum(scope, attr) scope.minimum(attr) end |
#order(scope, attribute, direction) ⇒ Object
Returns the scope
13 14 15 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 13 def order(scope, attribute, direction) scope.order(attribute => direction) end |
#paginate(scope, current_page, per_page) ⇒ Object
Returns the scope
18 19 20 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 18 def paginate(scope, current_page, per_page) scope.page(current_page).per(per_page) end |
#resolve(scope) ⇒ Object
Resolve the scope. This is where you'd actually fire SQL, actually make an HTTP call, etc.
49 50 51 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 49 def resolve(scope) scope.to_a end |
#sideloading_module ⇒ Object
This module gets mixed in to Sideload classes This is where you define methods like has_many, belongs_to etc that wrap the lower-level Sideload#allow_sideload
64 65 66 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 64 def sideloading_module JsonapiCompliable::Adapters::ActiveRecordSideloading end |
#sum(scope, attr) ⇒ Numeric
Returns the sum of the scope
34 35 36 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 34 def sum(scope, attr) scope.sum(attr) end |
#transaction(model_class) ⇒ Object
Run this write request within an ActiveRecord transaction
57 58 59 60 61 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 57 def transaction(model_class) model_class.transaction do yield end end |
#update(model_class, update_params) ⇒ Object
Returns the model instance just created
88 89 90 91 92 |
# File 'lib/jsonapi_compliable/adapters/active_record.rb', line 88 def update(model_class, update_params) instance = model_class.find(update_params.delete(:id)) instance.update_attributes(update_params) instance end |