module BraceComb::Model::InstanceMethods

Public Instance Methods

execute_after_callbacks(after_callbacks) click to toggle source
# File lib/brace_comb/dependency_model.rb, line 30
def execute_after_callbacks(after_callbacks)
  return unless after_callbacks
  after_callbacks.map do |after_callback|
    execute_callback(after_callback)
  end
end
execute_before_callbacks(before_callbacks) click to toggle source
# File lib/brace_comb/dependency_model.rb, line 47
def execute_before_callbacks(before_callbacks)
  return unless before_callbacks
  before_callbacks.each do |before_callback|
    result = execute_callback(before_callback)
    raise BraceComb::Exceptions::CallbackFailure.new unless result
  end
end
execute_callback(callback) click to toggle source

Callbacks can be procs or methods

# File lib/brace_comb/dependency_model.rb, line 56
def execute_callback(callback)
  if callback.respond_to?(:call)
    callback.call(self)
  else
    __send__(callback)
  end
end
execute_resolver(resolver, args) click to toggle source

Resolver can be a proc or method

# File lib/brace_comb/dependency_model.rb, line 38
def execute_resolver(resolver, args)
  return resolver.call(self) if resolver.respond_to?(:call)
  if method(resolver).arity.zero?
    __send__(resolver)
  else
    __send__(resolver, args)
  end
end
resolve(args = nil) click to toggle source

returns false if before callbacks return false throws an exception if before, after callbacks or resolver raises an exception rolls back the transaction if before callbacks return false or if any exception is raised

# File lib/brace_comb/dependency_model.rb, line 23
def resolve(args = nil)
  resolve!(args)
  true
rescue BraceComb::Exceptions::CallbackFailure
  false
end
resolve!(args = nil) click to toggle source

throws an exception if before callbacks return false throws an exception if before, after callbacks or resolver raises an exception rolls back the transaction if before callbacks return false or if any exception is raised

# File lib/brace_comb/dependency_model.rb, line 10
def resolve!(args = nil)
  dependency_mapping = self.class.
    instance_variable_get(:@dependency_mapping)[self.dependency_type.to_sym]
  ActiveRecord::Base.transaction do
    execute_before_callbacks(dependency_mapping[:before_resolution])
    execute_resolver(dependency_mapping[:resolver], args)
    execute_after_callbacks(dependency_mapping[:after_resolution])
  end
end