Class: RisingDragon::SQS::Emitter

Inherits:
Object
  • Object
show all
Defined in:
lib/rising_dragon/sqs/emitter.rb

Instance Method Summary collapse

Constructor Details

#initializeEmitter

Returns a new instance of Emitter.



6
7
8
# File 'lib/rising_dragon/sqs/emitter.rb', line 6

def initialize
  @handlers = {}
end

Instance Method Details

#emit_event(event) ⇒ Object



36
37
38
39
40
41
# File 'lib/rising_dragon/sqs/emitter.rb', line 36

def emit_event(event)
  handler = @handlers[event.type]
  handler.new.handle(event) if handler

  nil
end

#emit_sns_msg(body) ⇒ Object



54
55
56
57
# File 'lib/rising_dragon/sqs/emitter.rb', line 54

def emit_sns_msg(body)
  event = event_from_json(body)
  emit_event(event)
end

#event_from_json(body) ⇒ Object



43
44
45
46
47
48
49
50
51
52
# File 'lib/rising_dragon/sqs/emitter.rb', line 43

def event_from_json(body)
  msg = JSON.parse(body["Message"])

  id = msg["id"]
  type = msg["type"]
  timestamp = Time.at(msg["timestamp"] / 1000.0)
  data = msg["data"]

  ::RisingDragon::Event.new(id: id, type: type, timestamp: timestamp, data: data)
end

#ignore(event_name) ⇒ Object



28
29
30
# File 'lib/rising_dragon/sqs/emitter.rb', line 28

def ignore(event_name)
  @handlers.delete(event_name)
end

#listObject



32
33
34
# File 'lib/rising_dragon/sqs/emitter.rb', line 32

def list
  @handlers.keys
end

#register(event_name, handler_class) ⇒ Object



10
11
12
13
14
15
16
17
18
# File 'lib/rising_dragon/sqs/emitter.rb', line 10

def register(event_name, handler_class)
  unless event_name.is_a?(String)
    raise "event_name must be String, but it's #{event_name.class}. event_name: #{event_name}"
  end
  if @handlers[event_name]
    raise "RisingDragon::SQS::Emitter accepts only one callback per event. event_name: #{event_name}"
  end
  @handlers[event_name] = handler_class
end

#unregister(event_name) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/rising_dragon/sqs/emitter.rb', line 20

def unregister(event_name)
  unless event_name.is_a?(String)
    raise "event_name must be String, but it's #{event_name.class}. event_name: #{event_name}"
  end

  @handlers.delete(event_name)
end