evil_events 0.1.0rc8 → 0.1.0rc9
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/README.md +1 -12
- data/lib/evil_events/core/broadcasting/emitter.rb +4 -1
- data/lib/evil_events/core/events/abstract_event.rb +9 -0
- data/lib/evil_events/core/events/manager/notifier.rb +59 -0
- data/lib/evil_events/core/events/manager.rb +4 -4
- data/lib/evil_events/core/events/manager_registry.rb +1 -1
- data/lib/evil_events/core/events.rb +1 -0
- data/lib/evil_events/shared/crypto.rb +17 -0
- data/lib/evil_events/shared.rb +1 -0
- data/lib/evil_events/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 427742fccaa575d930f2ae10f64ce3b31e2a511a
|
4
|
+
data.tar.gz: be655b351661f875c958c86efa678d20fe8c4961
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7e7e6683b298bcf27244e9b5abd34c27a5e33ecd31ce39bc94406cc4b69cdb7830e6c09bc073d8aec00599ad1a0a8157566150d3739b43b13114f88198347df
|
7
|
+
data.tar.gz: c76f2a4ebfb393aea6aab83cf97fdede36e2298a841963a40e814969a1cfcd73cf19cb0ebcf95cf7ba7f0a2426afedb75e2df4e226584cfd4196aca58f55fcdf
|
data/README.md
CHANGED
@@ -1,16 +1,5 @@
|
|
1
|
-
# EvilEvents
|
1
|
+
# EvilEvents - event subsystem for ruby applications (work in progress!)
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/evil_events)
|
4
4
|
[](https://travis-ci.org/ergosploit/evil_events)
|
5
5
|
[](https://coveralls.io/github/ergosploit/evil_events?branch=master)
|
6
|
-
|
7
|
-
### ROADMAP
|
8
|
-
- Basic documentation (README) (0.1.0)
|
9
|
-
- FULL documentation (0.1.1)
|
10
|
-
- Notifier abstraction (0.2.0)
|
11
|
-
- Event sourcing (0.3.0)
|
12
|
-
- Concrete error messages for exceptions (0.1.1)
|
13
|
-
- Hooks (0.2.0)
|
14
|
-
- Custom logger formatters (0.2.0)
|
15
|
-
- Logger colorization (0.2.0)
|
16
|
-
- DRY specs (0.1.1)
|
@@ -42,7 +42,10 @@ module EvilEvents::Core::Broadcasting
|
|
42
42
|
# @since 0.1.0
|
43
43
|
def log_emitter_activity(event)
|
44
44
|
activity = "EventEmitted(#{event.adapter_name})"
|
45
|
-
message = "
|
45
|
+
message = "ID: #{event.id} :: " \
|
46
|
+
"TYPE: #{event.type} :: " \
|
47
|
+
"PAYLOAD: #{event.payload} :: " \
|
48
|
+
"METADATA: #{event.metadata}"
|
46
49
|
|
47
50
|
EvilEvents::Core::ActivityLogger.log(activity: activity, message: message)
|
48
51
|
end
|
@@ -24,17 +24,25 @@ module EvilEvents::Core::Events
|
|
24
24
|
# @since 0.1.0
|
25
25
|
extend EvilEvents::Shared::CombinedContext::Mixin
|
26
26
|
|
27
|
+
# @return [String]
|
28
|
+
#
|
29
|
+
# @api public
|
30
|
+
# @since 0.1.0
|
31
|
+
attr_reader :id
|
32
|
+
|
27
33
|
# @option payload [Hash]
|
28
34
|
# @option metadata [Hash]
|
29
35
|
#
|
30
36
|
# @since 0.1.0
|
31
37
|
def initialize(payload: {}, metadata: {})
|
38
|
+
@id = EvilEvents::Shared::Crypto.uuid
|
32
39
|
@payload = build_payload(**payload)
|
33
40
|
@metadata = build_metadata(**metadata)
|
34
41
|
end
|
35
42
|
|
36
43
|
# @return [Hash]
|
37
44
|
#
|
45
|
+
# @api public
|
38
46
|
# @since 0.1.0
|
39
47
|
def payload
|
40
48
|
@payload.to_h
|
@@ -42,6 +50,7 @@ module EvilEvents::Core::Events
|
|
42
50
|
|
43
51
|
# @return [Hash]
|
44
52
|
#
|
53
|
+
# @api public
|
45
54
|
# @since 0.1.0
|
46
55
|
def metadata
|
47
56
|
@metadata.to_h
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::Core::Events::Manager
|
4
|
+
# @api private
|
5
|
+
# @since 0.1.0
|
6
|
+
module Notifier
|
7
|
+
# @since 0.1.0
|
8
|
+
NotifierError = Class.new(StandardError)
|
9
|
+
# @since 0.1.0
|
10
|
+
InconsistentEventClassError = Class.new(NotifierError)
|
11
|
+
|
12
|
+
# @since 0.1.0
|
13
|
+
class FailedSubscribersError < NotifierError
|
14
|
+
# @since 0.1.0
|
15
|
+
extend Forwardable
|
16
|
+
|
17
|
+
def_delegators :errors_stack, :<<, :empty?
|
18
|
+
|
19
|
+
# @return [Concurrent::Array]
|
20
|
+
#
|
21
|
+
# @api public
|
22
|
+
# @since 0.1.0
|
23
|
+
attr_reader :errors_stack
|
24
|
+
|
25
|
+
# @param message [NilClass, String]
|
26
|
+
#
|
27
|
+
# @since 0.1.0
|
28
|
+
def initialize(message = nil)
|
29
|
+
@errors_stack = Concurrent::Array.new
|
30
|
+
super
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class << self
|
35
|
+
# @param manager [EvilEvents::Core::Events::Manager]
|
36
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
37
|
+
# @raise [InconsistentEventClassError]
|
38
|
+
# @raise [FailedSubscribersError]
|
39
|
+
# @return void
|
40
|
+
#
|
41
|
+
# @since 0.1.0
|
42
|
+
def run(manager, event)
|
43
|
+
raise InconsistentEventClassError unless event.is_a?(manager.event_class)
|
44
|
+
|
45
|
+
errors_stack = FailedSubscribersError.new
|
46
|
+
|
47
|
+
manager.subscribers.each do |subscriber|
|
48
|
+
begin
|
49
|
+
subscriber.notify(event)
|
50
|
+
rescue StandardError => error
|
51
|
+
errors_stack << error
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
raise errors_stack unless errors_stack.empty?
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -45,14 +45,14 @@ module EvilEvents::Core::Events
|
|
45
45
|
end
|
46
46
|
|
47
47
|
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
48
|
-
# @raise [InconsistentEventClassError]
|
48
|
+
# @raise [Notifier::InconsistentEventClassError]
|
49
|
+
# @raise [Notifier::FailedSubscribersError]
|
50
|
+
#
|
49
51
|
# @return void
|
50
52
|
#
|
51
53
|
# @since 0.1.0
|
52
54
|
def notify(event)
|
53
|
-
|
54
|
-
# TODO: separate notification logic to worker/jobs
|
55
|
-
subscribers.each { |subscriber| subscriber.notify(event) }
|
55
|
+
Notifier.run(self, event)
|
56
56
|
end
|
57
57
|
|
58
58
|
# @return [String, Symbol]
|
@@ -34,7 +34,7 @@ module EvilEvents::Core::Events
|
|
34
34
|
#
|
35
35
|
# @since 0.1.0
|
36
36
|
def manager_of_event(event_class)
|
37
|
-
# NOTE: raise exceptions to simplify runtime problems
|
37
|
+
# NOTE: raise exceptions to simplify runtime problems
|
38
38
|
managers[event_class] || (raise NonManagedEventClassError)
|
39
39
|
end
|
40
40
|
|
@@ -19,6 +19,7 @@ module EvilEvents::Core
|
|
19
19
|
require_relative 'events/event_extensions/emittable'
|
20
20
|
require_relative 'events/abstract_event'
|
21
21
|
require_relative 'events/manager'
|
22
|
+
require_relative 'events/manager/notifier'
|
22
23
|
require_relative 'events/manager/subscriber_list'
|
23
24
|
require_relative 'events/manager_factory'
|
24
25
|
require_relative 'events/manager_registry'
|
data/lib/evil_events/shared.rb
CHANGED
data/lib/evil_events/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evil_events
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.0rc9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rustam Ibragimov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-monads
|
@@ -270,6 +270,7 @@ files:
|
|
270
270
|
- lib/evil_events/core/events/event_extensions/serializable.rb
|
271
271
|
- lib/evil_events/core/events/event_extensions/type_aliasing.rb
|
272
272
|
- lib/evil_events/core/events/manager.rb
|
273
|
+
- lib/evil_events/core/events/manager/notifier.rb
|
273
274
|
- lib/evil_events/core/events/manager/subscriber_list.rb
|
274
275
|
- lib/evil_events/core/events/manager_factory.rb
|
275
276
|
- lib/evil_events/core/events/manager_registry.rb
|
@@ -293,6 +294,7 @@ files:
|
|
293
294
|
- lib/evil_events/shared/combined_context.rb
|
294
295
|
- lib/evil_events/shared/combined_context/mixin.rb
|
295
296
|
- lib/evil_events/shared/configurable.rb
|
297
|
+
- lib/evil_events/shared/crypto.rb
|
296
298
|
- lib/evil_events/shared/delegator_resolver.rb
|
297
299
|
- lib/evil_events/shared/dependency_container.rb
|
298
300
|
- lib/evil_events/shared/logger.rb
|