event_bus 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/event_bus.rb +56 -23
  2. metadata +4 -3
data/lib/event_bus.rb CHANGED
@@ -1,48 +1,81 @@
1
1
  require 'singleton'
2
2
 
3
3
  class EventBus
4
- include Singleton
5
4
 
5
+ #
6
+ # Announce an event to any waiting listeners.
7
+ #
8
+ # @param event_name [String, Symbol] the name of your event
9
+ # @param details [Hash] the information you want to pass to the listeners
10
+ # @return the EventBus, ready to be called again.
11
+ #
6
12
  def self.announce(event_name, details)
7
- instance.announce(event_name, details)
13
+ Registrations.instance.announce(event_name, details)
14
+ self
8
15
  end
9
16
 
10
- def self.clear
11
- instance.clear
17
+ #
18
+ # Register a single listener.
19
+ #
20
+ # @param pattern [String, Regex] listen for any events whose name matches this pattern
21
+ # @param listener the object to be notified when a matching event occurs
22
+ # @param method_name [Symbol] the method to be called on listener when a matching event occurs
23
+ # @return the EventBus, ready to be called again.
24
+ #
25
+ def self.listen_for(pattern, listener, method_name)
26
+ Registrations.instance.register(pattern, listener, method_name)
27
+ self
12
28
  end
13
29
 
14
- def self.listen_for(pattern, listener, method_name)
15
- instance.register(pattern, listener, method_name)
30
+ #
31
+ # Delete all current listener registrations
32
+ #
33
+ # @return the EventBus, ready to be called again.
34
+ #
35
+ def self.clear
36
+ Registrations.instance.clear
37
+ self
16
38
  end
17
39
 
40
+ #
41
+ # (experimental)
42
+ #
18
43
  def self.register(listener)
19
44
  listener.events_map.each do |pattern, method_name|
20
- instance.register(pattern, listener, method_name)
45
+ Registrations.instance.register(pattern, listener, method_name)
21
46
  end
47
+ self
22
48
  end
23
49
 
24
- Registration = Struct.new(:pattern, :listener, :method_name) do
25
- def respond(event_name, details)
26
- listener.send(method_name, details) if pattern === event_name
50
+ private
51
+
52
+ class Registrations
53
+ include Singleton
54
+
55
+ Registration = Struct.new(:pattern, :listener, :method_name) do
56
+ def respond(event_name, details)
57
+ listener.send(method_name, details) if pattern === event_name
58
+ end
27
59
  end
28
- end
29
60
 
30
- def initialize
31
- clear
32
- end
61
+ def initialize
62
+ clear
63
+ end
33
64
 
34
- def announce(event_name, details)
35
- @listeners.each do |listener|
36
- listener.respond(event_name, details)
65
+ def announce(event_name, details)
66
+ @listeners.each do |listener|
67
+ listener.respond(event_name, details)
68
+ end
37
69
  end
38
- end
39
70
 
40
- def clear
41
- @listeners = []
42
- end
71
+ def clear
72
+ @listeners = []
73
+ end
74
+
75
+ def register(pattern, listener, method_name)
76
+ @listeners << Registration.new(pattern, listener, method_name)
77
+ end
43
78
 
44
- def register(pattern, listener, method_name)
45
- @listeners << Registration.new(pattern, listener, method_name)
46
79
  end
47
80
 
48
81
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event_bus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-16 00:00:00.000000000 Z
12
+ date: 2013-01-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A simple pubsub event bus
15
15
  email: kevin@rutherford-software.com
@@ -18,7 +18,7 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - lib/event_bus.rb
21
- homepage: http://rubygems.org/gems/event_bus
21
+ homepage: http://github.com/kevinrutherford/event_bus
22
22
  licenses: []
23
23
  post_install_message:
24
24
  rdoc_options: []
@@ -43,3 +43,4 @@ signing_key:
43
43
  specification_version: 3
44
44
  summary: A simple pubsub event bus
45
45
  test_files: []
46
+ has_rdoc: