module Quiver::Adapter::ActiveRecordHelpers
Public Class Methods
included(host)
click to toggle source
Calls superclass method
Quiver::Adapter::HelpersHelpers::included
# File lib/quiver/adapter/active_record_helpers.rb, line 12 def self.included(host) super host.adapter_type(:active_record) host.send(:extend, ClassMethods) end
Public Instance Methods
count()
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 65 def count count = default_record_class.count Quiver::Adapter::AdapterResult.new(count) end
create(attributes, transaction)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 71 def create(attributes, transaction) persister = ARecLowLevelCreator.new(self.class, attributes) if attributes[:__type__] attributes = attributes.merge( attributes[:__type__][:name] => attributes[:__type__][:value] ) attributes.delete(:__type__) end begin create_mappings(attributes, persister) rescue ::ActiveRecord::ActiveRecordError transaction.rollback! persister.failed! end Quiver::Adapter::AdapterResult.new do |errors| if persister.success? persister.result else errors << Quiver::Error.new('record', 'not_persisted') nil end end end
find(primary_key)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 54 def find(primary_key) Quiver::Adapter::AdapterResult.new do |errors| if record = base_query.find_by(primary_key_name => primary_key) load_additional([record.attributes.symbolize_keys]).first else errors << Quiver::Mapper::NotFoundError.new('record', 'not_found') nil end end end
hard_delete(attributes, transaction)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 127 def hard_delete(attributes, transaction) unpersister = ARecLowLevelDeleter.new(self.class, attributes) if attributes[:__type__] attributes = attributes.merge( attributes[:__type__][:name] => attributes[:__type__][:value] ) attributes.delete(:__type__) end begin delete_mappings(attributes, unpersister) rescue ::ActiveRecord::ActiveRecordError transaction.rollback! unpersister.failed! end Quiver::Adapter::AdapterResult.new do |errors| if unpersister.success? {} else errors << Quiver::Error.new('record', 'not_deleted') nil end end end
query(q={})
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 155 def query(q={}) filter_params = q[:filter] || {} sort_params = q[:sort] || {} pagination_params = q[:page] || {} query = filter_klass.new( base_query, filter_params ).filter count_query = filter_klass.new( base_count_query, filter_params ).filter sort_params.each do |attr, asc| order = asc ? 'ASC' : 'DESC' query = query.order("#{attr} #{order}") count_query = count_query.order("#{attr} #{order}") end total_count = count_query.count if pagination_params['limit'] && pagination_params['limit'] != -1 query = query.limit(pagination_params['limit']) end if pagination_params['offset'] query = query.offset(pagination_params['offset']) end objects = load_additional(query.map(&:attributes).map(&:symbolize_keys)) result = Quiver::Adapter::AdapterResult.new(objects) if pagination_params.any? result.data[:pagination_offset] = pagination_params['offset'] || 0 result.data[:pagination_limit] = pagination_params['limit'] || -1 result.data[:total_count] = total_count end result end
update(attributes, transaction)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 99 def update(attributes, transaction) persister = ARecLowLevelUpdater.new(self.class, attributes) if attributes[:__type__] attributes = attributes.merge( attributes[:__type__][:name] => attributes[:__type__][:value] ) attributes.delete(:__type__) end begin update_mappings(attributes, persister) rescue ::ActiveRecord::ActiveRecordError transaction.rollback! persister.failed! end Quiver::Adapter::AdapterResult.new do |errors| if persister.success? persister.result else errors << Quiver::Error.new('record', 'not_updated') nil end end end
Private Instance Methods
base_count_query()
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 223 def base_count_query default_record_class.where({}) end
base_query()
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 219 def base_query default_record_class.where({}) end
create_mappings(attributes, p)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 243 def create_mappings(attributes, p) mappings(attributes, p) end
default_record_class()
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 200 def default_record_class self.class.record_classes[self.class.use_record_class] end
delete_mappings(attributes, p)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 251 def delete_mappings(attributes, p) mappings(attributes, p) end
fetch_and_hydrate(record_klass, primary_key)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 204 def fetch_and_hydrate(record_klass, primary_key) errors = Quiver::ErrorCollection.new if record = record_klass.find_by(primary_key_name => primary_key) attributes = load_additional([record.attributes]).first object = hydrate(attributes) else errors << Quiver::Mapper::NotFoundError.new('record', 'not_found') object = nil end Quiver::Mapper::MapperResult.new(object, errors) end
filter_klass()
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 227 def filter_klass Quiver::Adapter::ActiveRecordAdapterFilter end
load_additional(items)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 231 def load_additional(items) items end
mappings(attributes, p)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 235 def mappings(attributes, p) p.map( attributes, to: self.class.use_record_class, primary: true ) end
update_mappings(attributes, p)
click to toggle source
# File lib/quiver/adapter/active_record_helpers.rb, line 247 def update_mappings(attributes, p) mappings(attributes, p) end