Module: Interaptor

Defined in:
lib/interaptor.rb,
lib/interaptor/version.rb,
lib/interaptor/callbacks.rb

Defined Under Namespace

Modules: Callbacks, ClassMethods Classes: Error, Failure, Result

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



9
10
11
12
13
# File 'lib/interaptor.rb', line 9

def self.included(base)
  base.class_eval do
    include Callbacks
  end
end

Instance Method Details

#add_error(message, source: nil) ⇒ Object



40
41
42
43
# File 'lib/interaptor.rb', line 40

def add_error(message, source: nil)
  @result ||= Interaptor::Result.new(success: false)
  @result.add_error(Interaptor::Error.new(message, source))
end

#call(*params) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/interaptor.rb', line 15

def call(*params)
  begin
    value = call!(*params)

    if @result && !@result.success?
      return Interaptor::Result.new(success: false, errors: @result.errors)
    end

    return Interaptor::Result.new.tap do |result|
      result.value = value
    end
  rescue Interaptor::Failure => e
    return Interaptor::Result.new(success: false, errors: e.errors)
  end

end

#call!(*params) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/interaptor.rb', line 32

def call!(*params)
  run_before_callbacks
  value = execute(*params)
  run_after_callbacks

  return value
end

#fail!(message = nil, source: nil) ⇒ Object



45
46
47
48
49
# File 'lib/interaptor.rb', line 45

def fail!(message=nil, source: nil)
  add_error(message, source: source) if message

  raise Interaptor::Failure.new(@result ? @result.errors : [])
end