Class: Huck::Receiver

Inherits:
Object
  • Object
show all
Defined in:
lib/huck/receiver.rb

Overview

Base receiver class

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#configObject

Returns the value of attribute config.



5
6
7
# File 'lib/huck/receiver.rb', line 5

def config
  @config
end

Class Method Details

.factory(kwargs = {}) ⇒ Object

Given a receiver’s name (or no name), return a new receiver instance

Parameters:

name

The name of the receiver, or nil to guess

config

A configuration hash

Returns:

A Huck::Receiver instance



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/huck/receiver.rb', line 18

def self.factory kwargs = {}
  name = Huck::getarg kwargs, :name, nil
  config = Huck::getarg kwargs, :config, {}

  name = 'sqs' if name.nil?

  case name
  when 'sqs'
    r = Receivers::SQSReceiver.new
  when 'rabbitmq'
    r = Receivers::RabbitMQReceiver.new
  else
    raise Huck::Error, "bad receiver: #{name}"
  end

  r.config = config
  return r
end

Instance Method Details

#accept(handlers, block) ⇒ Object

Given some handlers (or a block), grab messages out of the queue and feed them through to the handlers.

Parameters:

handlers

An array of Huck::Handler instances

block

A code block, or nil



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
# File 'lib/huck/receiver.rb', line 46

def accept handlers, block
  begin
    receive do |msg|
      begin
        if block
          hname = '<block>'
          block.call msg
          next # skip other handlers
        end

        handlers.each do |h|
          hname = h.class.to_s
          h.handle msg
        end
      rescue => e
        puts "Handler error (#{hname}): #{e.message}"
      end
    end
  rescue Interrupt, SystemExit
    return
  rescue Huck::Error
    raise
  rescue => e
    puts "Receiver error (#{self.class}): #{e.message}"
    puts "Retrying in 5s..."
    sleep 5
    retry
  end
end