event_bus 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/Gemfile.lock +13 -13
- data/README.md +79 -27
- data/lib/event_bus.rb +53 -61
- data/lib/event_bus/registrations.rb +58 -0
- data/spec/lib/event_bus_spec.rb +77 -32
- metadata +3 -2
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
event_bus (0.0.
|
4
|
+
event_bus (0.0.4)
|
5
5
|
|
6
6
|
GEM
|
7
|
-
remote:
|
7
|
+
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
diff-lcs (1.
|
10
|
-
multi_json (1.
|
11
|
-
rake (10.0.
|
12
|
-
rspec (2.
|
13
|
-
rspec-core (~> 2.
|
14
|
-
rspec-expectations (~> 2.
|
15
|
-
rspec-mocks (~> 2.
|
16
|
-
rspec-core (2.
|
17
|
-
rspec-expectations (2.
|
18
|
-
diff-lcs (
|
19
|
-
rspec-mocks (2.
|
9
|
+
diff-lcs (1.2.3)
|
10
|
+
multi_json (1.7.2)
|
11
|
+
rake (10.0.4)
|
12
|
+
rspec (2.13.0)
|
13
|
+
rspec-core (~> 2.13.0)
|
14
|
+
rspec-expectations (~> 2.13.0)
|
15
|
+
rspec-mocks (~> 2.13.0)
|
16
|
+
rspec-core (2.13.1)
|
17
|
+
rspec-expectations (2.13.0)
|
18
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
19
|
+
rspec-mocks (2.13.1)
|
20
20
|
simplecov (0.7.1)
|
21
21
|
multi_json (~> 1.0)
|
22
22
|
simplecov-html (~> 0.7.1)
|
data/README.md
CHANGED
@@ -5,10 +5,12 @@ A simple pubsub event bus for Ruby applications.
|
|
5
5
|
[![Build Status](https://travis-ci.org/kevinrutherford/event_bus.png)](https://travis-ci.org/kevinrutherford/event_bus)
|
6
6
|
[![Dependency
|
7
7
|
Status](https://gemnasium.com/kevinrutherford/event_bus.png)](https://gemnasium.com/kevinrutherford/event_bus)
|
8
|
+
[![Code
|
9
|
+
Climate](https://codeclimate.com/github/kevinrutherford/event_bus.png)](https://codeclimate.com/github/kevinrutherford/event_bus)
|
8
10
|
|
9
|
-
* <https://rubygems.org/gems/event_bus>
|
10
|
-
* <http://rubydoc.info/gems/event_bus/frames>
|
11
|
-
* <https://github.com/kevinrutherford/event_bus>
|
11
|
+
* Gem: <https://rubygems.org/gems/event_bus>
|
12
|
+
* API docs: <http://rubydoc.info/gems/event_bus/frames>
|
13
|
+
* Source code: <https://github.com/kevinrutherford/event_bus>
|
12
14
|
|
13
15
|
## Features
|
14
16
|
|
@@ -17,6 +19,7 @@ Status](https://gemnasium.com/kevinrutherford/event_bus.png)](https://gemnasium.
|
|
17
19
|
* Listen for events without coupling to the publishing object or class.
|
18
20
|
* Subscribe to events using names or regex patterns.
|
19
21
|
* Works with Rails.
|
22
|
+
* Works without Rails.
|
20
23
|
|
21
24
|
## Installation
|
22
25
|
|
@@ -34,44 +37,93 @@ gem 'event_bus'
|
|
34
37
|
|
35
38
|
## Usage
|
36
39
|
|
37
|
-
|
40
|
+
### Publishing events
|
38
41
|
|
39
|
-
|
40
|
-
EventBus.subscribe('order-placed', StatsRecorder.new, :order_placed)
|
41
|
-
```
|
42
|
+
Publish events whenever something significant happens in your application:
|
42
43
|
|
43
44
|
```ruby
|
44
|
-
class
|
45
|
-
|
46
|
-
|
47
|
-
//...
|
48
|
-
end
|
45
|
+
class PlaceOrder
|
46
|
+
//...
|
47
|
+
EventBus.announce(:order_placed, order: current_order, customer: current_user)
|
49
48
|
end
|
50
49
|
```
|
51
50
|
|
52
|
-
|
51
|
+
The event name (first argument) can be a String or a Symbol.
|
52
|
+
The Hash is optional and supplies a payload of information to any subscribers.
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
order = details[:order]
|
57
|
-
//...
|
58
|
-
end
|
59
|
-
```
|
54
|
+
(If you don't like the method name `announce` you can use `publish` or
|
55
|
+
`broadcast` instead.)
|
60
56
|
|
61
|
-
|
57
|
+
### Subscribing to events
|
62
58
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
59
|
+
There are three ways to subscribe to events.
|
60
|
+
|
61
|
+
1. Subscribe a listener object:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
EventBus.subscribe(StatsRecorder.new)
|
65
|
+
```
|
66
|
+
|
67
|
+
The event will be handled by a method whose name matches the event name:
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
class StatsRecorder
|
71
|
+
def order_placed(payload)
|
72
|
+
order = payload[:order]
|
73
|
+
//...
|
74
|
+
end
|
75
|
+
end
|
76
|
+
```
|
77
|
+
|
78
|
+
If the object has no matching method, it doesn't receive the event.
|
79
|
+
|
80
|
+
2. Specify the method to be called when the event fires:
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
EventBus.subscribe(:order_placed, StatsRecorder.new, :print_order)
|
84
|
+
```
|
85
|
+
|
86
|
+
In this case the event will be handled by the `print_order` method:
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
class StatsRecorder
|
90
|
+
def print_order(payload)
|
91
|
+
order = payload[:order]
|
92
|
+
//...
|
93
|
+
end
|
94
|
+
end
|
95
|
+
```
|
96
|
+
|
97
|
+
The first argument to `subscribe` can be a String,
|
98
|
+
a Symbol or a Regexp:
|
99
|
+
|
100
|
+
```ruby
|
101
|
+
EventBus.subscribe(/order/, StatsRecorder.new, :print_order)
|
102
|
+
```
|
103
|
+
|
104
|
+
3. Subscribe a block:
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
EventBus.subscribe(:order_placed) do |payload|
|
108
|
+
order = payload[:order]
|
109
|
+
//...
|
110
|
+
end
|
111
|
+
```
|
112
|
+
|
113
|
+
The argument to `subscribe` can be a String, a Symbol or a Regexp:
|
114
|
+
|
115
|
+
```ruby
|
116
|
+
EventBus.subscribe(/order/) do |payload|
|
117
|
+
order = payload[:order]
|
118
|
+
//...
|
119
|
+
end
|
120
|
+
```
|
69
121
|
|
70
122
|
See the specs for more detailed usage scenarios.
|
71
123
|
|
72
124
|
## Compatibility
|
73
125
|
|
74
|
-
Tested with Ruby 1.
|
126
|
+
Tested with Ruby 1.9.x, JRuby, Rubinius.
|
75
127
|
See the [build status](https://travis-ci.org/kevinrutherford/event_bus)
|
76
128
|
for details.
|
77
129
|
|
data/lib/event_bus.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative 'event_bus/registrations'
|
2
2
|
|
3
3
|
class EventBus
|
4
4
|
|
@@ -7,37 +7,61 @@ class EventBus
|
|
7
7
|
#
|
8
8
|
# Announce an event to any waiting listeners.
|
9
9
|
#
|
10
|
-
# The +event_name+ is added to the +
|
11
|
-
# before
|
10
|
+
# The +event_name+ is added to the +payload+ hash (with the key +:event_name+)
|
11
|
+
# before being passed on to listeners.
|
12
12
|
#
|
13
13
|
# @param event_name [String, Symbol] the name of your event
|
14
|
-
# @param
|
15
|
-
# @return the EventBus, ready to be called again.
|
14
|
+
# @param payload [Hash] the information you want to pass to the listeners
|
15
|
+
# @return [EventBus] the EventBus, ready to be called again.
|
16
16
|
#
|
17
|
-
def publish(event_name,
|
18
|
-
|
19
|
-
|
17
|
+
def publish(event_name, payload = {})
|
18
|
+
case event_name
|
19
|
+
when Symbol, String
|
20
|
+
registrations.announce(event_name, payload)
|
21
|
+
self
|
22
|
+
else
|
23
|
+
raise ArgumentError.new('The event name must be a string or a symbol')
|
24
|
+
end
|
20
25
|
end
|
21
26
|
|
22
27
|
alias :announce :publish
|
23
28
|
alias :broadcast :publish
|
24
29
|
|
25
30
|
#
|
26
|
-
#
|
31
|
+
# Subscribe to a set of events.
|
32
|
+
#
|
33
|
+
# If +blk+ is supplied, it will be called with any event whose name
|
34
|
+
# matches +pattern+.
|
35
|
+
#
|
36
|
+
# If no block is given, and if +pattern+ is a String or a Regexp,
|
37
|
+
# a method will be called on +listener+ whenever an event matching
|
38
|
+
# +pattern+ occurs. In this case, if +method_name+ is supplied the
|
39
|
+
# EventBus will look for, and call, a method of that name on +listener+;
|
40
|
+
# otherwise if +method_name+ is not given, the EventBus will attempt to
|
41
|
+
# call a method whose name matches the event's name.
|
27
42
|
#
|
28
|
-
#
|
43
|
+
# Finally, if no block is given and +pattern+ is not a String or a Regexp,
|
44
|
+
# then +pattern+ is taken to be a listener object and the EventBus will
|
45
|
+
# attempt to call a method on it whose name matches the event's name.
|
46
|
+
#
|
47
|
+
# Either +listener+ or +blk+ must be provided, both never both.
|
48
|
+
#
|
49
|
+
# When a matching event occurs, either the block is called or the +method_name+
|
50
|
+
# method on the +listener+ object is called.
|
51
|
+
#
|
52
|
+
# @param pattern [String, Regexp] listen for any events whose name matches this pattern
|
29
53
|
# @param listener the object to be notified when a matching event occurs
|
30
54
|
# @param method_name [Symbol] the method to be called on +listener+ when a matching event occurs
|
31
|
-
# @return the EventBus, ready to be called again.
|
55
|
+
# @return [EventBus] the EventBus, ready to be called again.
|
32
56
|
#
|
33
57
|
def subscribe(pattern, listener = nil, method_name = nil, &blk)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
registrations.add_method(pattern, listener, method_name)
|
58
|
+
case pattern
|
59
|
+
when Regexp, String
|
60
|
+
subscribe_pattern(pattern, listener, method_name, &blk)
|
38
61
|
else
|
39
|
-
raise ArgumentError.new('You
|
40
|
-
|
62
|
+
raise ArgumentError.new('You cannot give two listeners') if listener || method_name
|
63
|
+
raise ArgumentError.new('You cannot give both a listener and a block') if block_given?
|
64
|
+
subscribe_obj(pattern)
|
41
65
|
end
|
42
66
|
self
|
43
67
|
end
|
@@ -66,58 +90,26 @@ class EventBus
|
|
66
90
|
|
67
91
|
private
|
68
92
|
|
69
|
-
def
|
70
|
-
Registrations.instance
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
class Registrations
|
76
|
-
include Singleton
|
77
|
-
|
78
|
-
def initialize
|
79
|
-
clear
|
80
|
-
end
|
81
|
-
|
82
|
-
def announce(event_name, details)
|
83
|
-
info = {:event_name => event_name}.merge(details)
|
84
|
-
@listeners.each do |listener|
|
85
|
-
listener.respond(event_name, info)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def clear
|
90
|
-
@listeners = []
|
91
|
-
end
|
92
|
-
|
93
|
-
def add(pattern, listener, method_name, &blk)
|
93
|
+
def subscribe_pattern(pattern, listener, method_name, &blk)
|
94
94
|
if listener
|
95
|
-
|
95
|
+
raise ArgumentError.new('You cannot give both a listener and a block') if block_given?
|
96
|
+
raise ArgumentError.new('You must supply a method name') unless method_name
|
97
|
+
registrations.add_method(pattern, listener, method_name)
|
96
98
|
else
|
97
|
-
|
99
|
+
raise ArgumentError.new('You must provide a listener or a block') unless block_given?
|
100
|
+
registrations.add_block(pattern, &blk)
|
98
101
|
end
|
99
102
|
end
|
100
103
|
|
101
|
-
def
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
def add_block(pattern, blk)
|
106
|
-
@listeners << BlockRegistration.new(pattern, blk)
|
107
|
-
end
|
108
|
-
|
109
|
-
private
|
110
|
-
|
111
|
-
Registration = Struct.new(:pattern, :listener, :method_name) do
|
112
|
-
def respond(event_name, details)
|
113
|
-
listener.send(method_name, details) if pattern === event_name
|
104
|
+
def subscribe_obj(listener)
|
105
|
+
registrations.add_block(/.*/) do |payload|
|
106
|
+
method = payload[:event_name].to_sym
|
107
|
+
listener.send(method, payload) if listener.respond_to?(method)
|
114
108
|
end
|
115
109
|
end
|
116
110
|
|
117
|
-
|
118
|
-
|
119
|
-
block.call(details) if pattern === event_name
|
120
|
-
end
|
111
|
+
def registrations
|
112
|
+
Registrations.instance
|
121
113
|
end
|
122
114
|
|
123
115
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
class EventBus
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
class Registrations
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
clear
|
12
|
+
end
|
13
|
+
|
14
|
+
def announce(event_name, payload)
|
15
|
+
full_payload = {event_name: event_name}.merge(payload)
|
16
|
+
@listeners.each do |listener|
|
17
|
+
listener.respond(event_name, full_payload)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def clear
|
22
|
+
@listeners = []
|
23
|
+
end
|
24
|
+
|
25
|
+
def add(pattern, listener, method_name, &blk)
|
26
|
+
if listener
|
27
|
+
add_method(pattern, listener, method_name)
|
28
|
+
else
|
29
|
+
add_block(pattern, blk)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def add_method(pattern, listener, method_name)
|
34
|
+
@listeners << Registration.new(pattern, listener, method_name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_block(pattern, &blk)
|
38
|
+
@listeners << BlockRegistration.new(pattern, blk)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
Registration = Struct.new(:pattern, :listener, :method_name) do
|
44
|
+
def respond(event_name, payload)
|
45
|
+
listener.send(method_name, payload) if pattern === event_name
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
BlockRegistration = Struct.new(:pattern, :block) do
|
50
|
+
def respond(event_name, payload)
|
51
|
+
block.call(payload) if pattern === event_name
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
data/spec/lib/event_bus_spec.rb
CHANGED
@@ -9,93 +9,138 @@ describe EventBus do
|
|
9
9
|
EventBus.clear
|
10
10
|
end
|
11
11
|
|
12
|
-
describe '
|
12
|
+
describe 'publishing' do
|
13
|
+
|
14
|
+
it 'accepts a string for the event name' do
|
15
|
+
EventBus.subscribe(/#{event_name}/, listener, receiving_method)
|
16
|
+
listener.should_receive(receiving_method).with(event_name: event_name)
|
17
|
+
EventBus.publish(event_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'accepts a symbol for the event name' do
|
21
|
+
event_sym = :abc_123
|
22
|
+
EventBus.subscribe(/#{event_sym}/, listener, receiving_method)
|
23
|
+
listener.should_receive(receiving_method).with(event_name: event_sym)
|
24
|
+
EventBus.publish(event_sym)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'rejects any other type as the event name' do
|
28
|
+
expect { EventBus.publish(123) }.to raise_error(ArgumentError)
|
29
|
+
end
|
13
30
|
|
14
31
|
it 'returns itself, to facilitate cascades' do
|
15
32
|
EventBus.publish(event_name, {}).should == EventBus
|
16
33
|
end
|
17
34
|
|
18
|
-
it '
|
35
|
+
it 'adds the event name to the payload' do
|
19
36
|
EventBus.subscribe(event_name, listener, receiving_method)
|
20
|
-
listener.should_receive(receiving_method).with(:event_name
|
21
|
-
EventBus.publish(event_name,
|
37
|
+
listener.should_receive(receiving_method).with(event_name: event_name, a: 56)
|
38
|
+
EventBus.publish(event_name, a: 56)
|
22
39
|
end
|
23
40
|
|
24
|
-
it 'allows the
|
41
|
+
it 'allows the payload to be omitted' do
|
25
42
|
EventBus.subscribe(event_name, listener, receiving_method)
|
26
|
-
listener.should_receive(receiving_method).with(:
|
43
|
+
listener.should_receive(receiving_method).with(event_name: event_name)
|
27
44
|
EventBus.publish(event_name)
|
28
45
|
end
|
29
46
|
|
30
47
|
end
|
31
48
|
|
32
|
-
describe '
|
49
|
+
describe 'subscribing' do
|
33
50
|
|
34
51
|
it 'returns itself, to facilitate cascades' do
|
35
52
|
EventBus.subscribe(event_name, listener, receiving_method).should == EventBus
|
36
53
|
end
|
37
54
|
|
38
|
-
context '
|
55
|
+
context 'with a regex pattern' do
|
39
56
|
it 'sends the event to a matching listener' do
|
40
|
-
EventBus.subscribe(
|
41
|
-
listener.should_receive(receiving_method).with(:
|
42
|
-
EventBus.publish(event_name, :
|
57
|
+
EventBus.subscribe(/123b/, listener, receiving_method)
|
58
|
+
listener.should_receive(receiving_method).with(a: 1, b: 2, event_name: event_name)
|
59
|
+
EventBus.publish(event_name, a: 1, b: 2)
|
43
60
|
end
|
44
61
|
|
45
62
|
it 'does not send the event to non-matching listeners' do
|
46
|
-
EventBus.subscribe(
|
63
|
+
EventBus.subscribe(/123a/, listener, receiving_method)
|
47
64
|
listener.should_not_receive(receiving_method)
|
48
|
-
EventBus.publish(event_name, :
|
65
|
+
EventBus.publish(event_name, a: 1, b: 2, event_name: event_name)
|
49
66
|
end
|
50
67
|
end
|
51
68
|
|
52
|
-
context '
|
69
|
+
context 'with a string pattern' do
|
53
70
|
it 'sends the event to a matching listener' do
|
54
|
-
EventBus.subscribe(
|
55
|
-
listener.should_receive(receiving_method).with(:
|
56
|
-
EventBus.publish(event_name, :
|
71
|
+
EventBus.subscribe(event_name, listener, receiving_method)
|
72
|
+
listener.should_receive(receiving_method).with(a: 1, b: 2, event_name: event_name)
|
73
|
+
EventBus.publish(event_name, a: 1, b: 2)
|
57
74
|
end
|
58
75
|
|
59
76
|
it 'does not send the event to non-matching listeners' do
|
60
|
-
EventBus.subscribe(
|
77
|
+
EventBus.subscribe('blah', listener, receiving_method)
|
61
78
|
listener.should_not_receive(receiving_method)
|
62
|
-
EventBus.publish(event_name, :
|
79
|
+
EventBus.publish(event_name, a: 1, b: 2, event_name: event_name)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'with a listener method' do
|
84
|
+
it 'will not accept a block too' do
|
85
|
+
expect { EventBus.subscribe('blah', listener, receiving_method) {|info| }}.to raise_error(ArgumentError)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'expects a method name' do
|
89
|
+
expect { EventBus.subscribe('blah', listener) }.to raise_error(ArgumentError)
|
63
90
|
end
|
64
91
|
end
|
65
92
|
|
66
|
-
context '
|
93
|
+
context 'with a block' do
|
94
|
+
it 'requires a block when no listener method is supplied' do
|
95
|
+
expect { EventBus.subscribe('blah') }.to raise_error(ArgumentError)
|
96
|
+
end
|
97
|
+
|
67
98
|
it 'calls the block when the event matches' do
|
68
99
|
block_called = false
|
69
100
|
EventBus.subscribe(event_name) do |info|
|
70
101
|
block_called = true
|
71
|
-
info.should == {:
|
102
|
+
info.should == {a: 1, b: 2, event_name: event_name}
|
72
103
|
end
|
73
|
-
EventBus.publish(event_name, :
|
104
|
+
EventBus.publish(event_name, a: 1, b: 2)
|
74
105
|
block_called.should be_true
|
75
106
|
end
|
76
107
|
|
77
108
|
it 'does not call the block when the event does not match' do
|
78
109
|
block_called = false
|
79
110
|
EventBus.subscribe('blah') {|_| block_called = true }
|
80
|
-
EventBus.publish(event_name
|
111
|
+
EventBus.publish(event_name)
|
81
112
|
block_called.should be_false
|
82
113
|
end
|
83
114
|
end
|
84
115
|
|
85
|
-
context 'listener
|
86
|
-
|
87
|
-
|
116
|
+
context 'with a listener object' do
|
117
|
+
|
118
|
+
it 'calls a listener method whose name matches the event name' do
|
119
|
+
listener.should_receive(:a_method).with(a: 2, b: 3, event_name: 'a_method')
|
120
|
+
EventBus.subscribe(listener)
|
121
|
+
EventBus.publish('a_method', a: 2, b: 3)
|
88
122
|
end
|
89
123
|
|
90
|
-
it '
|
91
|
-
|
124
|
+
it 'calls a listener method with symbol whose name matches the event name' do
|
125
|
+
listener.should_receive(:a_method).with(a: 2, b: 3, event_name: :a_method)
|
126
|
+
EventBus.subscribe(listener)
|
127
|
+
EventBus.publish(:a_method, a: 2, b: 3)
|
92
128
|
end
|
93
|
-
end
|
94
129
|
|
95
|
-
|
96
|
-
|
97
|
-
|
130
|
+
it 'calls no method when there is no name match' do
|
131
|
+
listener.should_not_receive(:a_method)
|
132
|
+
EventBus.subscribe(listener)
|
133
|
+
EventBus.publish('b_method')
|
98
134
|
end
|
135
|
+
|
136
|
+
it 'will not accept other arguments' do
|
137
|
+
expect { EventBus.subscribe(listener, double) }.to raise_error(ArgumentError)
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'will not accept a block' do
|
141
|
+
expect { EventBus.subscribe(listener) {|info| }}.to raise_error(ArgumentError)
|
142
|
+
end
|
143
|
+
|
99
144
|
end
|
100
145
|
|
101
146
|
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
|
4
|
+
version: 0.1.0
|
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-
|
12
|
+
date: 2013-04-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -73,6 +73,7 @@ files:
|
|
73
73
|
- README.md
|
74
74
|
- Rakefile
|
75
75
|
- lib/event_bus.rb
|
76
|
+
- lib/event_bus/registrations.rb
|
76
77
|
- spec/lib/event_bus_spec.rb
|
77
78
|
- spec/spec_helper.rb
|
78
79
|
homepage: http://github.com/kevinrutherford/event_bus
|