emittance 0.0.3 → 0.0.4
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/emittance/broker.rb +6 -0
- data/lib/emittance/brokerage.rb +10 -2
- data/lib/emittance/brokers/synchronous.rb +3 -1
- data/lib/emittance/dispatchers/synchronous.rb +66 -0
- data/lib/emittance/emitter.rb +6 -6
- data/lib/emittance/version.rb +1 -1
- data/lib/emittance/watcher.rb +8 -2
- data/lib/emittance.rb +21 -5
- metadata +3 -3
- data/lib/emittance/dispatcher.rb +0 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 986843810de58a199f02fdf539d2bfb3dba43e6d
|
4
|
+
data.tar.gz: dbdfc671b5dd1ec85d3722b4ffa7c30e9ec4d0a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4369875f79828cb66bf11da0f57780f1dddacc55680ec50ffb3ee1980ad9f8b592600d313e7cd221c18733a4de34e107497d084d469313c794ade69105b3f10
|
7
|
+
data.tar.gz: 8837f6c33c9f7c812c2ef64355af6f3d21e8b14b03522e37c9e934f5f5ab7b22a137a8eed77b6163aeb1715e2c66af49da96217ecfbb2447534347cf17d1f464
|
data/Gemfile.lock
CHANGED
data/lib/emittance/broker.rb
CHANGED
@@ -5,12 +5,18 @@ module Emittance
|
|
5
5
|
# Base class for event brokers.
|
6
6
|
#
|
7
7
|
class Broker
|
8
|
+
DISPATCHER_KLASS_NAME = 'Dispatcher'
|
9
|
+
|
8
10
|
class << self
|
9
11
|
# @param _event [Emittance::Event] the event to be passed off to watchers
|
10
12
|
def process_event(_event)
|
11
13
|
raise NotImplementedError
|
12
14
|
end
|
13
15
|
|
16
|
+
def dispatcher
|
17
|
+
const_get DISPATCHER_KLASS_NAME
|
18
|
+
end
|
19
|
+
|
14
20
|
def inherited(subklass)
|
15
21
|
register_broker subklass
|
16
22
|
super
|
data/lib/emittance/brokerage.rb
CHANGED
@@ -7,15 +7,23 @@ module Emittance
|
|
7
7
|
#
|
8
8
|
class Brokerage
|
9
9
|
@enabled = true
|
10
|
+
@current_broker = nil
|
10
11
|
|
11
12
|
class << self
|
12
13
|
# @param event [Emittance::Event] the event object
|
13
14
|
# @param broker_id [Symbol] a symbol that can be used to identify a broker by
|
14
|
-
def send_event(event
|
15
|
-
broker = registry.fetch(broker_id)
|
15
|
+
def send_event(event)
|
16
16
|
broker.process_event event
|
17
17
|
end
|
18
18
|
|
19
|
+
def broker
|
20
|
+
@current_broker
|
21
|
+
end
|
22
|
+
|
23
|
+
def use_broker(identifier)
|
24
|
+
@current_broker = registry.fetch identifier
|
25
|
+
end
|
26
|
+
|
19
27
|
# @param broker [Emittance::Broker] the broker you would like to register
|
20
28
|
def register_broker(broker)
|
21
29
|
registry.register broker
|
@@ -8,8 +8,10 @@ module Emittance
|
|
8
8
|
class << self
|
9
9
|
# (@see Emittance::Broker.process_event)
|
10
10
|
def process_event(event)
|
11
|
-
|
11
|
+
dispatcher.process_event event
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
require 'emittance/dispatchers/synchronous'
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Emittance
|
4
|
+
class Synchronous
|
5
|
+
##
|
6
|
+
# The synchronous dispatcher. Runs callbacks one-by-one, in series.
|
7
|
+
#
|
8
|
+
class Dispatcher
|
9
|
+
@registrations = {}
|
10
|
+
@enabled = true
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def process_event(event)
|
14
|
+
registrations_for(event).each do |registration|
|
15
|
+
registration.call event
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def registrations_for(identifier)
|
20
|
+
event_klass = find_event_klass identifier
|
21
|
+
registrations[event_klass] ||= empty_registration
|
22
|
+
registrations[event_klass]
|
23
|
+
end
|
24
|
+
|
25
|
+
def register(identifier, &callback)
|
26
|
+
event_klass = find_event_klass identifier
|
27
|
+
registrations[event_klass] ||= empty_registration
|
28
|
+
registrations_for(event_klass) << Emittance::Registration.new(event_klass, &callback)
|
29
|
+
|
30
|
+
callback
|
31
|
+
end
|
32
|
+
|
33
|
+
def register_method_call(identifier, object, method_name)
|
34
|
+
register identifier, &lambda_for_method_call(object, method_name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def clear_registrations!
|
38
|
+
registrations.each_key do |event_klass|
|
39
|
+
clear_registrations_for! event_klass
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def clear_registrations_for!(identifier)
|
44
|
+
event_klass = find_event_klass identifier
|
45
|
+
registrations[event_klass].clear
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
attr_accessor :registrations
|
51
|
+
|
52
|
+
def empty_registration
|
53
|
+
Set.new
|
54
|
+
end
|
55
|
+
|
56
|
+
def find_event_klass(event)
|
57
|
+
Emittance::EventLookup.find_event_klass(event)
|
58
|
+
end
|
59
|
+
|
60
|
+
def lambda_for_method_call(object, method_name)
|
61
|
+
->(event) { object.send method_name, event }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/emittance/emitter.rb
CHANGED
@@ -62,11 +62,11 @@ module Emittance
|
|
62
62
|
# if not using the default.
|
63
63
|
#
|
64
64
|
# @return the payload
|
65
|
-
def emit(identifier, payload: nil
|
65
|
+
def emit(identifier, payload: nil)
|
66
66
|
now = Time.now
|
67
67
|
event_klass = _event_klass_for identifier
|
68
68
|
event = event_klass.new(self, now, payload)
|
69
|
-
_send_to_broker event
|
69
|
+
_send_to_broker event
|
70
70
|
|
71
71
|
payload
|
72
72
|
end
|
@@ -77,11 +77,11 @@ module Emittance
|
|
77
77
|
# @param identifiers [*] anything that can be used to generate an +Event+ class.
|
78
78
|
# @param payload (@see #emit)
|
79
79
|
# @param broker (@see #emit)
|
80
|
-
def emit_with_dynamic_identifier(*identifiers, payload
|
80
|
+
def emit_with_dynamic_identifier(*identifiers, payload:)
|
81
81
|
now = Time.now
|
82
82
|
event_klass = _event_klass_for(*identifiers)
|
83
83
|
event = event_klass.new(self, now, payload)
|
84
|
-
_send_to_broker event
|
84
|
+
_send_to_broker event
|
85
85
|
|
86
86
|
payload
|
87
87
|
end
|
@@ -131,8 +131,8 @@ module Emittance
|
|
131
131
|
Emittance::Event.event_klass_for(*identifiers)
|
132
132
|
end
|
133
133
|
|
134
|
-
def _send_to_broker(event
|
135
|
-
Emittance::Brokerage.send_event event
|
134
|
+
def _send_to_broker(event)
|
135
|
+
Emittance::Brokerage.send_event event
|
136
136
|
end
|
137
137
|
end
|
138
138
|
end
|
data/lib/emittance/version.rb
CHANGED
data/lib/emittance/watcher.rb
CHANGED
@@ -16,10 +16,16 @@ module Emittance
|
|
16
16
|
# @return [Proc] the block that will run when the event fires
|
17
17
|
def watch(identifier, callback_method = nil, &callback)
|
18
18
|
if callback_method
|
19
|
-
|
19
|
+
_dispatcher.register_method_call identifier, self, callback_method
|
20
20
|
else
|
21
|
-
|
21
|
+
_dispatcher.register identifier, &callback
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def _dispatcher
|
28
|
+
Emittance.dispatcher
|
29
|
+
end
|
24
30
|
end
|
25
31
|
end
|
data/lib/emittance.rb
CHANGED
@@ -13,29 +13,43 @@ require 'emittance/event'
|
|
13
13
|
require 'emittance/emitter'
|
14
14
|
require 'emittance/watcher'
|
15
15
|
require 'emittance/action'
|
16
|
-
require 'emittance/dispatcher'
|
17
16
|
|
18
17
|
##
|
19
18
|
# The base namespace for this library. You can do some basic configuration stuff by calling methods on its singleton.
|
20
19
|
#
|
21
20
|
module Emittance
|
22
21
|
class << self
|
23
|
-
# Enable eventing process-wide
|
22
|
+
# Enable eventing process-wide
|
24
23
|
def enable!
|
25
24
|
Emittance::Brokerage.enable!
|
26
25
|
end
|
27
26
|
|
28
|
-
# Disable eventing process-wide
|
27
|
+
# Disable eventing process-wide
|
29
28
|
def disable!
|
30
29
|
Emittance::Brokerage.disable!
|
31
30
|
end
|
32
31
|
|
33
|
-
# @return [Boolean] true if eventing is enabled, false otherwise
|
32
|
+
# @return [Boolean] true if eventing is enabled, false otherwise
|
34
33
|
def enabled?
|
35
34
|
Emittance::Brokerage.enabled?
|
36
35
|
end
|
37
36
|
|
38
|
-
#
|
37
|
+
# @return [Class] the currently enabled broker class
|
38
|
+
def broker
|
39
|
+
Emittance::Brokerage.broker
|
40
|
+
end
|
41
|
+
|
42
|
+
# @return [Class] the dispatcher attached to the currently enabled broker
|
43
|
+
def dispatcher
|
44
|
+
broker.dispatcher
|
45
|
+
end
|
46
|
+
|
47
|
+
# @param [identifier] the identifier that can be used to identify the broker you wish to use
|
48
|
+
def use_broker(identifier)
|
49
|
+
Emittance::Brokerage.use_broker identifier
|
50
|
+
end
|
51
|
+
|
52
|
+
# Not yet implemented! Remove nocov and private flags when finished.
|
39
53
|
# :nocov:
|
40
54
|
# @private
|
41
55
|
def suppress(&_blk)
|
@@ -45,3 +59,5 @@ module Emittance
|
|
45
59
|
# :nocov:
|
46
60
|
end
|
47
61
|
end
|
62
|
+
|
63
|
+
Emittance.use_broker :synchronous
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emittance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Guillen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -120,7 +120,7 @@ files:
|
|
120
120
|
- lib/emittance/broker.rb
|
121
121
|
- lib/emittance/brokerage.rb
|
122
122
|
- lib/emittance/brokers/synchronous.rb
|
123
|
-
- lib/emittance/
|
123
|
+
- lib/emittance/dispatchers/synchronous.rb
|
124
124
|
- lib/emittance/emitter.rb
|
125
125
|
- lib/emittance/errors.rb
|
126
126
|
- lib/emittance/event.rb
|
data/lib/emittance/dispatcher.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'set'
|
4
|
-
|
5
|
-
module Emittance
|
6
|
-
# @private
|
7
|
-
class Dispatcher
|
8
|
-
@registrations = {}
|
9
|
-
@enabled = true
|
10
|
-
|
11
|
-
class << self
|
12
|
-
def process_event(event)
|
13
|
-
registrations_for(event).each do |registration|
|
14
|
-
registration.call event
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def registrations_for(identifier)
|
19
|
-
event_klass = find_event_klass identifier
|
20
|
-
registrations[event_klass] ||= empty_registration
|
21
|
-
registrations[event_klass]
|
22
|
-
end
|
23
|
-
|
24
|
-
def register(identifier, &callback)
|
25
|
-
event_klass = find_event_klass identifier
|
26
|
-
registrations[event_klass] ||= empty_registration
|
27
|
-
registrations_for(event_klass) << Emittance::Registration.new(event_klass, &callback)
|
28
|
-
|
29
|
-
callback
|
30
|
-
end
|
31
|
-
|
32
|
-
def register_method_call(identifier, object, method_name)
|
33
|
-
register identifier, &lambda_for_method_call(object, method_name)
|
34
|
-
end
|
35
|
-
|
36
|
-
def clear_registrations!
|
37
|
-
registrations.each_key do |event_klass|
|
38
|
-
clear_registrations_for! event_klass
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def clear_registrations_for!(identifier)
|
43
|
-
event_klass = find_event_klass identifier
|
44
|
-
registrations[event_klass].clear
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
attr_accessor :registrations
|
50
|
-
|
51
|
-
def empty_registration
|
52
|
-
Set.new
|
53
|
-
end
|
54
|
-
|
55
|
-
def find_event_klass(event)
|
56
|
-
Emittance::EventLookup.find_event_klass(event)
|
57
|
-
end
|
58
|
-
|
59
|
-
def lambda_for_method_call(object, method_name)
|
60
|
-
->(event) { object.send method_name, event }
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|