Module: Radiodan::EventBinding

Included in:
Player
Defined in:
lib/radiodan/event_binding.rb

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object (private)



44
45
46
47
48
49
50
# File 'lib/radiodan/event_binding.rb', line 44

def method_missing(method, *args, &block)
  if event_bindings.include?(method)
    trigger_event(method, *args)
  else
    super
  end
end

Instance Method Details

#eventsObject



27
28
29
# File 'lib/radiodan/event_binding.rb', line 27

def events
  event_bindings.keys.sort
end

#register_event(event, &blk) ⇒ Object



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

def register_event(event, &blk)
  logger.info "Registered event #{event}"
  event = event.to_sym
  event_bindings[event] << blk
  
  true
end

#respond_to?(method) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
34
35
36
37
# File 'lib/radiodan/event_binding.rb', line 31

def respond_to?(method)
  if event_bindings.include?(method)
    true
  else
    super
  end
end

#trigger_event(event, data = nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/radiodan/event_binding.rb', line 11

def trigger_event(event, data=nil)
  event = event.to_sym
  bindings = event_bindings[event]
  
  unless bindings
    logger.error "Event #{event} triggered but not found" 
  end
  
  # also, run the events bound to :all, no matter the event
  bindings += event_bindings[:all]
  
  bindings.each do |blk|
    EM::Synchrony.next_tick { blk.call(data) }
  end
end