evil_events 0.2.0 → 0.3.0
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/.hound.yml +2 -0
- data/.rubocop.yml +12 -0
- data/.travis.yml +3 -2
- data/CHANGELOG.md +18 -0
- data/evil_events.gemspec +3 -3
- data/lib/evil_events/application.rb +7 -0
- data/lib/evil_events/core/broadcasting/emitter.rb +5 -7
- data/lib/evil_events/core/config.rb +16 -1
- data/lib/evil_events/core/events/abstract_event.rb +2 -0
- data/lib/evil_events/core/events/event_extensions/class_signature/signature.rb +1 -1
- data/lib/evil_events/core/events/event_extensions/class_signature.rb +1 -1
- data/lib/evil_events/core/events/event_extensions/emittable.rb +29 -0
- data/lib/evil_events/core/events/event_extensions/hookable/abstract_hook.rb +27 -0
- data/lib/evil_events/core/events/event_extensions/hookable/after_emit_hook.rb +11 -0
- data/lib/evil_events/core/events/event_extensions/hookable/before_emit_hook.rb +11 -0
- data/lib/evil_events/core/events/event_extensions/hookable/on_error_hook.rb +16 -0
- data/lib/evil_events/core/events/event_extensions/hookable.rb +93 -0
- data/lib/evil_events/core/events/event_extensions/type_aliasing.rb +6 -12
- data/lib/evil_events/core/events/event_factory.rb +4 -4
- data/lib/evil_events/core/events/manager.rb +14 -12
- data/lib/evil_events/core/events/manager_factory.rb +2 -7
- data/lib/evil_events/core/events/manager_registry.rb +8 -15
- data/lib/evil_events/core/events/notifier/abstract.rb +26 -0
- data/lib/evil_events/core/events/notifier/builder.rb +43 -0
- data/lib/evil_events/core/events/notifier/logging.rb +43 -0
- data/lib/evil_events/core/events/notifier/proxy.rb +33 -0
- data/lib/evil_events/core/events/notifier/sequential.rb +41 -0
- data/lib/evil_events/core/events/notifier/worker/executor.rb +102 -0
- data/lib/evil_events/core/events/notifier/worker/job.rb +35 -0
- data/lib/evil_events/core/events/notifier/worker.rb +71 -0
- data/lib/evil_events/core/events/notifier.rb +6 -0
- data/lib/evil_events/core/events/serializers/hash.rb +9 -7
- data/lib/evil_events/core/events/serializers/json.rb +11 -6
- data/lib/evil_events/core/events/serializers.rb +0 -7
- data/lib/evil_events/core/events/subscriber/mixin.rb +2 -2
- data/lib/evil_events/core/events.rb +14 -1
- data/lib/evil_events/core/system/broadcaster.rb +23 -1
- data/lib/evil_events/core/system/mock.rb +7 -0
- data/lib/evil_events/core/system.rb +3 -1
- data/lib/evil_events/core.rb +0 -1
- data/lib/evil_events/error.rb +96 -0
- data/lib/evil_events/plugins/{rails.rb → redis_adapter.rb} +2 -2
- data/lib/evil_events/plugins/{elastic_search.rb → sidekiq_adapter.rb} +2 -2
- data/lib/evil_events/plugins.rb +15 -13
- data/lib/evil_events/shared/extensions_mixin.rb +7 -0
- data/lib/evil_events/shared/type_converter/converter_registry.rb +2 -2
- data/lib/evil_events/shared.rb +1 -0
- data/lib/evil_events/version.rb +1 -1
- data/lib/evil_events.rb +1 -0
- metadata +27 -12
- data/lib/evil_events/core/error.rb +0 -8
- data/lib/evil_events/core/events/manager/notifier.rb +0 -79
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Core::Events::Notifier
|
4
|
+
# @api private
|
5
|
+
# @sicne 0.3.0
|
6
|
+
module Builder
|
7
|
+
class << self
|
8
|
+
# @raise EvilEvents::UnknownNotifierTypeError
|
9
|
+
# @return [Notifier::Abstract, Notifier::Sequential, Notifier::Worker]
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
# @since 0.3.0
|
13
|
+
def build_notifier!
|
14
|
+
case EvilEvents::Core::Bootstrap[:config].notifier.type
|
15
|
+
when :sequential then build_sequential_notifier!
|
16
|
+
when :worker then build_worker_notifier!
|
17
|
+
else
|
18
|
+
raise EvilEvents::UnknownNotifierTypeError
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# @return [Notifier::Sequential]
|
25
|
+
#
|
26
|
+
# @api private
|
27
|
+
# @since 0.3.0
|
28
|
+
def build_sequential_notifier!
|
29
|
+
options = EvilEvents::Core::Bootstrap[:config].notifier.sequential.to_h
|
30
|
+
Sequential.new(**options)
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [Notifier::Worker]
|
34
|
+
#
|
35
|
+
# @api private
|
36
|
+
# @since 0.3.0
|
37
|
+
def build_worker_notifier!
|
38
|
+
options = EvilEvents::Core::Bootstrap[:config].notifier.worker.to_h
|
39
|
+
Worker.new(**options)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.3.0
|
5
|
+
module EvilEvents::Core::Events::Notifier::Logging
|
6
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
7
|
+
# @param subscriber [EvilEvents::Core::Events::Subscriber]
|
8
|
+
# @return void
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
# @since 0.3.0
|
12
|
+
def log_failure(event, subscriber)
|
13
|
+
log_activity(event, subscriber, :failed)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
17
|
+
# @param subscriber [EvilEvents::Core::Events::Subscriber]
|
18
|
+
# @return void
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
# @since 0.3.0
|
22
|
+
def log_success(event, subscriber)
|
23
|
+
log_activity(event, subscriber, :successful)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
29
|
+
# @param subscriber [EvilEvents::Core::Events::Subscriber]
|
30
|
+
# @param status [String, Symbol]
|
31
|
+
# @return void
|
32
|
+
#
|
33
|
+
# @api private
|
34
|
+
# @since 0.3.0
|
35
|
+
def log_activity(event, subscriber, status)
|
36
|
+
activity = "EventProcessed(#{event.type})"
|
37
|
+
message = "EVENT_ID: #{event.id} :: " \
|
38
|
+
"STATUS: #{status} :: " \
|
39
|
+
"SUBSCRIBER: #{subscriber.source_object}"
|
40
|
+
|
41
|
+
EvilEvents::Core::ActivityLogger.log(activity: activity, message: message)
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.3.0
|
5
|
+
class EvilEvents::Core::Events::Notifier::Proxy
|
6
|
+
# @since 0.3.0
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
# @since 0.3.0
|
10
|
+
def_delegators :notifier, :shutdown!, :restart!, :notify
|
11
|
+
|
12
|
+
# @return [Mutex]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
# @since 0.3.0
|
16
|
+
attr_reader :initialization_mutex
|
17
|
+
|
18
|
+
# @api private
|
19
|
+
# @since 0.3.0
|
20
|
+
def initialize
|
21
|
+
@initialization_mutex = Mutex.new
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Abstract, Sequential, Worker]
|
25
|
+
#
|
26
|
+
# @api private
|
27
|
+
# @since 0.3.0
|
28
|
+
def notifier
|
29
|
+
initialization_mutex.synchronize do
|
30
|
+
@notifier ||= EvilEvents::Core::Events::Notifier::Builder.build_notifier!
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Core::Events::Notifier
|
4
|
+
# @api private
|
5
|
+
# @since 0.3.0
|
6
|
+
class Sequential < Abstract
|
7
|
+
# @since 0.3.0
|
8
|
+
include Logging
|
9
|
+
|
10
|
+
# @param manager [EvilEvents::Core::Events::Manager]
|
11
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
12
|
+
# @raise [EvilEvents::FailedNotifiedSubscribersError]
|
13
|
+
# @return void
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
# @since 0.3.0
|
17
|
+
def notify(manager, event)
|
18
|
+
errors_stack = EvilEvents::FailedNotifiedSubscribersError.new
|
19
|
+
|
20
|
+
event.__call_before_hooks__
|
21
|
+
|
22
|
+
manager.subscribers.each do |subscriber|
|
23
|
+
begin
|
24
|
+
subscriber.notify(event)
|
25
|
+
|
26
|
+
log_success(event, subscriber)
|
27
|
+
rescue StandardError => error
|
28
|
+
event.__call_on_error_hooks__(error)
|
29
|
+
|
30
|
+
errors_stack << error
|
31
|
+
|
32
|
+
log_failure(event, subscriber)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
event.__call_after_hooks__
|
37
|
+
|
38
|
+
raise errors_stack unless errors_stack.empty?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# since 0.3.0
|
5
|
+
class EvilEvents::Core::Events::Notifier::Worker::Executor
|
6
|
+
# @since 0.3.0
|
7
|
+
include EvilEvents::Core::Events::Notifier::Logging
|
8
|
+
|
9
|
+
# @api public
|
10
|
+
# @since 0.3.0
|
11
|
+
FALLBACK_POLICIES = {
|
12
|
+
exception: :abort,
|
13
|
+
ignorance: :discard,
|
14
|
+
main_thread: :caller_runs
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
# @return [Concurrent::ThreadPoolExecutor]
|
18
|
+
#
|
19
|
+
# @api private
|
20
|
+
# @since 0.3.0
|
21
|
+
attr_reader :raw_executor
|
22
|
+
|
23
|
+
# @return [Hash]
|
24
|
+
#
|
25
|
+
# @api private
|
26
|
+
# @since 0.3.0
|
27
|
+
attr_reader :options
|
28
|
+
|
29
|
+
# @option min_threads [Integer]
|
30
|
+
# @option max_threads [Integer]
|
31
|
+
# @option max_queue [Integer]
|
32
|
+
# @option fallback_policy [Symbol]
|
33
|
+
# @raise [EvilEvents::IncorrectFallbackPolicyError]
|
34
|
+
#
|
35
|
+
# @api private
|
36
|
+
# @since 0.3.0
|
37
|
+
def initialize(min_threads:, max_threads:, max_queue:, fallback_policy:)
|
38
|
+
raise EvilEvents::IncorrectFallbackPolicyError unless FALLBACK_POLICIES[fallback_policy]
|
39
|
+
|
40
|
+
@options = {
|
41
|
+
min_threads: min_threads,
|
42
|
+
max_threads: max_threads,
|
43
|
+
max_queue: max_queue,
|
44
|
+
fallback_policy: FALLBACK_POLICIES[fallback_policy]
|
45
|
+
}.freeze
|
46
|
+
|
47
|
+
initialize_raw_executor!(**@options)
|
48
|
+
end
|
49
|
+
|
50
|
+
# @param job [EvilEvents::Core::Events::Notifier::Job]
|
51
|
+
# @raise [EvilEvents::WorkerDisabledOrBusyError]
|
52
|
+
# @return [Concurrent::Promise]
|
53
|
+
#
|
54
|
+
# @api private
|
55
|
+
# @sicne 0.3.0
|
56
|
+
# rubocop:disable Metrics/AbcSize, Style/MultilineBlockChain
|
57
|
+
def execute(job)
|
58
|
+
Concurrent::Promise.new(executor: raw_executor) do
|
59
|
+
job.perform
|
60
|
+
end.on_success do
|
61
|
+
log_success(job.event, job.subscriber)
|
62
|
+
end.on_error do |error|
|
63
|
+
job.event.__call_on_error_hooks__(error)
|
64
|
+
log_failure(job.event, job.subscriber)
|
65
|
+
end.execute
|
66
|
+
rescue Concurrent::RejectedExecutionError
|
67
|
+
raise EvilEvents::WorkerDisabledOrBusyError
|
68
|
+
end
|
69
|
+
# rubocop:enable Metrics/AbcSize, Style/MultilineBlockChain
|
70
|
+
|
71
|
+
# @return void
|
72
|
+
#
|
73
|
+
# @api private
|
74
|
+
# @since 0.3.0
|
75
|
+
def shutdown!
|
76
|
+
raw_executor.shutdown
|
77
|
+
raw_executor.wait_for_termination
|
78
|
+
end
|
79
|
+
|
80
|
+
# @return void
|
81
|
+
#
|
82
|
+
# @api private
|
83
|
+
# @since 0.3.0
|
84
|
+
def restart!
|
85
|
+
shutdown!
|
86
|
+
initialize_raw_executor!(**options)
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
# @option min_threads [Integer]
|
92
|
+
# @option max_threads [Integer]
|
93
|
+
# @option max_queue [Integer]
|
94
|
+
# @option fallback_policy [Symbol]
|
95
|
+
# @return [Concurrent::ThreadPoolExecutor]
|
96
|
+
#
|
97
|
+
# @api private
|
98
|
+
# @since 0.3.0
|
99
|
+
def initialize_raw_executor!(**options)
|
100
|
+
@raw_executor = Concurrent::ThreadPoolExecutor.new(**options)
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# since 0.3.0
|
5
|
+
class EvilEvents::Core::Events::Notifier::Worker::Job
|
6
|
+
# @return [EvilEvents::Core::Events::Subscriber]
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
# @since 0.3.0
|
10
|
+
attr_reader :subscriber
|
11
|
+
|
12
|
+
# @return [EvilEvents::Core::Events::AbstractEvent]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
# @since 0.3.0
|
16
|
+
attr_reader :event
|
17
|
+
|
18
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
19
|
+
# @param subscriber [EvilEvents::Core::Events::Subscriber]
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
# @since 0.3.0
|
23
|
+
def initialize(event, subscriber)
|
24
|
+
@event = event
|
25
|
+
@subscriber = subscriber
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return void
|
29
|
+
#
|
30
|
+
# @api private
|
31
|
+
# @since 0.3.0
|
32
|
+
def perform
|
33
|
+
subscriber.notify(event)
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Core::Events::Notifier
|
4
|
+
# @api private
|
5
|
+
# @since 0.3.0
|
6
|
+
class Worker < Abstract
|
7
|
+
# @since 0.3.0
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
# @api public
|
11
|
+
# @since 0.3.0
|
12
|
+
MAIN_THREAD_POLICY = :main_thread
|
13
|
+
|
14
|
+
# @api public
|
15
|
+
# @since 0.3.0
|
16
|
+
IGNORANCE_POLICY = :ignorance
|
17
|
+
|
18
|
+
# @api public
|
19
|
+
# @since 0.3.0
|
20
|
+
EXCEPTION_POLICY = :exception
|
21
|
+
|
22
|
+
# @since 0.3.0
|
23
|
+
def_delegators :executor, :shutdown!, :restart!
|
24
|
+
|
25
|
+
# @return [EvilEvents::Core::Events::Notifier::Worker::Executor]
|
26
|
+
#
|
27
|
+
# @api private
|
28
|
+
# @since 0.3.0
|
29
|
+
attr_reader :executor
|
30
|
+
|
31
|
+
# @option min_threads [Integer]
|
32
|
+
# @option max_threads [Integer]
|
33
|
+
# @option max_queue [Integer]
|
34
|
+
# @option fallback_policy [Symbol]
|
35
|
+
#
|
36
|
+
# @see EvilEvents::Core::Events::Notifier::Worker::Executor
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
# @since 0.3.0
|
40
|
+
def initialize(min_threads:, max_threads:, max_queue:, fallback_policy: MAIN_THREAD_POLICY)
|
41
|
+
@executor = Executor.new(
|
42
|
+
min_threads: min_threads,
|
43
|
+
max_threads: max_threads,
|
44
|
+
max_queue: max_queue,
|
45
|
+
fallback_policy: fallback_policy
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
# @param manager [EvilEvents::Core::Events::Manager]
|
50
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
51
|
+
#
|
52
|
+
# @api private
|
53
|
+
# @since 0.3.0
|
54
|
+
def notify(manager, event)
|
55
|
+
event.__call_before_hooks__
|
56
|
+
manager.subscribers.each { |subscriber| schedule_job(event, subscriber) }
|
57
|
+
event.__call_after_hooks__
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
63
|
+
# @param subscriber [EvilEvents::Core::Events::Subscriber]
|
64
|
+
#
|
65
|
+
# @api private
|
66
|
+
# @since 0.3.0
|
67
|
+
def schedule_job(event, subscriber)
|
68
|
+
executor.execute(Job.new(event, subscriber))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -9,12 +9,14 @@ class EvilEvents::Core::Events::Serializers
|
|
9
9
|
|
10
10
|
class << self
|
11
11
|
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
12
|
-
# @raise [SerializationError]
|
12
|
+
# @raise [EvilEvents::SerializationError]
|
13
13
|
# @return [::Hash]
|
14
14
|
#
|
15
15
|
# @since 0.1.0
|
16
16
|
def serialize(event)
|
17
|
-
|
17
|
+
unless event.is_a?(EvilEvents::Core::Events::AbstractEvent)
|
18
|
+
raise EvilEvents::SerializationError
|
19
|
+
end
|
18
20
|
|
19
21
|
{
|
20
22
|
id: event.id,
|
@@ -29,21 +31,21 @@ class EvilEvents::Core::Events::Serializers
|
|
29
31
|
# rubocop:disable Metrics/PerceivedComplexity
|
30
32
|
|
31
33
|
# @param hash [::Hash]
|
32
|
-
# @raise [DeserializationError]
|
34
|
+
# @raise [EvilEvents::DeserializationError]
|
33
35
|
# @return [EvilEvents::Core::Events::AbstractEvent]
|
34
36
|
#
|
35
37
|
# @since 0.1.0
|
36
38
|
def deserialize(hash)
|
37
|
-
raise DeserializationError unless hash.is_a?(::Hash)
|
39
|
+
raise EvilEvents::DeserializationError unless hash.is_a?(::Hash)
|
38
40
|
|
39
41
|
event_id = hash[:id] || hash['id']
|
40
42
|
event_type = hash[:type] || hash['type']
|
41
43
|
event_payload = hash[:payload] || hash['payload']
|
42
44
|
event_metadata = hash[:metadata] || hash['metadata']
|
43
45
|
|
44
|
-
raise DeserializationError unless event_type && event_payload && event_metadata
|
45
|
-
raise DeserializationError unless event_payload.is_a?(::Hash)
|
46
|
-
raise DeserializationError unless event_metadata.is_a?(::Hash)
|
46
|
+
raise EvilEvents::DeserializationError unless event_type && event_payload && event_metadata
|
47
|
+
raise EvilEvents::DeserializationError unless event_payload.is_a?(::Hash)
|
48
|
+
raise EvilEvents::DeserializationError unless event_metadata.is_a?(::Hash)
|
47
49
|
|
48
50
|
restore_event_instance(
|
49
51
|
type: event_type,
|
@@ -9,12 +9,14 @@ class EvilEvents::Core::Events::Serializers
|
|
9
9
|
|
10
10
|
class << self
|
11
11
|
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
12
|
-
# @raise [SerializationError]
|
12
|
+
# @raise [EvilEvents::SerializationError]
|
13
13
|
# @return [::Hash]
|
14
14
|
#
|
15
15
|
# @since 0.1.0
|
16
16
|
def serialize(event)
|
17
|
-
|
17
|
+
unless event.is_a?(EvilEvents::Core::Events::AbstractEvent)
|
18
|
+
raise EvilEvents::SerializationError
|
19
|
+
end
|
18
20
|
|
19
21
|
::JSON.generate(
|
20
22
|
id: event.id,
|
@@ -25,12 +27,12 @@ class EvilEvents::Core::Events::Serializers
|
|
25
27
|
end
|
26
28
|
|
27
29
|
# @param json [String]
|
28
|
-
# @raise [DeserializationError]
|
30
|
+
# @raise [EvilEvents::DeserializationError]
|
29
31
|
# @return [EvilEvents::Core::Events::AbstractEvent]
|
30
32
|
#
|
31
33
|
# @since 0.1.0
|
32
34
|
def deserialize(json)
|
33
|
-
raise DeserializationError unless json.is_a?(String)
|
35
|
+
raise EvilEvents::DeserializationError unless json.is_a?(String)
|
34
36
|
|
35
37
|
begin
|
36
38
|
json_hash = ::JSON.parse(json, symbolize_names: true)
|
@@ -38,9 +40,12 @@ class EvilEvents::Core::Events::Serializers
|
|
38
40
|
event_type = json_hash[:type]
|
39
41
|
event_payload = json_hash[:payload]
|
40
42
|
event_metadata = json_hash[:metadata]
|
41
|
-
|
43
|
+
|
44
|
+
unless event_type && event_payload && event_metadata
|
45
|
+
raise EvilEvents::DeserializationError
|
46
|
+
end
|
42
47
|
rescue ::JSON::ParserError
|
43
|
-
raise DeserializationError
|
48
|
+
raise EvilEvents::DeserializationError
|
44
49
|
end
|
45
50
|
|
46
51
|
restore_event_instance(
|
@@ -6,12 +6,5 @@ module EvilEvents::Core::Events
|
|
6
6
|
class Serializers
|
7
7
|
# @since 0.1.0
|
8
8
|
extend EvilEvents::Shared::DependencyContainer::Mixin
|
9
|
-
|
10
|
-
# @since 0.1.0
|
11
|
-
SerializersError = Class.new(EvilEvents::Core::Error)
|
12
|
-
# @since 0.1.0
|
13
|
-
SerializationError = Class.new(SerializersError)
|
14
|
-
# @since 0.1.0
|
15
|
-
DeserializationError = Class.new(SerializersError)
|
16
9
|
end
|
17
10
|
end
|
@@ -6,11 +6,11 @@ class EvilEvents::Core::Events::Subscriber
|
|
6
6
|
Mixin = EvilEvents::Shared::ClonableModuleBuilder.build do
|
7
7
|
# @param event_type [Array<String, Class{EvilEvents::Core::Events::AbstractEvent}, Regexp>]
|
8
8
|
# @param delegator [String, Symbol, NilClass]
|
9
|
-
# @raise [EvilEvents::
|
9
|
+
# @raise [EvilEvents::ArgumentError]
|
10
10
|
#
|
11
11
|
# @since 0.2.0
|
12
12
|
def subscribe_to(*event_types, delegator: nil)
|
13
|
-
raise EvilEvents::
|
13
|
+
raise EvilEvents::ArgumentError unless event_types.all? do |event_type|
|
14
14
|
event_type.is_a?(Class) ||
|
15
15
|
event_type.is_a?(String) ||
|
16
16
|
event_type.is_a?(Regexp) ||
|
@@ -21,9 +21,22 @@ module EvilEvents::Core
|
|
21
21
|
require_relative 'events/event_extensions/class_signature'
|
22
22
|
require_relative 'events/event_extensions/class_signature/signature'
|
23
23
|
require_relative 'events/event_extensions/class_signature/equalizer'
|
24
|
+
require_relative 'events/event_extensions/hookable'
|
25
|
+
require_relative 'events/event_extensions/hookable/abstract_hook'
|
26
|
+
require_relative 'events/event_extensions/hookable/after_emit_hook'
|
27
|
+
require_relative 'events/event_extensions/hookable/before_emit_hook'
|
28
|
+
require_relative 'events/event_extensions/hookable/on_error_hook'
|
29
|
+
require_relative 'events/notifier'
|
30
|
+
require_relative 'events/notifier/logging'
|
31
|
+
require_relative 'events/notifier/abstract'
|
32
|
+
require_relative 'events/notifier/sequential'
|
33
|
+
require_relative 'events/notifier/worker'
|
34
|
+
require_relative 'events/notifier/worker/executor'
|
35
|
+
require_relative 'events/notifier/worker/job'
|
36
|
+
require_relative 'events/notifier/builder'
|
37
|
+
require_relative 'events/notifier/proxy'
|
24
38
|
require_relative 'events/abstract_event'
|
25
39
|
require_relative 'events/manager'
|
26
|
-
require_relative 'events/manager/notifier'
|
27
40
|
require_relative 'events/manager/subscriber_list'
|
28
41
|
require_relative 'events/manager_factory'
|
29
42
|
require_relative 'events/manager_registry'
|
@@ -14,10 +14,16 @@ class EvilEvents::Core::System
|
|
14
14
|
# @since 0.1.0
|
15
15
|
attr_reader :adapters_container
|
16
16
|
|
17
|
+
# @return [EvilEvents::Core::Events::Notifier::Abstract]
|
18
|
+
#
|
19
|
+
# @since 0.3.0
|
20
|
+
attr_reader :event_notifier
|
21
|
+
|
17
22
|
# @since 0.1.0
|
18
23
|
def initialize
|
19
|
-
@event_emitter = EvilEvents::Core::Broadcasting::Emitter.new
|
20
24
|
@adapters_container = EvilEvents::Core::Broadcasting::Adapters.new
|
25
|
+
@event_emitter = EvilEvents::Core::Broadcasting::Emitter.new
|
26
|
+
@event_notifier = EvilEvents::Core::Events::Notifier::Proxy.new
|
21
27
|
|
22
28
|
@adapters_container.register_core_adapters!
|
23
29
|
end
|
@@ -55,5 +61,21 @@ class EvilEvents::Core::System
|
|
55
61
|
def register_adapter(adapter_name, adapter_object)
|
56
62
|
adapters_container.register(adapter_name, adapter_object)
|
57
63
|
end
|
64
|
+
|
65
|
+
# @param manager [EvilEvents::Core::Events::Manager]
|
66
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
67
|
+
# @return void
|
68
|
+
#
|
69
|
+
# @since 0.3.0
|
70
|
+
def process_event_notification(manager, event)
|
71
|
+
event_notifier.notify(manager, event)
|
72
|
+
end
|
73
|
+
|
74
|
+
# @return void
|
75
|
+
#
|
76
|
+
# @since 0.3.0
|
77
|
+
def restart_event_notifier
|
78
|
+
event_notifier.restart!
|
79
|
+
end
|
58
80
|
end
|
59
81
|
end
|
@@ -106,5 +106,12 @@ class EvilEvents::Core::System
|
|
106
106
|
# @see EvilEvents::Core::System
|
107
107
|
# @since 0.2.0
|
108
108
|
def registered_events; end
|
109
|
+
|
110
|
+
# @see EvilEvents::Core::System
|
111
|
+
# @since 0.3.0
|
112
|
+
def process_event_notification(manager, event); end
|
113
|
+
|
114
|
+
# @see EvilEvents::Core::System
|
115
|
+
def restart_event_notifier; end
|
109
116
|
end
|
110
117
|
end
|