evil_events 0.1.0rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.rspec +3 -0
- data/.rubocop.yml +84 -0
- data/.travis.yml +10 -0
- data/.yardopts +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +17 -0
- data/Rakefile +6 -0
- data/bin/console +12 -0
- data/bin/setup +8 -0
- data/evil_events.gemspec +42 -0
- data/lib/evil_events/boot_point.rb +17 -0
- data/lib/evil_events/config.rb +30 -0
- data/lib/evil_events/core/activity_logging.rb +24 -0
- data/lib/evil_events/core/broadcasting/adapters/memory_async.rb +20 -0
- data/lib/evil_events/core/broadcasting/adapters/memory_sync.rb +20 -0
- data/lib/evil_events/core/broadcasting/adapters.rb +11 -0
- data/lib/evil_events/core/broadcasting/dispatcher/dispatchable.rb +17 -0
- data/lib/evil_events/core/broadcasting/dispatcher.rb +17 -0
- data/lib/evil_events/core/broadcasting/emitter.rb +45 -0
- data/lib/evil_events/core/broadcasting.rb +13 -0
- data/lib/evil_events/core/events/abstract_event.rb +44 -0
- data/lib/evil_events/core/events/event_class_factory.rb +54 -0
- data/lib/evil_events/core/events/event_extensions/adapter_customizable.rb +49 -0
- data/lib/evil_events/core/events/event_extensions/manageable.rb +26 -0
- data/lib/evil_events/core/events/event_extensions/observable.rb +49 -0
- data/lib/evil_events/core/events/event_extensions/payloadable/abstract_payload.rb +24 -0
- data/lib/evil_events/core/events/event_extensions/payloadable.rb +52 -0
- data/lib/evil_events/core/events/event_extensions/serializable.rb +21 -0
- data/lib/evil_events/core/events/event_extensions/type_aliasing.rb +87 -0
- data/lib/evil_events/core/events/manager/subscriber_list.rb +30 -0
- data/lib/evil_events/core/events/manager.rb +78 -0
- data/lib/evil_events/core/events/manager_factory.rb +17 -0
- data/lib/evil_events/core/events/manager_registry.rb +141 -0
- data/lib/evil_events/core/events/serializers/hash.rb +51 -0
- data/lib/evil_events/core/events/serializers/json.rb +43 -0
- data/lib/evil_events/core/events/serializers.rb +16 -0
- data/lib/evil_events/core/events/subscriber/mixin.rb +28 -0
- data/lib/evil_events/core/events/subscriber.rb +43 -0
- data/lib/evil_events/core/events.rb +25 -0
- data/lib/evil_events/core.rb +10 -0
- data/lib/evil_events/shared/combined_context.rb +113 -0
- data/lib/evil_events/shared/combined_context_mixin.rb +43 -0
- data/lib/evil_events/shared/configurable.rb +7 -0
- data/lib/evil_events/shared/delegator_resolver.rb +36 -0
- data/lib/evil_events/shared/dependency_container.rb +7 -0
- data/lib/evil_events/shared/logger.rb +13 -0
- data/lib/evil_events/shared/mockable_class_builder.rb +27 -0
- data/lib/evil_events/shared/structure.rb +7 -0
- data/lib/evil_events/shared/types.rb +9 -0
- data/lib/evil_events/shared.rb +16 -0
- data/lib/evil_events/system/mock.rb +70 -0
- data/lib/evil_events/system.rb +149 -0
- data/lib/evil_events/version.rb +7 -0
- data/lib/evil_events.rb +53 -0
- metadata +269 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::Core::Events::Subscriber
|
4
|
+
# @api public
|
5
|
+
# @since 0.1.0
|
6
|
+
module Mixin
|
7
|
+
# @since 0.1.0
|
8
|
+
SubscriberMixinError = Class.new(StandardError)
|
9
|
+
# @since 0.1.0
|
10
|
+
IncompatibleEventAttrTypeError = Class.new(SubscriberMixinError)
|
11
|
+
|
12
|
+
# @param event_type [String, Class{EvilEvents::Core::Events::AbstractEvent}]
|
13
|
+
# @param delegator [String, Symbol, NilClass]
|
14
|
+
# @raise [IncompatibleEventAttrTypeError]
|
15
|
+
#
|
16
|
+
# @since 0.1.0
|
17
|
+
def subscribe_to(event_type, delegator: nil)
|
18
|
+
case event_type
|
19
|
+
when Class
|
20
|
+
EvilEvents::BootPoint::System[:event_system].observe(event_type, self, delegator)
|
21
|
+
when String
|
22
|
+
EvilEvents::BootPoint::System[:event_system].raw_observe(event_type, self, delegator)
|
23
|
+
else
|
24
|
+
raise IncompatibleEventAttrTypeError
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Core::Events
|
4
|
+
# @api private
|
5
|
+
# @since 0.1.0
|
6
|
+
class Subscriber
|
7
|
+
# @return [EvilEvents::Shared::DelegatorResolver]
|
8
|
+
#
|
9
|
+
# @since 0.1.0
|
10
|
+
attr_reader :delegator_resolver
|
11
|
+
|
12
|
+
# @param subscriber [Object]
|
13
|
+
# @param delegator_resolver [EvilEvents::Shared::DelegatorResolver]
|
14
|
+
#
|
15
|
+
# @since 0.1.0
|
16
|
+
def initialize(subscriber, delegator_resolver)
|
17
|
+
@subscriber = subscriber
|
18
|
+
@delegator_resolver = delegator_resolver
|
19
|
+
end
|
20
|
+
|
21
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
22
|
+
# @return void
|
23
|
+
#
|
24
|
+
# @since 0.1.0
|
25
|
+
def notify(event)
|
26
|
+
source_object.public_send(delegator, event)
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Object]
|
30
|
+
#
|
31
|
+
# @since 0.1.0
|
32
|
+
def source_object
|
33
|
+
@subscriber
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [String, Symbol]
|
37
|
+
#
|
38
|
+
# @since 0.1.0
|
39
|
+
def delegator
|
40
|
+
@delegator ||= delegator_resolver.delegator
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Core
|
4
|
+
# @since 0.1.0
|
5
|
+
module Events
|
6
|
+
require_relative 'events/serializers'
|
7
|
+
require_relative 'events/serializers/hash'
|
8
|
+
require_relative 'events/serializers/json'
|
9
|
+
require_relative 'events/event_extensions/type_aliasing'
|
10
|
+
require_relative 'events/event_extensions/payloadable'
|
11
|
+
require_relative 'events/event_extensions/payloadable/abstract_payload'
|
12
|
+
require_relative 'events/event_extensions/manageable'
|
13
|
+
require_relative 'events/event_extensions/adapter_customizable'
|
14
|
+
require_relative 'events/event_extensions/observable'
|
15
|
+
require_relative 'events/event_extensions/serializable'
|
16
|
+
require_relative 'events/abstract_event'
|
17
|
+
require_relative 'events/manager'
|
18
|
+
require_relative 'events/manager/subscriber_list'
|
19
|
+
require_relative 'events/manager_factory'
|
20
|
+
require_relative 'events/manager_registry'
|
21
|
+
require_relative 'events/subscriber'
|
22
|
+
require_relative 'events/subscriber/mixin'
|
23
|
+
require_relative 'events/event_class_factory'
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents
|
4
|
+
module Shared
|
5
|
+
# @example
|
6
|
+
# class EventStorage
|
7
|
+
# attr_reader :events
|
8
|
+
#
|
9
|
+
# def initialize
|
10
|
+
# @events = []
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# def store_event(event)
|
14
|
+
# @events << event
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# storage = EventStorage.new
|
19
|
+
# event = 'test_event'
|
20
|
+
# clojure = proc { store_event(event) }
|
21
|
+
# context = EvilEvents::Shared::CombinedContext.new(storage, clojure)
|
22
|
+
#
|
23
|
+
# storage.events # => []
|
24
|
+
#
|
25
|
+
# context.evaluate
|
26
|
+
# storage.events # => ['test_event']
|
27
|
+
#
|
28
|
+
# context.evaluate
|
29
|
+
# storage.events # => ['test_event', 'test_event']
|
30
|
+
#
|
31
|
+
# @since 0.1.0
|
32
|
+
# @api public
|
33
|
+
class CombinedContext < BasicObject
|
34
|
+
# @since 0.1.0
|
35
|
+
CombinedContextError = ::Class.new(::StandardError)
|
36
|
+
# @since 0.1.0
|
37
|
+
NonProcClojureObjectError = ::Class.new(CombinedContextError)
|
38
|
+
|
39
|
+
# @return [Object]
|
40
|
+
#
|
41
|
+
# @since 0.1.0
|
42
|
+
attr_reader :__required_context__
|
43
|
+
|
44
|
+
# @return [Object]
|
45
|
+
#
|
46
|
+
# @since 0.1.0
|
47
|
+
attr_reader :__outer_context__
|
48
|
+
|
49
|
+
# @return [Proc]
|
50
|
+
#
|
51
|
+
# @since 0.1.0
|
52
|
+
attr_reader :__clojure__
|
53
|
+
|
54
|
+
# @param required_context [Object]
|
55
|
+
# @param clojure [Proc]
|
56
|
+
#
|
57
|
+
# @since 0.1.0
|
58
|
+
def initialize(required_context, clojure)
|
59
|
+
::Kernel.raise NonProcClojureObjectError unless clojure.is_a?(::Proc)
|
60
|
+
|
61
|
+
@__required_context__ = required_context
|
62
|
+
@__outer_context__ = ::Kernel.eval('self', clojure.binding)
|
63
|
+
@__clojure__ = clojure
|
64
|
+
end
|
65
|
+
|
66
|
+
# @return [Object]
|
67
|
+
#
|
68
|
+
# @see #method_missing
|
69
|
+
#
|
70
|
+
# @since 0.1.0
|
71
|
+
def evaluate
|
72
|
+
instance_eval(&__clojure__)
|
73
|
+
end
|
74
|
+
|
75
|
+
# @see #evaluate
|
76
|
+
#
|
77
|
+
# @since 0.1.0
|
78
|
+
def method_missing(method_name, *arguments, &block)
|
79
|
+
case
|
80
|
+
when __outer_context__.respond_to?(method_name)
|
81
|
+
__outer_context__.public_send(method_name, *arguments, &block)
|
82
|
+
when __required_context__.respond_to?(method_name)
|
83
|
+
__required_context__.public_send(method_name, *arguments, &block)
|
84
|
+
else
|
85
|
+
super
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# @see #method_missing
|
90
|
+
#
|
91
|
+
# @since 0.1.0
|
92
|
+
def respond_to_missing?(method_name, include_private = false)
|
93
|
+
__outer_context__.respond_to?(method_name) ||
|
94
|
+
__required_context__.respond_to?(method_name) || super
|
95
|
+
end
|
96
|
+
|
97
|
+
# @see #method_missing
|
98
|
+
# @see #respond_to_missing?
|
99
|
+
#
|
100
|
+
# @since 0.1.0
|
101
|
+
def method(method_name)
|
102
|
+
case
|
103
|
+
when __outer_context__.respond_to?(method_name)
|
104
|
+
__outer_context__.method(method_name)
|
105
|
+
when __required_context__.respond_to?(method_name)
|
106
|
+
__required_context__.method(method_name)
|
107
|
+
else
|
108
|
+
super
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents
|
4
|
+
module Shared
|
5
|
+
# @example
|
6
|
+
# require 'securerandom'
|
7
|
+
#
|
8
|
+
# class Event
|
9
|
+
# extend EvilEvents::Shared::CombinedContextMixin
|
10
|
+
#
|
11
|
+
# class << self
|
12
|
+
# def type(type = nil)
|
13
|
+
# @type = type if type
|
14
|
+
# @type
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# def get_uuid
|
20
|
+
# SecureRandom.uuid
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# MyEvent = Event.evaluate do
|
24
|
+
# type get_uuid # Event.type + binding#get_uuid => works good :)
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# @see EvilEvents::Shared::CombinedContext
|
28
|
+
#
|
29
|
+
# @since 0.1.0
|
30
|
+
# @api public
|
31
|
+
module CombinedContextMixin
|
32
|
+
# @param clojure [Proc]
|
33
|
+
# @return [Object] Clojure evaluation result
|
34
|
+
#
|
35
|
+
# @see EvilEvents::Shared::CombinedContext#evaluate
|
36
|
+
#
|
37
|
+
# @since 0.1.0
|
38
|
+
def evaluate(&clojure)
|
39
|
+
CombinedContext.new(self, clojure).evaluate
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Shared
|
4
|
+
# @example
|
5
|
+
# DelegatorResolver.new(-> { 'test' }).delegator # => 'test'
|
6
|
+
# DelegatorResolver.new('test') # => InvalidProcAttributeError
|
7
|
+
#
|
8
|
+
# @since 0.1.0
|
9
|
+
# @api public
|
10
|
+
class DelegatorResolver
|
11
|
+
# @since 0.1.0
|
12
|
+
DelegatorResolverError = Class.new(StandardError)
|
13
|
+
# @since 0.1.0
|
14
|
+
InvalidProcAttributeError = Class.new(DelegatorResolverError)
|
15
|
+
|
16
|
+
# @return [Proc]
|
17
|
+
#
|
18
|
+
# @since 0.1.0
|
19
|
+
attr_reader :method_name_resolver
|
20
|
+
|
21
|
+
# @param method_name_resolver [Proc]
|
22
|
+
#
|
23
|
+
# @since 0.1.0
|
24
|
+
def initialize(method_name_resolver)
|
25
|
+
raise InvalidProcAttributeError unless method_name_resolver.is_a?(Proc)
|
26
|
+
@method_name_resolver = method_name_resolver
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [String, Symbol]
|
30
|
+
#
|
31
|
+
# @since 0.1.0
|
32
|
+
def delegator
|
33
|
+
@delegator ||= method_name_resolver.call
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Shared
|
4
|
+
# @api public
|
5
|
+
# @since 0.1.0
|
6
|
+
module MockableClassBuilder
|
7
|
+
class << self
|
8
|
+
# @param class_definitions [Proc]
|
9
|
+
# @return [Class]
|
10
|
+
#
|
11
|
+
# @since 0.1.0
|
12
|
+
def new_class(&class_definitions)
|
13
|
+
Class.new.tap do |klass|
|
14
|
+
klass.class_eval(&class_definitions) if block_given?
|
15
|
+
|
16
|
+
klass.singleton_class.class_eval do
|
17
|
+
define_method :build_mock do
|
18
|
+
::Class.new.tap do |mocking_class|
|
19
|
+
mocking_class.class_eval(&class_definitions)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents
|
4
|
+
# @since 0.1.0
|
5
|
+
module Shared
|
6
|
+
require_relative 'shared/mockable_class_builder'
|
7
|
+
require_relative 'shared/logger'
|
8
|
+
require_relative 'shared/configurable'
|
9
|
+
require_relative 'shared/dependency_container'
|
10
|
+
require_relative 'shared/structure'
|
11
|
+
require_relative 'shared/types'
|
12
|
+
require_relative 'shared/combined_context'
|
13
|
+
require_relative 'shared/combined_context_mixin'
|
14
|
+
require_relative 'shared/delegator_resolver'
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api public
|
4
|
+
# @since 0.1.0
|
5
|
+
class EvilEvents::System
|
6
|
+
# @see EvilEvents::System
|
7
|
+
# @api public
|
8
|
+
# @since 0.1.0
|
9
|
+
class Mock
|
10
|
+
# @see EvilEvents::System
|
11
|
+
# @since 0.1.0
|
12
|
+
attr_reader :event_emitter
|
13
|
+
|
14
|
+
# @see EvilEvents::System
|
15
|
+
# @since 0.1.0
|
16
|
+
attr_reader :manager_registry
|
17
|
+
|
18
|
+
# @see EvilEvents::System
|
19
|
+
# @since 0.1.0
|
20
|
+
def observe(event_class, raw_subscriber, delegator); end
|
21
|
+
|
22
|
+
# @see EvilEvents::System
|
23
|
+
# @since 0.1.0
|
24
|
+
def raw_observe(event_type, raw_subscriber, delegator); end
|
25
|
+
|
26
|
+
# @see EvilEvents::System
|
27
|
+
# @since 0.1.0
|
28
|
+
def observers(event_class); end
|
29
|
+
|
30
|
+
# @see EvilEvents::System
|
31
|
+
# @since 0.1.0
|
32
|
+
def emit(event); end
|
33
|
+
|
34
|
+
# @see EvilEvents::System
|
35
|
+
# @since 0.1.0
|
36
|
+
def raw_emit(event_type, **event_attributes); end
|
37
|
+
|
38
|
+
# @see EvilEvents::System
|
39
|
+
# @since 0.1.0
|
40
|
+
def resolve_adapter(adapter_name); end
|
41
|
+
|
42
|
+
# @see EvilEvents::System
|
43
|
+
# @since 0.1.0
|
44
|
+
def register_event_class(event_class); end
|
45
|
+
|
46
|
+
# @see EvilEvents::System
|
47
|
+
# @since 0.1.0
|
48
|
+
def unregister_event_class(event_class); end
|
49
|
+
|
50
|
+
# @see EvilEvents::System
|
51
|
+
# @since 0.1.0
|
52
|
+
def manager_of(event); end
|
53
|
+
|
54
|
+
# @see EvilEvents::System
|
55
|
+
# @since 0.1.0
|
56
|
+
def manager_of_event_type(event_type); end
|
57
|
+
|
58
|
+
# @see EvilEvents::System
|
59
|
+
# @since 0.1.0
|
60
|
+
def resolve_event_object(event_type, **event_attributes); end
|
61
|
+
|
62
|
+
# @see EvilEvents::System
|
63
|
+
# @since 0.1.0
|
64
|
+
def define_event_class(event_type, &event_class_definitions); end
|
65
|
+
|
66
|
+
# @see EvilEvents::System
|
67
|
+
# @since 0.1.0
|
68
|
+
def define_abstract_event_class(event_type); end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.1.0
|
5
|
+
class EvilEvents::System
|
6
|
+
class << self
|
7
|
+
# @return [EvilEvents::System::Mock]
|
8
|
+
#
|
9
|
+
# @since 0.1.0
|
10
|
+
def build_mock
|
11
|
+
Mock.new
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [EvilEvents::System]
|
15
|
+
#
|
16
|
+
# @since 0.1.0
|
17
|
+
def build_stub
|
18
|
+
new
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# @since 0.1.0
|
23
|
+
attr_reader :event_emitter
|
24
|
+
|
25
|
+
# @since 0.1.0
|
26
|
+
attr_reader :manager_registry
|
27
|
+
|
28
|
+
# @since 0.1.0
|
29
|
+
def initialize
|
30
|
+
@manager_registry = EvilEvents::Core::Events::ManagerRegistry.new
|
31
|
+
@event_emitter = EvilEvents::Core::Broadcasting::Emitter.new
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param event_class [Class{Evilevents::Core::Events::AbstractEvent}]
|
35
|
+
# @param raw_subscriber [Object]
|
36
|
+
# @param delegator [String, Symbol, NilClass]
|
37
|
+
# @return void
|
38
|
+
#
|
39
|
+
# @since 0.1.0
|
40
|
+
def observe(event_class, raw_subscriber, delegator)
|
41
|
+
manager_registry.manager_of_event(event_class)
|
42
|
+
.observe(raw_subscriber, delegator)
|
43
|
+
end
|
44
|
+
|
45
|
+
# @param event_type [String, Symbol]
|
46
|
+
# @param raw_subscriber [Object]
|
47
|
+
# @param delegator [String, Symbol, NilClass]
|
48
|
+
# @return void
|
49
|
+
#
|
50
|
+
# @since 0.1.0
|
51
|
+
def raw_observe(event_type, raw_subscriber, delegator)
|
52
|
+
manager_registry.manager_of_event_type(event_type)
|
53
|
+
.observe(raw_subscriber, delegator)
|
54
|
+
end
|
55
|
+
|
56
|
+
# @param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]
|
57
|
+
# @return [Array<EvilEvents::Core::Events::Subscriber>]
|
58
|
+
#
|
59
|
+
# @since 0.1.0
|
60
|
+
def observers(event_class)
|
61
|
+
manager_registry.manager_of_event(event_class).subscribers
|
62
|
+
end
|
63
|
+
|
64
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
65
|
+
# @return void
|
66
|
+
#
|
67
|
+
# @since 0.1.0
|
68
|
+
def emit(event)
|
69
|
+
event_emitter.emit(event)
|
70
|
+
end
|
71
|
+
|
72
|
+
# @param event_type [String]
|
73
|
+
# @param event_attributes [Hash]
|
74
|
+
# @return void
|
75
|
+
#
|
76
|
+
# @since 0.1.0
|
77
|
+
def raw_emit(event_type, **event_attributes)
|
78
|
+
event_emitter.raw_emit(event_type, **event_attributes)
|
79
|
+
end
|
80
|
+
|
81
|
+
# @param adapter_name [Symbol, String]
|
82
|
+
# @return [EvilEvents::Core::Broadcasting::Dispatcher::Dispatchable]
|
83
|
+
#
|
84
|
+
# @since 0.1.0
|
85
|
+
def resolve_adapter(adapter_name)
|
86
|
+
EvilEvents::Core::Broadcasting::Adapters.resolve(adapter_name)
|
87
|
+
end
|
88
|
+
|
89
|
+
# @param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]
|
90
|
+
# @return void
|
91
|
+
#
|
92
|
+
# @since 0.1.0
|
93
|
+
def register_event_class(event_class)
|
94
|
+
manager_registry.register_with(event_class)
|
95
|
+
end
|
96
|
+
|
97
|
+
# @param event_class [Class{EvilEvents::Core::events::AbstractEvent}]
|
98
|
+
# @return void
|
99
|
+
#
|
100
|
+
# @since 0.1.0
|
101
|
+
def unregister_event_class(event_class)
|
102
|
+
manager_registry.unregister_with(event_class)
|
103
|
+
end
|
104
|
+
|
105
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
106
|
+
# @return [EvilEvents::Core::Events::Manager]
|
107
|
+
#
|
108
|
+
# @since 0.1.0
|
109
|
+
def manager_of_event(event)
|
110
|
+
manager_registry.manager_of_event(event.class)
|
111
|
+
end
|
112
|
+
|
113
|
+
# @param event_type [String]
|
114
|
+
# @return [EvilEvents::Core::Events::Manager]
|
115
|
+
#
|
116
|
+
# @since 0.1.0
|
117
|
+
def manager_of_event_type(event_type)
|
118
|
+
manager_registry.manager_of_event_type(event_type)
|
119
|
+
end
|
120
|
+
|
121
|
+
# @param event_type [String]
|
122
|
+
# @param event_attributes [Hash]
|
123
|
+
# @return [EvilEvents::Core::Events::AbstractEvent]
|
124
|
+
#
|
125
|
+
# @since 0.1.0
|
126
|
+
def resolve_event_object(event_type, **event_attributes)
|
127
|
+
manager_of_event_type(event_type).event_class.new(**event_attributes)
|
128
|
+
end
|
129
|
+
|
130
|
+
# @param event_class_definitions [Proc]
|
131
|
+
# @return [Class{EvilEvents::Core::Events::AbstractEvent}]
|
132
|
+
#
|
133
|
+
# @since 0.1.0
|
134
|
+
def define_event_class(event_type, &event_class_definitions)
|
135
|
+
EvilEvents::Core::Events::EventClassFactory.create(
|
136
|
+
event_type, &event_class_definitions
|
137
|
+
)
|
138
|
+
end
|
139
|
+
|
140
|
+
# @param event_type [String]
|
141
|
+
# @return [Class{EvilEvents::Core::Events::AbstractEvent}]
|
142
|
+
#
|
143
|
+
# @since 0.1.0
|
144
|
+
def define_abstract_event_class(event_type)
|
145
|
+
EvilEvents::Core::Events::EventClassFactory.create_abstract(
|
146
|
+
event_type
|
147
|
+
)
|
148
|
+
end
|
149
|
+
end
|
data/lib/evil_events.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry-configurable'
|
4
|
+
require 'dry-container'
|
5
|
+
require 'dry-struct'
|
6
|
+
require 'dry-types'
|
7
|
+
require 'concurrent'
|
8
|
+
require 'logger'
|
9
|
+
require 'json'
|
10
|
+
|
11
|
+
# @api public
|
12
|
+
# @since 0.1.0
|
13
|
+
module EvilEvents
|
14
|
+
require_relative 'evil_events/shared'
|
15
|
+
require_relative 'evil_events/core'
|
16
|
+
require_relative 'evil_events/system'
|
17
|
+
require_relative 'evil_events/system/mock'
|
18
|
+
require_relative 'evil_events/config'
|
19
|
+
require_relative 'evil_events/boot_point'
|
20
|
+
require_relative 'evil_events/version'
|
21
|
+
|
22
|
+
# @since 0.1.0
|
23
|
+
Types = Shared::Types
|
24
|
+
|
25
|
+
class << self
|
26
|
+
# @see EvilEvents::System
|
27
|
+
# @api public
|
28
|
+
# @since 0.1.0
|
29
|
+
def [](event_type)
|
30
|
+
EvilEvents::BootPoint::System[:event_system].define_abstract_event_class(
|
31
|
+
event_type
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
# @see EvilEvents::System
|
36
|
+
# @api public
|
37
|
+
# @since 0.1.0
|
38
|
+
def define_event(event_type, &event_class_definitions)
|
39
|
+
EvilEvents::BootPoint::System[:event_system].define_event_class(
|
40
|
+
event_type, &event_class_definitions
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
# @see EvilEvents::System
|
45
|
+
# @api public
|
46
|
+
# @since 0.1.0
|
47
|
+
def emit(event_type, **event_attributes)
|
48
|
+
EvilEvents::BootPoint::System[:event_system].raw_emit(
|
49
|
+
event_type, **event_attributes
|
50
|
+
)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|