module Flow::Operation::Failures

Public Instance Methods

define_fail_method_for_problem(problem) click to toggle source
# File lib/flow/operation/failures.rb, line 39
def define_fail_method_for_problem(problem)
  problem_failure_name = "#{problem}_failure!".to_sym
  return if method_defined?(problem_failure_name)

  define_method(problem_failure_name) { |**details| fail!(problem, **details) }
end
define_on_failure_for_problem(problem) click to toggle source
# File lib/flow/operation/failures.rb, line 32
def define_on_failure_for_problem(problem)
  on_failure_name = "on_#{problem}_failure".to_sym
  return if respond_to?(on_failure_name)

  define_singleton_method(on_failure_name) { |*filters, &block| set_callback(problem, :before, *filters, &block) }
end
define_proactive_failure_for_problem(problem, **options) click to toggle source
# File lib/flow/operation/failures.rb, line 46
def define_proactive_failure_for_problem(problem, **options)
  conditional_options = options.slice(:if, :unless)
  set_callback(:execute, :before, -> { fail!(problem) }, **conditional_options) if conditional_options.present?
end
fail!(problem, **details) click to toggle source
# File lib/flow/operation/failures.rb, line 52
def fail!(problem, **details)
  run_callbacks(problem) do
    run_callbacks(:failure) do
      error! OperationFailure.new(problem, **details), **details
    end
  end
end
failure(problem, **options) click to toggle source
# File lib/flow/operation/failures.rb, line 23
def failure(problem, **options)
  problem = problem.to_s.to_sym
  _failures << problem
  define_callbacks problem
  define_on_failure_for_problem(problem)
  define_fail_method_for_problem(problem)
  define_proactive_failure_for_problem(problem, **options)
end
inherited(base) click to toggle source
Calls superclass method
# File lib/flow/operation/failures.rb, line 16
def inherited(base)
  base._failures = _failures.dup
  super
end