Module: BraceComb::Model::InstanceMethods

Defined in:
lib/brace_comb/dependency_model.rb

Instance Method Summary collapse

Instance Method Details

#execute_after_callbacks(after_callbacks) ⇒ Object



29
30
31
32
33
34
# File 'lib/brace_comb/dependency_model.rb', line 29

def execute_after_callbacks(after_callbacks)
  return unless after_callbacks
  after_callbacks.each do |after_callback|
    execute_callback(after_callback)
  end
end

#execute_before_callbacks(before_callbacks) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/brace_comb/dependency_model.rb', line 46

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) ⇒ Object

Callbacks can be procs or methods



55
56
57
58
59
60
61
# File 'lib/brace_comb/dependency_model.rb', line 55

def execute_callback(callback)
  if callback.respond_to?(:call)
    callback.call(self)
  else
    __send__(callback)
  end
end

#execute_resolver(resolver, args) ⇒ Object

Resolver can be a proc or method



37
38
39
40
41
42
43
44
# File 'lib/brace_comb/dependency_model.rb', line 37

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) ⇒ Object

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



22
23
24
25
26
27
# File 'lib/brace_comb/dependency_model.rb', line 22

def resolve(args = nil)
  resolve!(args)
  true
rescue BraceComb::Exceptions::CallbackFailure
  false
end

#resolve!(args = nil) ⇒ Object

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



9
10
11
12
13
14
15
16
17
# File 'lib/brace_comb/dependency_model.rb', line 9

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