event_aggregator 1.0.1 → 1.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.
- data/.travis.yml +21 -0
- data/README.md +36 -3
- data/Rakefile +6 -0
- data/event_aggregator.gemspec +5 -4
- data/lib/event_aggregator/version.rb +1 -1
- data/spec/lib/event_aggregator/aggregator_spec.rb +4 -4
- data/spec/spec_helper.rb +4 -5
- metadata +42 -21
- data/spec/factories.rb +0 -22
data/.travis.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
gemfile:
|
2
|
+
- Gemfile
|
3
|
+
language: ruby
|
4
|
+
rvm:
|
5
|
+
- 1.9.3
|
6
|
+
- 2.0.0
|
7
|
+
- 2.1.0
|
8
|
+
- jruby-19mode
|
9
|
+
- jruby-20mode
|
10
|
+
- jruby-21mode
|
11
|
+
- jruby-head
|
12
|
+
- ruby-head
|
13
|
+
matrix:
|
14
|
+
allow_failures:
|
15
|
+
- rvm: jruby-head
|
16
|
+
- rvm: ruby-head
|
17
|
+
- rvm: jruby-18mode
|
18
|
+
- rvm: 1.8.7
|
19
|
+
- rvm: 1.9.2
|
20
|
+
- rvm: rbx
|
21
|
+
fast_finish: true
|
data/README.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# EventAggregator gem
|
2
2
|
|
3
|
+
|
4
|
+
[][gem]
|
5
|
+
[][travis]
|
6
|
+
[][gemnasium]
|
7
|
+
[][codeclimate]
|
8
|
+
[][coveralls]
|
9
|
+
[](https://bitdeli.com/free "Bitdeli Badge")
|
10
|
+
|
11
|
+
[gem]: https://rubygems.org/gems/event_aggregator
|
12
|
+
[travis]: https://travis-ci.org/stephan-nordnes-eriksen/event_aggregator
|
13
|
+
[gemnasium]: https://gemnasium.com/stephan-nordnes-eriksen/event_aggregator
|
14
|
+
[codeclimate]: https://codeclimate.com/github/stephan-nordnes-eriksen/event_aggregator
|
15
|
+
[coveralls]: https://coveralls.io/r/stephan-nordnes-eriksen/event_aggregator
|
16
|
+
|
17
|
+
|
3
18
|
The gem 'event_aggregator' is designed for use with the event aggregator pattern in Ruby.
|
4
19
|
|
5
20
|
## Installation
|
@@ -26,7 +41,7 @@ Or install it yourself as:
|
|
26
41
|
class Foo
|
27
42
|
include EventAggregator::Listener
|
28
43
|
def initialize()
|
29
|
-
message_type_register( "foo", lambda{|data| puts
|
44
|
+
message_type_register( "foo", lambda{|data| puts data } )
|
30
45
|
|
31
46
|
message_type_register( "foo2", method(:handle_message) )
|
32
47
|
end
|
@@ -42,7 +57,7 @@ Or install it yourself as:
|
|
42
57
|
|
43
58
|
f = Foo.new
|
44
59
|
|
45
|
-
EventAggregator::Message.new("foo", "
|
60
|
+
EventAggregator::Message.new("foo", "bar").publish
|
46
61
|
#=> bar
|
47
62
|
EventAggregator::Message.new("foo2", "data").publish
|
48
63
|
#=> data
|
@@ -58,7 +73,25 @@ Or install it yourself as:
|
|
58
73
|
#=> data2
|
59
74
|
#=> data
|
60
75
|
|
61
|
-
|
76
|
+
### IMPORTANT: Asynchronous by Default
|
77
|
+
Message.publish is asynchronous by default. This means that if you run event_aggregator in a script that terminates, there is a chance that the script will terminate before the workers have processed the messages and you can receive an error looking like the following:
|
78
|
+
|
79
|
+
W, [2013-12-29T11:17:29.659902 #48097] WARN -- : Terminating task: type=:call, meta={:method_name=>:perform}, status=:callwait
|
80
|
+
D, [2013-12-29T11:17:29.660142 #48097] DEBUG -- : Celluloid::PoolManager: async call `perform` aborted!
|
81
|
+
Celluloid::Task::TerminatedError: task was terminated
|
82
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/tasks/task_fiber.rb:32:in `terminate'
|
83
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/actor.rb:404:in `block in cleanup'
|
84
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/actor.rb:404:in `each'
|
85
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/actor.rb:404:in `cleanup'
|
86
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/actor.rb:375:in `shutdown'
|
87
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/actor.rb:185:in `run'
|
88
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/actor.rb:157:in `block in initialize'
|
89
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/thread_handle.rb:13:in `block in initialize'
|
90
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/internal_pool.rb:100:in `call'
|
91
|
+
/Users/user/.rvm/gems/ruby-1.9.3-p429/gems/celluloid-0.15.2/lib/celluloid/internal_pool.rb:100:in `block in create'
|
92
|
+
W, [2013-12-29T11:17:29.660271 #48097] WARN -- : Terminating task: type=:finalizer, meta={:method_name=>:__shutdown__}, status=:callwait
|
93
|
+
|
94
|
+
To make it synchronous (not recommended) use the following:
|
62
95
|
|
63
96
|
EventAggregator::Message.new("foo", "data", false).publish
|
64
97
|
#=> data
|
data/Rakefile
CHANGED
data/event_aggregator.gemspec
CHANGED
@@ -19,10 +19,11 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler', "~> 1.3"
|
22
|
-
spec.add_development_dependency 'rake'
|
23
|
-
spec.add_development_dependency '
|
24
|
-
spec.add_development_dependency '
|
25
|
-
spec.add_development_dependency 'faker'
|
22
|
+
spec.add_development_dependency 'rake', '~> 10'
|
23
|
+
spec.add_development_dependency 'rspec', '~> 3.0.0.beta1'
|
24
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.2', '>= 4.2.2'
|
25
|
+
spec.add_development_dependency 'faker', '~> 1.2'
|
26
|
+
spec.add_development_dependency 'coveralls', '~> 0.7'
|
26
27
|
|
27
28
|
spec.add_dependency 'sucker_punch', "~> 1.0"
|
28
29
|
end
|
@@ -4,8 +4,8 @@ describe EventAggregator::Aggregator do
|
|
4
4
|
let(:listener) { (Class.new { include EventAggregator::Listener }).new }
|
5
5
|
let(:listener_class) { Class.new { include EventAggregator::Listener }}
|
6
6
|
let(:message_type) { Faker::Name.name }
|
7
|
-
let(:data)
|
8
|
-
let(:callback)
|
7
|
+
let(:data) { Faker::Name.name }
|
8
|
+
let(:callback) { lambda{ |data| } }
|
9
9
|
|
10
10
|
before(:each) do
|
11
11
|
EventAggregator::Aggregator.class_variable_set :@@listener, Hash.new{|h, k| h[k] = []}
|
@@ -219,8 +219,8 @@ describe EventAggregator::Aggregator do
|
|
219
219
|
end
|
220
220
|
it 'uses different objects when false' do
|
221
221
|
listener2 = listener_class.new
|
222
|
-
callback1 = lambda{|data| data ="no"}
|
223
|
-
callback2 = lambda{|data| data ="no"}
|
222
|
+
callback1 = lambda{|data| data = "no"}
|
223
|
+
callback2 = lambda{|data| data = "no"}
|
224
224
|
|
225
225
|
EventAggregator::Aggregator.register(listener, message_type, callback1)
|
226
226
|
EventAggregator::Aggregator.register(listener2, message_type, callback2)
|
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
require "rubygems"
|
2
2
|
require "bundler/setup"
|
3
|
-
require
|
3
|
+
require 'rspec'
|
4
|
+
#require 'rack/test'
|
4
5
|
require "faker"
|
5
6
|
require "event_aggregator"
|
6
7
|
require "sucker_punch/testing/inline"
|
7
|
-
|
8
|
+
require 'coveralls'
|
9
|
+
Coveralls.wear!
|
8
10
|
|
9
11
|
|
10
12
|
RSpec.configure do |config|
|
@@ -17,7 +19,4 @@ RSpec.configure do |config|
|
|
17
19
|
# the seed, which is printed after each run.
|
18
20
|
# --seed 1234
|
19
21
|
config.order = "random"
|
20
|
-
|
21
|
-
|
22
|
-
FactoryGirl.find_definitions
|
23
22
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: event_aggregator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.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-12-
|
12
|
+
date: 2013-12-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -32,65 +32,87 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
37
|
+
version: '10'
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
45
|
+
version: '10'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: rspec
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 3.0.0.beta1
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.0.0.beta1
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: guard-rspec
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '4.2'
|
67
70
|
- - ! '>='
|
68
71
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
72
|
+
version: 4.2.2
|
70
73
|
type: :development
|
71
74
|
prerelease: false
|
72
75
|
version_requirements: !ruby/object:Gem::Requirement
|
73
76
|
none: false
|
74
77
|
requirements:
|
78
|
+
- - ~>
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '4.2'
|
75
81
|
- - ! '>='
|
76
82
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
83
|
+
version: 4.2.2
|
78
84
|
- !ruby/object:Gem::Dependency
|
79
85
|
name: faker
|
80
86
|
requirement: !ruby/object:Gem::Requirement
|
81
87
|
none: false
|
82
88
|
requirements:
|
83
|
-
- -
|
89
|
+
- - ~>
|
84
90
|
- !ruby/object:Gem::Version
|
85
|
-
version: '
|
91
|
+
version: '1.2'
|
86
92
|
type: :development
|
87
93
|
prerelease: false
|
88
94
|
version_requirements: !ruby/object:Gem::Requirement
|
89
95
|
none: false
|
90
96
|
requirements:
|
91
|
-
- -
|
97
|
+
- - ~>
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '1.2'
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: coveralls
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ~>
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0.7'
|
108
|
+
type: :development
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
112
|
+
requirements:
|
113
|
+
- - ~>
|
92
114
|
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
115
|
+
version: '0.7'
|
94
116
|
- !ruby/object:Gem::Dependency
|
95
117
|
name: sucker_punch
|
96
118
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,6 +138,7 @@ extra_rdoc_files: []
|
|
116
138
|
files:
|
117
139
|
- .gitignore
|
118
140
|
- .rspec
|
141
|
+
- .travis.yml
|
119
142
|
- Gemfile
|
120
143
|
- Guardfile
|
121
144
|
- LICENSE.txt
|
@@ -128,7 +151,6 @@ files:
|
|
128
151
|
- lib/event_aggregator/message.rb
|
129
152
|
- lib/event_aggregator/message_job.rb
|
130
153
|
- lib/event_aggregator/version.rb
|
131
|
-
- spec/factories.rb
|
132
154
|
- spec/lib/event_aggregator/aggregator_spec.rb
|
133
155
|
- spec/lib/event_aggregator/listener_spec.rb
|
134
156
|
- spec/lib/event_aggregator/message_job_spec.rb
|
@@ -155,12 +177,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
177
|
version: '0'
|
156
178
|
requirements: []
|
157
179
|
rubyforge_project:
|
158
|
-
rubygems_version: 1.8.
|
180
|
+
rubygems_version: 1.8.23
|
159
181
|
signing_key:
|
160
182
|
specification_version: 3
|
161
183
|
summary: Event aggregator for Ruby.
|
162
184
|
test_files:
|
163
|
-
- spec/factories.rb
|
164
185
|
- spec/lib/event_aggregator/aggregator_spec.rb
|
165
186
|
- spec/lib/event_aggregator/listener_spec.rb
|
166
187
|
- spec/lib/event_aggregator/message_job_spec.rb
|
data/spec/factories.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'factory_girl'
|
2
|
-
require 'faker'
|
3
|
-
require 'event_aggregator'
|
4
|
-
|
5
|
-
|
6
|
-
# Public: Not really used. Might not be needed at all. The same
|
7
|
-
# goes for FactoryGirl in general. Might not be needed.
|
8
|
-
#
|
9
|
-
class DummyListener
|
10
|
-
include EventAggregator::Listener
|
11
|
-
end
|
12
|
-
|
13
|
-
FactoryGirl.define do
|
14
|
-
factory :listener, class: DummyListener do
|
15
|
-
|
16
|
-
end
|
17
|
-
factory :message do
|
18
|
-
message_type { Faker::Name.name }
|
19
|
-
data { Faker::Commerce.product_name }
|
20
|
-
#initialize_with(Faker::Name.name, Faker::Name.name)
|
21
|
-
end
|
22
|
-
end
|