evil_events 0.1.0rc1
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 +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
|