class Dao::Gateway::ActiveRecord::Base

Public Class Methods

new(source, transformer) click to toggle source
Calls superclass method
# File lib/dao/gateway/active_record/base.rb, line 7
def initialize(source, transformer)
  super
  @black_list_attributes += source_relations
end

Public Instance Methods

add_relations(scope, relations, options) click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 38
def add_relations(scope, relations, options)
  case options[:strategy]
    when :preload
      scope.preload(*relations)
    when :includes
      scope.includes(*relations)
    else
      scope.eager_load(*relations)
  end
end
chain(scope, method_name, args, &block) click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 32
def chain(scope, method_name, args, &block)
  scope.public_send(method_name, *args, &block)
rescue ::ActiveRecord::RecordNotFound => e
  raise Dao::Gateway::RecordNotFound, e.message
end
delete(domain_id) click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 28
def delete(domain_id)
  record(domain_id).destroy if domain_id.present?
end
save!(domain, attributes) click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 12
def save!(domain, attributes)
  record = export(domain, record(domain.id))
  record.assign_attributes(attributes)
  record.save!
  domain.attributes = import(record, domain.initialized_with).attributes
  domain
rescue ::ActiveRecord::RecordInvalid
  raise Dao::Gateway::InvalidRecord.new(record.errors.to_hash)
rescue ::ActiveRecord::RecordNotFound => e
  raise Dao::Gateway::RecordNotFound, e.message
rescue ::ActiveRecord::RecordNotUnique => e
  raise Dao::Gateway::RecordNotUnique, e.message
rescue Exception => e
  rescue_with_handler(e) || raise
end
with_lock(id, *args, &block) click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 53
def with_lock(id, *args, &block)
  source.transaction do
    source.lock(*args).find(id)
    block.call
  end

rescue ::ActiveRecord::StatementInvalid => e
  raise Dao::Gateway::StatementInvalid, e.message
end
with_transaction(&block) click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 49
def with_transaction(&block)
  source.transaction(&block)
end

Protected Instance Methods

collection_scope?(relation) click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 82
def collection_scope?(relation)
  if relation.is_a?(::ActiveRecord::Relation)
    true
  elsif relation.is_a?(Array)
    source_scope?(relation.first)
  else
    false
  end
end
export(base, record = nil) click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 65
def export(base, record = nil)
  return unless base
  record ||= source.new
  attributes = base.attributes.except(*@black_list_attributes)

  record.assign_attributes(attributes)
  record
end
record(domain_id) click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 74
def record(domain_id)
  source.find_by_id(domain_id) if domain_id.present?
end
source_relations() click to toggle source
# File lib/dao/gateway/active_record/base.rb, line 78
def source_relations
  @_relations ||= @source.reflections.keys.map(&:to_sym)
end