emittance 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4e9a6fb1053c8170cf15f5b0591b50ee652a3e65
4
- data.tar.gz: 99c427d6c87cddf253750f9e435454bdef626cec
3
+ metadata.gz: 986843810de58a199f02fdf539d2bfb3dba43e6d
4
+ data.tar.gz: dbdfc671b5dd1ec85d3722b4ffa7c30e9ec4d0a3
5
5
  SHA512:
6
- metadata.gz: 54ad3b23a947f7a138c2e6182d91beb618473e0f64b7475c0236fddfdfb39aac6984e0a49534dcb630912b1d226f69c1fd2eeb2b359e41ace6d12162ad52f2c1
7
- data.tar.gz: 842994125c20aba135f5d1daec7a7842027e47c58b2129d02cf3fb5a90f852b8a692d2dd3afaa0be338cfc5f1cfcf5e8e9e984cab9ede5009e6ee9b94c8ed9db
6
+ metadata.gz: a4369875f79828cb66bf11da0f57780f1dddacc55680ec50ffb3ee1980ad9f8b592600d313e7cd221c18733a4de34e107497d084d469313c794ade69105b3f10
7
+ data.tar.gz: 8837f6c33c9f7c812c2ef64355af6f3d21e8b14b03522e37c9e934f5f5ab7b22a137a8eed77b6163aeb1715e2c66af49da96217ecfbb2447534347cf17d1f464
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- emittance (0.0.3)
4
+ emittance (0.0.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -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
@@ -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, broker_id)
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
- Emittance::Dispatcher.process_event event
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
@@ -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, broker: :synchronous)
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, broker
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:, broker: :synchronous)
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, broker
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, broker)
135
- Emittance::Brokerage.send_event event, broker
134
+ def _send_to_broker(event)
135
+ Emittance::Brokerage.send_event event
136
136
  end
137
137
  end
138
138
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Emittance
4
- VERSION = '0.0.3'
4
+ VERSION = '0.0.4'
5
5
  end
@@ -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
- Emittance::Dispatcher.register_method_call identifier, self, callback_method
19
+ _dispatcher.register_method_call identifier, self, callback_method
20
20
  else
21
- Emittance::Dispatcher.register identifier, &callback
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
- # Not yet implemented!
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.3
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-13 00:00:00.000000000 Z
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/dispatcher.rb
123
+ - lib/emittance/dispatchers/synchronous.rb
124
124
  - lib/emittance/emitter.rb
125
125
  - lib/emittance/errors.rb
126
126
  - lib/emittance/event.rb
@@ -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