Module: DoBlocks

Defined in:
lib/do_blocks.rb

Instance Method Summary collapse

Instance Method Details

#do_after(method_name, &block) ⇒ Object



11
12
13
14
15
16
17
18
19
# File 'lib/do_blocks.rb', line 11

def do_after(method_name, &block)
  original_method = instance_method(method_name)

  define_method(method_name) do |*args, **kwargs|
    result = original_method.bind(self).call(*args, **kwargs)
    block.call(args, kwargs, result)
    result
  end
end

#do_before(method_name, &block) ⇒ Object



2
3
4
5
6
7
8
9
# File 'lib/do_blocks.rb', line 2

def do_before(method_name, &block)
  original_method = instance_method(method_name)

  define_method(method_name) do |*args, **kwargs|
    block.call(args, kwargs)
    original_method.bind(self).call(*args, **kwargs)
  end
end

#do_on_error(method_name, reraise: true, &block) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/do_blocks.rb', line 21

def do_on_error(method_name, reraise: true, &block)
  original_method = instance_method(method_name)

  define_method(method_name) do |*args, **kwargs|
    begin
      original_method.bind(self).call(*args, **kwargs)
    rescue => error
      block.call(args, kwargs, error)
      raise error if reraise
    end
  end
end