Class: Gitomator::BaseService

Inherits:
Object
  • Object
show all
Defined in:
lib/gitomator/service.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(provider, opts = {}) ⇒ BaseService

Returns a new instance of BaseService.



9
10
11
12
# File 'lib/gitomator/service.rb', line 9

def initialize(provider, opts = {})
  @provider = provider
  @blocks  = { :before => [], :after => [], :error => [] }
end

Instance Attribute Details

#providerObject (readonly)

Returns the value of attribute provider.



7
8
9
# File 'lib/gitomator/service.rb', line 7

def provider
  @provider
end

Instance Method Details

#after_each_service_call(&block) ⇒ Object

Parameters:

  • block (Proc (String method_name, Array<Object> args, Object result) => nil)


29
30
31
# File 'lib/gitomator/service.rb', line 29

def after_each_service_call(&block)
  @blocks[:after].push block
end

#before_each_service_call(&block) ⇒ Object

Parameters:

  • block (Proc (String method_name, Array<Object> args) => nil)


22
23
24
# File 'lib/gitomator/service.rb', line 22

def before_each_service_call(&block)
  @blocks[:before].push block
end

#on_service_call_error(&block) ⇒ Object

Parameters:

  • block (Proc (String method_name, Array<Object> args, Error error) => nil)


36
37
38
# File 'lib/gitomator/service.rb', line 36

def on_service_call_error(&block)
  @blocks[:error].push block
end

#service_call(method, *args) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/gitomator/service.rb', line 43

def service_call(method, *args)
  result = nil
  @blocks[:before].each {|block| self.instance_exec(method, args, &block) }

  begin
    if provider.respond_to?(method)
      result = @provider.send(method, *args)
    else
      raise Gitomator::Exception::UnsupportedProviderMethod.new(@provider, method)
    end
  rescue Exception => e
    @blocks[:error].each {|block| self.instance_exec(method, args, e, &block) }
    raise e
  end

  @blocks[:after].each {|block| self.instance_exec(method, args, result, &block) }
  return result
end