Class: AWS::Core::Http::Handler

Inherits:
Object
  • Object
show all
Defined in:
lib/aws/core/http/handler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base, &block) ⇒ Handler

Returns a new instance of Handler.


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/aws/core/http/handler.rb', line 23

def initialize(base, &block)
  @base = base
  if base.respond_to?(:handle)
  
    unless block.arity == 2
      raise ArgumentError, 'passed block must accept 2 arguments'
    end
    MetaUtils.extend_method(self, :handle, &block)
  
  elsif base.respond_to?(:handle_async)
  
    unless block.arity == 3
      raise ArgumentError, 'passed block must accept 3 arguments'
    end
  
    MetaUtils.extend_method(self, :handle_async) do |req, resp, handle|
      @base.handle_async(req, resp, handle)
    end
    MetaUtils.extend(self) do
      define_method(:handle) do |req, resp|
        raise "attempted to call #handle on an async handler"
      end
      define_method(:handle_async, &block)
    end
  
  else
    raise ArgumentError, 'base must respond to #handle or #handle_async'
  end
end

Instance Attribute Details

#baseObject (readonly)

Returns the value of attribute base


21
22
23
# File 'lib/aws/core/http/handler.rb', line 21

def base
  @base
end

Instance Method Details

#handle(request, http_response) ⇒ Object


53
54
55
# File 'lib/aws/core/http/handler.rb', line 53

def handle(request, http_response)
  @base.handle(request, http_response)
end

#handle_async(request, http_response, handle) ⇒ Object


57
58
59
60
61
62
63
64
65
66
67
# File 'lib/aws/core/http/handler.rb', line 57

def handle_async(request, http_response, handle)
  Thread.new do
    begin
      self.handle(request, http_response)
    rescue => e
      handle.signal_failure
    else
      handle.signal_success
    end
  end
end

#sleep_with_callback(seconds, &block) ⇒ Object


69
70
71
72
# File 'lib/aws/core/http/handler.rb', line 69

def sleep_with_callback seconds, &block
  Kernel.sleep(seconds)
  yield
end