Class: Foobara::Callback::Runner

Inherits:
Object
  • Object
show all
Defined in:
foobara-0.0.110/projects/callback/src/runner.rb

Defined Under Namespace

Classes: UnexpectedErrorWhileRunningCallback

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(callback_set) ⇒ Runner

Returns a new instance of Runner.



17
18
19
# File 'foobara-0.0.110/projects/callback/src/runner.rb', line 17

def initialize(callback_set)
  self.callback_set = callback_set
end

Instance Attribute Details

#callback_data(*args, **opts) ⇒ Object



25
26
27
28
29
30
31
# File 'foobara-0.0.110/projects/callback/src/runner.rb', line 25

def callback_data(*args, **opts)
  return @callback_data if args.empty? && opts.empty?

  self.callback_data = Util.args_and_opts_to_opts(args, opts)

  self
end

#callback_setObject

Returns the value of attribute callback_set.



14
15
16
# File 'foobara-0.0.110/projects/callback/src/runner.rb', line 14

def callback_set
  @callback_set
end

#errorObject

Returns the value of attribute error.



14
15
16
# File 'foobara-0.0.110/projects/callback/src/runner.rb', line 14

def error
  @error
end

Instance Method Details

#has_callback_data?Boolean

Returns:

  • (Boolean)


21
22
23
# File 'foobara-0.0.110/projects/callback/src/runner.rb', line 21

def has_callback_data?
  defined?(@callback_data)
end

#run(&do_it) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'foobara-0.0.110/projects/callback/src/runner.rb', line 33

def run(&do_it)
  if block_given?
    callback_set.each_before do |callback|
      run_callback(callback)
    end

    around_callback = callback_set.around.inject(do_it) do |nested_proc, callback|
      proc do
        run_callback(callback, &nested_proc)
      end
    end

    run_callback(around_callback)
  else
    # TODO: raise better errors
    if callback_set.has_before_callbacks?
      # :nocov:
      raise
      # :nocov:
    end
    if callback_set.has_around_callbacks?
      # :nocov:
      raise
      # :nocov:
    end
  end

  callback_set.each_after do |callback|
    run_callback(callback)
  end
rescue => real_error
  begin
    raise UnexpectedErrorWhileRunningCallback.new(callback_data, real_error)
    # this non-sense is just to set the Error#cause properly
  rescue UnexpectedErrorWhileRunningCallback => e
    self.error = e

    callback_set.each_error do |callback|
      run_callback(callback)
    end
  end

  raise
end

#run_callback(callback) ⇒ Object



78
79
80
81
82
83
84
85
86
# File 'foobara-0.0.110/projects/callback/src/runner.rb', line 78

def run_callback(callback, &)
  if error
    callback.call(error)
  elsif has_callback_data?
    callback.call(callback_data, &)
  else
    callback.call(&)
  end
end