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 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