evil_events 0.1.0rc1 → 0.1.0rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/CHANGELOG.md +2 -0
- data/README.md +4 -2
- data/evil_events.gemspec +9 -7
- data/lib/evil_events/boot_point.rb +4 -8
- data/lib/evil_events/config.rb +7 -0
- data/lib/evil_events/core/activity_logging.rb +2 -2
- data/lib/evil_events/core/broadcasting/adapters/memory_async.rb +13 -8
- data/lib/evil_events/core/broadcasting/adapters/memory_sync.rb +11 -9
- data/lib/evil_events/core/broadcasting/adapters.rb +2 -2
- data/lib/evil_events/core/broadcasting/dispatcher/{dispatchable.rb → mixin.rb} +1 -1
- data/lib/evil_events/core/broadcasting/dispatcher.rb +1 -1
- data/lib/evil_events/core/broadcasting/emitter.rb +10 -2
- data/lib/evil_events/core/broadcasting.rb +1 -1
- data/lib/evil_events/core/events/abstract_event.rb +4 -1
- data/lib/evil_events/core/events/event_class_factory.rb +8 -12
- data/lib/evil_events/core/events/event_extensions/adapter_customizable.rb +2 -2
- data/lib/evil_events/core/events/event_extensions/emittable.rb +12 -0
- data/lib/evil_events/core/events/event_extensions/manageable.rb +1 -1
- data/lib/evil_events/core/events/event_extensions/observable.rb +3 -3
- data/lib/evil_events/core/events/event_extensions/payloadable.rb +1 -1
- data/lib/evil_events/core/events/event_extensions/serializable.rb +2 -0
- data/lib/evil_events/core/events/manager_factory.rb +10 -0
- data/lib/evil_events/core/events/serializers/hash.rb +1 -1
- data/lib/evil_events/core/events/serializers/json.rb +1 -1
- data/lib/evil_events/core/events/subscriber/mixin.rb +2 -2
- data/lib/evil_events/core/events/subscriber.rb +11 -1
- data/lib/evil_events/core/events.rb +1 -0
- data/lib/evil_events/core.rb +1 -0
- data/lib/evil_events/shared/combined_context.rb +2 -0
- data/lib/evil_events/shared/logger.rb +1 -1
- data/lib/evil_events/shared.rb +6 -5
- data/lib/evil_events/system/broadcaster.rb +42 -0
- data/lib/evil_events/system/event_builder.rb +30 -0
- data/lib/evil_events/system/event_manager.rb +95 -0
- data/lib/evil_events/system/mock.rb +7 -3
- data/lib/evil_events/system/mocking.rb +33 -0
- data/lib/evil_events/system.rb +34 -125
- data/lib/evil_events/version.rb +1 -1
- data/lib/evil_events.rb +5 -5
- metadata +37 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a6c5ea4454784cde26a98119cba57b5d593b38a
|
4
|
+
data.tar.gz: f6966cb8fa6f63a8a81185ebb7ed27135325972b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5318459757e376efd82ab5a05bead86551b44b18948348523123777fe42a237f8d069e7fa79a19e4cb78a034c85b1be45d758e53a8dc7b261362f86cbfeb6c3f
|
7
|
+
data.tar.gz: 384d7919a39d38a2998cc2663c14ec6ff453c6012668eae704321d4a1a1bfae413f44c585d263a295b091fa4d948c4cf0dc43b536ea74419ea8332d5674f8a73
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# EvilEvents - powerful event system for ruby applications
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/evil_events.svg)](https://badge.fury.io/rb/evil_events)
|
4
|
+
[![Build Status](https://travis-ci.org/ergosploit/evil_events.svg?branch=master)](https://travis-ci.org/ergosploit/evil_events)
|
5
|
+
[![Coverage Status](https://coveralls.io/repos/github/ergosploit/evil_events/badge.svg?branch=master)](https://coveralls.io/github/ergosploit/evil_events?branch=master)
|
4
6
|
|
5
|
-
|
7
|
+
NOTE: Work in progress!
|
6
8
|
|
7
|
-
###
|
9
|
+
### ROADMAP
|
8
10
|
- Full test coverage (0.1.0)
|
9
11
|
- Basic documentation (README) (0.1.0)
|
10
12
|
- FULL documentation (0.2.1)
|
data/evil_events.gemspec
CHANGED
@@ -32,11 +32,13 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_dependency 'dry-container', '0.6.0'
|
33
33
|
spec.add_dependency 'concurrent-ruby', '1.0.5'
|
34
34
|
|
35
|
-
spec.add_development_dependency '
|
36
|
-
spec.add_development_dependency '
|
37
|
-
spec.add_development_dependency '
|
38
|
-
spec.add_development_dependency '
|
39
|
-
spec.add_development_dependency '
|
40
|
-
spec.add_development_dependency '
|
41
|
-
spec.add_development_dependency '
|
35
|
+
spec.add_development_dependency 'coveralls', '0.7.2'
|
36
|
+
spec.add_development_dependency 'pry', '0.11.1'
|
37
|
+
spec.add_development_dependency 'simplecov', '0.15.1'
|
38
|
+
spec.add_development_dependency 'simplecov-json', '0.2'
|
39
|
+
spec.add_development_dependency 'rubocop', '0.50.0'
|
40
|
+
spec.add_development_dependency 'bundler', '1.15.4'
|
41
|
+
spec.add_development_dependency 'rake', '12.1.0'
|
42
|
+
spec.add_development_dependency 'rspec', '3.6.0'
|
43
|
+
spec.add_development_dependency 'rubocop-rspec', '1.18.0'
|
42
44
|
end
|
@@ -3,15 +3,11 @@
|
|
3
3
|
module EvilEvents
|
4
4
|
# @api private
|
5
5
|
# @since 0.1.0
|
6
|
-
|
7
|
-
# @api private
|
6
|
+
class BootPoint
|
8
7
|
# @since 0.1.0
|
9
|
-
|
10
|
-
# @since 0.1.0
|
11
|
-
extend Shared::DependencyContainer::Mixin
|
8
|
+
extend Shared::DependencyContainer::Mixin
|
12
9
|
|
13
|
-
|
14
|
-
|
15
|
-
end
|
10
|
+
register(:event_system, memoize: true) { EvilEvents::System.new }
|
11
|
+
register(:config) { EvilEvents::Config }
|
16
12
|
end
|
17
13
|
end
|
data/lib/evil_events/config.rb
CHANGED
@@ -9,7 +9,7 @@ module EvilEvents::Core
|
|
9
9
|
# @return void
|
10
10
|
#
|
11
11
|
# @since 0.1.0
|
12
|
-
def log_activity(activity
|
12
|
+
def log_activity(activity: nil, message: nil)
|
13
13
|
progname = "[EvilEvents:#{activity}]"
|
14
14
|
activity_logger.add(activity_logger.level, message, progname)
|
15
15
|
end
|
@@ -18,7 +18,7 @@ module EvilEvents::Core
|
|
18
18
|
#
|
19
19
|
# @since 0.1.0
|
20
20
|
def activity_logger
|
21
|
-
EvilEvents::BootPoint
|
21
|
+
EvilEvents::BootPoint[:config].logger
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -4,16 +4,21 @@ module EvilEvents::Core::Broadcasting
|
|
4
4
|
class Adapters
|
5
5
|
# @api public
|
6
6
|
# @since 0.1.0
|
7
|
-
|
7
|
+
module MemoryAsync
|
8
8
|
# @since 0.1.0
|
9
|
-
|
9
|
+
AsyncTask = ::Thread
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
class << self
|
12
|
+
# @since 0.1.0
|
13
|
+
include Dispatcher::Mixin
|
14
|
+
|
15
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
16
|
+
# @return void
|
17
|
+
#
|
18
|
+
# @since 0.1.0
|
19
|
+
def call(event)
|
20
|
+
AsyncTask.new { dispatch(event) }
|
21
|
+
end
|
17
22
|
end
|
18
23
|
end
|
19
24
|
end
|
@@ -4,16 +4,18 @@ module EvilEvents::Core::Broadcasting
|
|
4
4
|
class Adapters
|
5
5
|
# @api public
|
6
6
|
# @since 0.1.0
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
module MemorySync
|
8
|
+
class << self
|
9
|
+
# @since 0.1.0
|
10
|
+
include Dispatcher::Mixin
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
13
|
+
# @return void
|
14
|
+
#
|
15
|
+
# @since 0.1.0
|
16
|
+
def call(event)
|
17
|
+
dispatch(event)
|
18
|
+
end
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
@@ -5,7 +5,7 @@ module EvilEvents::Core::Broadcasting
|
|
5
5
|
class Adapters
|
6
6
|
extend EvilEvents::Shared::DependencyContainer::Mixin
|
7
7
|
|
8
|
-
register
|
9
|
-
register
|
8
|
+
register(:memory_sync) { Adapters::MemorySync }
|
9
|
+
register(:memory_async) { Adapters::MemoryAsync }
|
10
10
|
end
|
11
11
|
end
|
@@ -10,7 +10,7 @@ module EvilEvents::Core::Broadcasting
|
|
10
10
|
#
|
11
11
|
# @since 0.1.0
|
12
12
|
def dispatch(event) # Broadcast
|
13
|
-
EvilEvents::BootPoint
|
13
|
+
EvilEvents::BootPoint[:event_system].manager_of_event(event).notify(event)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -7,11 +7,18 @@ module EvilEvents::Core::Broadcasting
|
|
7
7
|
# @since 0.1.0
|
8
8
|
include EvilEvents::Core::ActivityLogging
|
9
9
|
|
10
|
+
# @since 0.1.0
|
11
|
+
EmitterError = Class.new(StandardError)
|
12
|
+
# @since 0.1.0
|
13
|
+
IncorrectEventError = Class.new(EmitterError)
|
14
|
+
|
10
15
|
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
16
|
+
# @raise [IncorrectEventError]
|
11
17
|
# @return void
|
12
18
|
#
|
13
19
|
# @since 0.1.0
|
14
20
|
def emit(event)
|
21
|
+
raise IncorrectEventError unless event.is_a?(EvilEvents::Core::Events::AbstractEvent)
|
15
22
|
log_emitter_activity(event)
|
16
23
|
event.adapter.call(event)
|
17
24
|
end
|
@@ -22,7 +29,7 @@ module EvilEvents::Core::Broadcasting
|
|
22
29
|
#
|
23
30
|
# @since 0.1.0
|
24
31
|
def raw_emit(event_type, **event_attributes)
|
25
|
-
event_object = EvilEvents::BootPoint
|
32
|
+
event_object = EvilEvents::BootPoint[:event_system].resolve_event_object(
|
26
33
|
event_type,
|
27
34
|
**event_attributes
|
28
35
|
)
|
@@ -39,7 +46,8 @@ module EvilEvents::Core::Broadcasting
|
|
39
46
|
def log_emitter_activity(event)
|
40
47
|
activity = "EventEmitted(#{event.adapter_name})"
|
41
48
|
message = "Type: #{event.type} :: Payload: #{event.payload}"
|
42
|
-
|
49
|
+
|
50
|
+
log_activity(activity: activity, message: message)
|
43
51
|
end
|
44
52
|
end
|
45
53
|
end
|
@@ -4,7 +4,7 @@ module EvilEvents::Core
|
|
4
4
|
# @since 0.1.0
|
5
5
|
module Broadcasting
|
6
6
|
require_relative 'broadcasting/dispatcher'
|
7
|
-
require_relative 'broadcasting/dispatcher/
|
7
|
+
require_relative 'broadcasting/dispatcher/mixin'
|
8
8
|
require_relative 'broadcasting/adapters'
|
9
9
|
require_relative 'broadcasting/adapters/memory_sync'
|
10
10
|
require_relative 'broadcasting/adapters/memory_async'
|
@@ -18,12 +18,15 @@ module EvilEvents::Core::Events
|
|
18
18
|
# @since 0.1.0
|
19
19
|
include EventExtensions::Serializable
|
20
20
|
# @since 0.1.0
|
21
|
+
include EventExtensions::Emittable
|
22
|
+
# @since 0.1.0
|
21
23
|
extend EvilEvents::Shared::CombinedContextMixin
|
22
24
|
|
23
25
|
# @param payload_attributes [Hash]
|
24
26
|
#
|
25
27
|
# @since 0.1.0
|
26
28
|
def initialize(**payload_attributes)
|
29
|
+
@uuid = SecureRandom.uuid # TODO: cover with a spec (uuid belongs to metadata)
|
27
30
|
@payload = payload_class.new(**payload_attributes)
|
28
31
|
end
|
29
32
|
|
@@ -38,7 +41,7 @@ module EvilEvents::Core::Events
|
|
38
41
|
#
|
39
42
|
# @since 0.1.0
|
40
43
|
def emit
|
41
|
-
EvilEvents::BootPoint
|
44
|
+
EvilEvents::BootPoint[:event_system].emit(self)
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
@@ -7,7 +7,7 @@ module EvilEvents::Core::Events
|
|
7
7
|
class << self
|
8
8
|
# @param event_type [String]
|
9
9
|
# @raise [EvilEvents::Core::Events::ManagerRegistry::AlreadyManagedEventClassError]
|
10
|
-
# @return [AbstractEvent]
|
10
|
+
# @return [Class{EvilEvents::Core::Events::AbstractEvent}]
|
11
11
|
#
|
12
12
|
# @since 0.1.0
|
13
13
|
def create_abstract(event_type)
|
@@ -16,15 +16,11 @@ module EvilEvents::Core::Events
|
|
16
16
|
|
17
17
|
class << klass
|
18
18
|
def inherited(child_class)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
raise
|
25
|
-
end
|
26
|
-
|
27
|
-
super
|
19
|
+
child_class.type(type)
|
20
|
+
child_class.manage!
|
21
|
+
rescue EvilEvents::Core::Events::ManagerRegistry::AlreadyManagedEventClassError
|
22
|
+
EvilEvents::BootPoint[:event_system].unregister_event_class(child_class)
|
23
|
+
raise
|
28
24
|
end
|
29
25
|
end
|
30
26
|
end
|
@@ -34,7 +30,7 @@ module EvilEvents::Core::Events
|
|
34
30
|
# @param event_class_definitions [Proc]
|
35
31
|
# @yield [AbstractEvent]
|
36
32
|
# @raise [EvilEvents::Core::Events::ManagerRegistry::AlreadyManagedEventClassError]
|
37
|
-
# @return [AbstractEvent]
|
33
|
+
# @return [Class{EvilEvents::Core::Events::AbstractEvent}]
|
38
34
|
#
|
39
35
|
# @since 0.1.0
|
40
36
|
def create(event_type, &event_class_definitions)
|
@@ -44,7 +40,7 @@ module EvilEvents::Core::Events
|
|
44
40
|
klass.manage!
|
45
41
|
klass.evaluate(&event_class_definitions) if block_given?
|
46
42
|
rescue EvilEvents::Core::Events::ManagerRegistry::AlreadyManagedEventClassError
|
47
|
-
EvilEvents::BootPoint
|
43
|
+
EvilEvents::BootPoint[:event_system].unregister_event_class(klass)
|
48
44
|
raise
|
49
45
|
end
|
50
46
|
end
|
@@ -35,14 +35,14 @@ module EvilEvents::Core::Events::EventExtensions
|
|
35
35
|
# @since 0.1.0
|
36
36
|
def adapter(identifier = nil)
|
37
37
|
@adapter_identifier = identifier if identifier
|
38
|
-
EvilEvents::BootPoint
|
38
|
+
EvilEvents::BootPoint[:event_system].resolve_adapter(adapter_name)
|
39
39
|
end
|
40
40
|
|
41
41
|
# @return [Symbol, String]
|
42
42
|
#
|
43
43
|
# @since 0.1.0
|
44
44
|
def adapter_name
|
45
|
-
@adapter_identifier || EvilEvents::BootPoint
|
45
|
+
@adapter_identifier || EvilEvents::BootPoint[:config].adapter.default
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -27,7 +27,7 @@ module EvilEvents::Core::Events::EventExtensions
|
|
27
27
|
#
|
28
28
|
# @since 0.1.0
|
29
29
|
def observe(raw_subscriber, delegator: nil)
|
30
|
-
EvilEvents::BootPoint
|
30
|
+
EvilEvents::BootPoint[:event_system].observe(self, raw_subscriber, delegator)
|
31
31
|
end
|
32
32
|
|
33
33
|
# @param delegator [Symbol, String, NilClass]
|
@@ -35,14 +35,14 @@ module EvilEvents::Core::Events::EventExtensions
|
|
35
35
|
# @since 0.1.0
|
36
36
|
def default_delegator(delegator = nil)
|
37
37
|
@default_delegator = delegator if delegator
|
38
|
-
@default_delegator || EvilEvents::BootPoint
|
38
|
+
@default_delegator || EvilEvents::BootPoint[:config].subscriber.default_delegator
|
39
39
|
end
|
40
40
|
|
41
41
|
# @return [Array]
|
42
42
|
#
|
43
43
|
# @since 0.1.0
|
44
44
|
def observers
|
45
|
-
EvilEvents::BootPoint
|
45
|
+
EvilEvents::BootPoint[:event_system].observers(self)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -10,6 +10,7 @@ module EvilEvents::Core::Events::EventExtensions
|
|
10
10
|
def serialize_to_hash
|
11
11
|
EvilEvents::Core::Events::Serializers[:hash].serialize(self)
|
12
12
|
end
|
13
|
+
alias_method :dump_to_hash, :serialize_to_hash
|
13
14
|
|
14
15
|
# @return [String]
|
15
16
|
#
|
@@ -17,5 +18,6 @@ module EvilEvents::Core::Events::EventExtensions
|
|
17
18
|
def serialize_to_json
|
18
19
|
EvilEvents::Core::Events::Serializers[:json].serialize(self)
|
19
20
|
end
|
21
|
+
alias_method :dump_to_json, :serialize_to_json
|
20
22
|
end
|
21
23
|
end
|
@@ -4,12 +4,22 @@ module EvilEvents::Core::Events
|
|
4
4
|
# @api private
|
5
5
|
# @since 0.1.0
|
6
6
|
module ManagerFactory
|
7
|
+
# @since 0.1.0
|
8
|
+
ManagerFactoryError = Class.new(StandardError)
|
9
|
+
# @sicne 0.1.0
|
10
|
+
IncorrectEventClassError = Class.new(ManagerFactoryError)
|
11
|
+
|
7
12
|
class << self
|
8
13
|
# @param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]
|
14
|
+
# @raise [IncorrectEventClassError]
|
9
15
|
# @return [EvilEvents::Core::Events::Manager]
|
10
16
|
#
|
11
17
|
# @since 0.1.0
|
12
18
|
def create(event_class)
|
19
|
+
unless event_class.is_a?(Class) && event_class < EvilEvents::Core::Events::AbstractEvent
|
20
|
+
raise IncorrectEventClassError
|
21
|
+
end
|
22
|
+
|
13
23
|
Manager.new(event_class)
|
14
24
|
end
|
15
25
|
end
|
@@ -29,7 +29,7 @@ class EvilEvents::Core::Events::Serializers
|
|
29
29
|
raise DeserializationError unless event_type && event_payload
|
30
30
|
raise DeserializationError unless event_payload.is_a?(::Hash)
|
31
31
|
|
32
|
-
EvilEvents::BootPoint
|
32
|
+
EvilEvents::BootPoint[:event_system].resolve_event_object(
|
33
33
|
event_type, symbolized_event_payload(event_payload)
|
34
34
|
)
|
35
35
|
end
|
@@ -34,7 +34,7 @@ class EvilEvents::Core::Events::Serializers
|
|
34
34
|
raise DeserializationError
|
35
35
|
end
|
36
36
|
|
37
|
-
EvilEvents::BootPoint
|
37
|
+
EvilEvents::BootPoint[:event_system].resolve_event_object(event_type, event_payload)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -17,9 +17,9 @@ class EvilEvents::Core::Events::Subscriber
|
|
17
17
|
def subscribe_to(event_type, delegator: nil)
|
18
18
|
case event_type
|
19
19
|
when Class
|
20
|
-
EvilEvents::BootPoint
|
20
|
+
EvilEvents::BootPoint[:event_system].observe(event_type, self, delegator)
|
21
21
|
when String
|
22
|
-
EvilEvents::BootPoint
|
22
|
+
EvilEvents::BootPoint[:event_system].raw_observe(event_type, self, delegator)
|
23
23
|
else
|
24
24
|
raise IncompatibleEventAttrTypeError
|
25
25
|
end
|
@@ -13,7 +13,7 @@ module EvilEvents::Core::Events
|
|
13
13
|
# @param delegator_resolver [EvilEvents::Shared::DelegatorResolver]
|
14
14
|
#
|
15
15
|
# @since 0.1.0
|
16
|
-
def initialize(subscriber, delegator_resolver)
|
16
|
+
def initialize(subscriber, delegator_resolver = default_resolver)
|
17
17
|
@subscriber = subscriber
|
18
18
|
@delegator_resolver = delegator_resolver
|
19
19
|
end
|
@@ -39,5 +39,15 @@ module EvilEvents::Core::Events
|
|
39
39
|
def delegator
|
40
40
|
@delegator ||= delegator_resolver.delegator
|
41
41
|
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
# @return [EvilEvents::Shared::DelegatorResolver]
|
46
|
+
#
|
47
|
+
# @since 0.1.0
|
48
|
+
def default_resolver
|
49
|
+
delegation = -> { EvilEvents::BootPoint[:config].subscriber.default_delegator }
|
50
|
+
EvilEvents::Shared::DelegatorResolver.new(delegation)
|
51
|
+
end
|
42
52
|
end
|
43
53
|
end
|
@@ -13,6 +13,7 @@ module EvilEvents::Core
|
|
13
13
|
require_relative 'events/event_extensions/adapter_customizable'
|
14
14
|
require_relative 'events/event_extensions/observable'
|
15
15
|
require_relative 'events/event_extensions/serializable'
|
16
|
+
require_relative 'events/event_extensions/emittable'
|
16
17
|
require_relative 'events/abstract_event'
|
17
18
|
require_relative 'events/manager'
|
18
19
|
require_relative 'events/manager/subscriber_list'
|
data/lib/evil_events/core.rb
CHANGED
@@ -81,6 +81,8 @@ module EvilEvents
|
|
81
81
|
__outer_context__.public_send(method_name, *arguments, &block)
|
82
82
|
when __required_context__.respond_to?(method_name)
|
83
83
|
__required_context__.public_send(method_name, *arguments, &block)
|
84
|
+
when ::Kernel.respond_to?(method_name)
|
85
|
+
::Kernel.public_send(method_name, *arguments, &block)
|
84
86
|
else
|
85
87
|
super
|
86
88
|
end
|
data/lib/evil_events/shared.rb
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module EvilEvents
|
4
|
+
# @api public
|
4
5
|
# @since 0.1.0
|
5
6
|
module Shared
|
6
|
-
require_relative 'shared/
|
7
|
+
require_relative 'shared/types'
|
7
8
|
require_relative 'shared/logger'
|
8
|
-
require_relative 'shared/configurable'
|
9
|
-
require_relative 'shared/dependency_container'
|
10
9
|
require_relative 'shared/structure'
|
11
|
-
require_relative 'shared/
|
10
|
+
require_relative 'shared/configurable'
|
12
11
|
require_relative 'shared/combined_context'
|
13
|
-
require_relative 'shared/combined_context_mixin'
|
14
12
|
require_relative 'shared/delegator_resolver'
|
13
|
+
require_relative 'shared/dependency_container'
|
14
|
+
require_relative 'shared/mockable_class_builder'
|
15
|
+
require_relative 'shared/combined_context_mixin'
|
15
16
|
end
|
16
17
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::System
|
4
|
+
# @api private
|
5
|
+
# @since 0.1.0
|
6
|
+
class Broadcaster
|
7
|
+
# @return [EvilEvents::Core::Broadcasting::Emitter]
|
8
|
+
#
|
9
|
+
# @since 0.1.0
|
10
|
+
attr_reader :event_emitter
|
11
|
+
|
12
|
+
# @since 0.1.0
|
13
|
+
def initialize
|
14
|
+
@event_emitter = EvilEvents::Core::Broadcasting::Emitter.new
|
15
|
+
end
|
16
|
+
|
17
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
18
|
+
# @return void
|
19
|
+
#
|
20
|
+
# @since 0.1.0
|
21
|
+
def emit(event)
|
22
|
+
event_emitter.emit(event)
|
23
|
+
end
|
24
|
+
|
25
|
+
# @param event_type [String]
|
26
|
+
# @param event_attributes [Hash]
|
27
|
+
# @return void
|
28
|
+
#
|
29
|
+
# @since 0.1.0
|
30
|
+
def raw_emit(event_type, **event_attributes)
|
31
|
+
event_emitter.raw_emit(event_type, **event_attributes)
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param adapter_name [Symbol, String]
|
35
|
+
# @return [EvilEvents::Core::Broadcasting::Dispatcher::Dispatchable]
|
36
|
+
#
|
37
|
+
# @since 0.1.0
|
38
|
+
def resolve_adapter(adapter_name)
|
39
|
+
EvilEvents::Core::Broadcasting::Adapters.resolve(adapter_name)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::System
|
4
|
+
# @api private
|
5
|
+
# @since 0.1.0
|
6
|
+
module EventBuilder
|
7
|
+
class << self
|
8
|
+
# @param event_type [String]
|
9
|
+
# @param event_class_definitions [Proc]
|
10
|
+
# @return [Class{EvilEvents::Core::Events::AbstractEvent}]
|
11
|
+
#
|
12
|
+
# @since 0.1.0
|
13
|
+
def define_event_class(event_type, &event_class_definitions)
|
14
|
+
EvilEvents::Core::Events::EventClassFactory.create(
|
15
|
+
event_type, &event_class_definitions
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @param event_type [String]
|
20
|
+
# @return [Class{EvilEvents::Core::Events::AbstractEvent}]
|
21
|
+
#
|
22
|
+
# @since 0.1.0
|
23
|
+
def define_abstract_event_class(event_type)
|
24
|
+
EvilEvents::Core::Events::EventClassFactory.create_abstract(
|
25
|
+
event_type
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::System
|
4
|
+
# @api private
|
5
|
+
# @since 0.1.0
|
6
|
+
class EventManager
|
7
|
+
# @return [EvilEvents::Core::Events::ManagerRegistry]
|
8
|
+
#
|
9
|
+
# @since 0.1.0
|
10
|
+
attr_reader :manager_registry
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@manager_registry = EvilEvents::Core::Events::ManagerRegistry.new
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param event_class [Class{Evilevents::Core::Events::AbstractEvent}]
|
17
|
+
# @param raw_subscriber [Object]
|
18
|
+
# @param delegator [String, Symbol, NilClass]
|
19
|
+
# @return void
|
20
|
+
#
|
21
|
+
# @since 0.1.0
|
22
|
+
def observe(event_class, raw_subscriber, delegator)
|
23
|
+
manager_registry.manager_of_event(event_class)
|
24
|
+
.observe(raw_subscriber, delegator)
|
25
|
+
end
|
26
|
+
|
27
|
+
# @param event_type [String, Symbol]
|
28
|
+
# @param raw_subscriber [Object]
|
29
|
+
# @param delegator [String, Symbol, NilClass]
|
30
|
+
# @return void
|
31
|
+
#
|
32
|
+
# @since 0.1.0
|
33
|
+
def raw_observe(event_type, raw_subscriber, delegator)
|
34
|
+
manager_registry.manager_of_event_type(event_type)
|
35
|
+
.observe(raw_subscriber, delegator)
|
36
|
+
end
|
37
|
+
|
38
|
+
# @param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]
|
39
|
+
# @return [Array<EvilEvents::Core::Events::Subscriber>]
|
40
|
+
#
|
41
|
+
# @since 0.1.0
|
42
|
+
def observers(event_class)
|
43
|
+
manager_registry.manager_of_event(event_class).subscribers
|
44
|
+
end
|
45
|
+
|
46
|
+
# @param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]
|
47
|
+
# @return void
|
48
|
+
#
|
49
|
+
# @since 0.1.0
|
50
|
+
def register_event_class(event_class)
|
51
|
+
manager_registry.register_with(event_class)
|
52
|
+
end
|
53
|
+
|
54
|
+
# @param event_class [Class{EvilEvents::Core::events::AbstractEvent}]
|
55
|
+
# @return void
|
56
|
+
#
|
57
|
+
# @since 0.1.0
|
58
|
+
def unregister_event_class(event_class)
|
59
|
+
manager_registry.unregister_with(event_class)
|
60
|
+
end
|
61
|
+
|
62
|
+
# @param event [EvilEvents::Core::Events::AbstractEvent]
|
63
|
+
# @return [EvilEvents::Core::Events::Manager]
|
64
|
+
#
|
65
|
+
# @since 0.1.0
|
66
|
+
def manager_of_event(event)
|
67
|
+
manager_registry.manager_of_event(event.class)
|
68
|
+
end
|
69
|
+
|
70
|
+
# @param event_type [String]
|
71
|
+
# @return [EvilEvents::Core::Events::Manager]
|
72
|
+
#
|
73
|
+
# @since 0.1.0
|
74
|
+
def manager_of_event_type(event_type)
|
75
|
+
manager_registry.manager_of_event_type(event_type)
|
76
|
+
end
|
77
|
+
|
78
|
+
# @param event_type [String]
|
79
|
+
# @param event_attributes [Hash]
|
80
|
+
# @return [EvilEvents::Core::Events::AbstractEvent]
|
81
|
+
#
|
82
|
+
# @since 0.1.0
|
83
|
+
def resolve_event_object(event_type, **event_attributes)
|
84
|
+
manager_of_event_type(event_type).event_class.new(**event_attributes)
|
85
|
+
end
|
86
|
+
|
87
|
+
# @param event_class [EvilEvents::Core::Events::AbstractEvent]
|
88
|
+
# @return [Boolean]
|
89
|
+
#
|
90
|
+
# @since 0.1.0
|
91
|
+
def managed_event?(event_class)
|
92
|
+
manager_registry.managed_event?(event_class)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -9,11 +9,11 @@ class EvilEvents::System
|
|
9
9
|
class Mock
|
10
10
|
# @see EvilEvents::System
|
11
11
|
# @since 0.1.0
|
12
|
-
attr_reader :
|
12
|
+
attr_reader :broadcaster
|
13
13
|
|
14
14
|
# @see EvilEvents::System
|
15
15
|
# @since 0.1.0
|
16
|
-
attr_reader :
|
16
|
+
attr_reader :event_manager
|
17
17
|
|
18
18
|
# @see EvilEvents::System
|
19
19
|
# @since 0.1.0
|
@@ -49,7 +49,7 @@ class EvilEvents::System
|
|
49
49
|
|
50
50
|
# @see EvilEvents::System
|
51
51
|
# @since 0.1.0
|
52
|
-
def
|
52
|
+
def manager_of_event(event); end
|
53
53
|
|
54
54
|
# @see EvilEvents::System
|
55
55
|
# @since 0.1.0
|
@@ -66,5 +66,9 @@ class EvilEvents::System
|
|
66
66
|
# @see EvilEvents::System
|
67
67
|
# @since 0.1.0
|
68
68
|
def define_abstract_event_class(event_type); end
|
69
|
+
|
70
|
+
# @see EvilEvents::System
|
71
|
+
# @since 0.1.0
|
72
|
+
def managed_event?(event_class); end
|
69
73
|
end
|
70
74
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::System
|
4
|
+
# @api private
|
5
|
+
# @since 0.1.0
|
6
|
+
module Mocking
|
7
|
+
class << self
|
8
|
+
# @param base_class [EvilEvents::System]
|
9
|
+
#
|
10
|
+
# @since 0.1.0
|
11
|
+
def included(base_class)
|
12
|
+
base_class.extend(ClassMethods)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# @since 0.1.0
|
17
|
+
module ClassMethods
|
18
|
+
# @return [EvilEvents::System::Mock]
|
19
|
+
#
|
20
|
+
# @since 0.1.0
|
21
|
+
def build_mock
|
22
|
+
Mock.new
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [EvilEvents::System]
|
26
|
+
#
|
27
|
+
# @since 0.1.0
|
28
|
+
def build_stub
|
29
|
+
new
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/evil_events/system.rb
CHANGED
@@ -3,147 +3,56 @@
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
5
|
class EvilEvents::System
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
6
|
+
require_relative 'system/mock'
|
7
|
+
require_relative 'system/mocking'
|
8
|
+
require_relative 'system/broadcaster'
|
9
|
+
require_relative 'system/event_builder'
|
10
|
+
require_relative 'system/event_manager'
|
21
11
|
|
22
12
|
# @since 0.1.0
|
23
|
-
|
24
|
-
|
13
|
+
extend Forwardable
|
25
14
|
# @since 0.1.0
|
26
|
-
|
15
|
+
include Mocking
|
27
16
|
|
17
|
+
# @see EvilEvents::System::Broadcaster
|
28
18
|
# @since 0.1.0
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
19
|
+
def_delegators :broadcaster,
|
20
|
+
:emit,
|
21
|
+
:raw_emit,
|
22
|
+
:resolve_adapter
|
33
23
|
|
34
|
-
# @
|
35
|
-
# @param raw_subscriber [Object]
|
36
|
-
# @param delegator [String, Symbol, NilClass]
|
37
|
-
# @return void
|
38
|
-
#
|
24
|
+
# @see EvilEvents::System::EventManager
|
39
25
|
# @since 0.1.0
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
26
|
+
def_delegators :event_manager,
|
27
|
+
:observe,
|
28
|
+
:raw_observe,
|
29
|
+
:observers,
|
30
|
+
:register_event_class,
|
31
|
+
:unregister_event_class,
|
32
|
+
:manager_of_event,
|
33
|
+
:manager_of_event_type,
|
34
|
+
:resolve_event_object,
|
35
|
+
:managed_event?
|
44
36
|
|
45
|
-
# @
|
46
|
-
# @param raw_subscriber [Object]
|
47
|
-
# @param delegator [String, Symbol, NilClass]
|
48
|
-
# @return void
|
49
|
-
#
|
37
|
+
# @see EvilEvents::System::EventBuilder
|
50
38
|
# @since 0.1.0
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
39
|
+
def_delegators 'EvilEvents::System::EventBuilder',
|
40
|
+
:define_event_class,
|
41
|
+
:define_abstract_event_class
|
55
42
|
|
56
|
-
# @
|
57
|
-
# @return [Array<EvilEvents::Core::Events::Subscriber>]
|
43
|
+
# @return [EvilEvents::System::Broadcaster]
|
58
44
|
#
|
59
45
|
# @since 0.1.0
|
60
|
-
|
61
|
-
manager_registry.manager_of_event(event_class).subscribers
|
62
|
-
end
|
46
|
+
attr_reader :broadcaster
|
63
47
|
|
64
|
-
# @
|
65
|
-
# @return void
|
48
|
+
# @return [EvilEvents::System::EventManager]
|
66
49
|
#
|
67
50
|
# @since 0.1.0
|
68
|
-
|
69
|
-
event_emitter.emit(event)
|
70
|
-
end
|
51
|
+
attr_reader :event_manager
|
71
52
|
|
72
|
-
# @param event_type [String]
|
73
|
-
# @param event_attributes [Hash]
|
74
|
-
# @return void
|
75
|
-
#
|
76
53
|
# @since 0.1.0
|
77
|
-
def
|
78
|
-
|
79
|
-
|
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
|
-
)
|
54
|
+
def initialize
|
55
|
+
@broadcaster = Broadcaster.new
|
56
|
+
@event_manager = EventManager.new
|
148
57
|
end
|
149
58
|
end
|
data/lib/evil_events/version.rb
CHANGED
data/lib/evil_events.rb
CHANGED
@@ -4,7 +4,8 @@ require 'dry-configurable'
|
|
4
4
|
require 'dry-container'
|
5
5
|
require 'dry-struct'
|
6
6
|
require 'dry-types'
|
7
|
-
require 'concurrent'
|
7
|
+
require 'concurrent/array'
|
8
|
+
require 'concurrent/map'
|
8
9
|
require 'logger'
|
9
10
|
require 'json'
|
10
11
|
|
@@ -14,7 +15,6 @@ module EvilEvents
|
|
14
15
|
require_relative 'evil_events/shared'
|
15
16
|
require_relative 'evil_events/core'
|
16
17
|
require_relative 'evil_events/system'
|
17
|
-
require_relative 'evil_events/system/mock'
|
18
18
|
require_relative 'evil_events/config'
|
19
19
|
require_relative 'evil_events/boot_point'
|
20
20
|
require_relative 'evil_events/version'
|
@@ -27,7 +27,7 @@ module EvilEvents
|
|
27
27
|
# @api public
|
28
28
|
# @since 0.1.0
|
29
29
|
def [](event_type)
|
30
|
-
EvilEvents::BootPoint
|
30
|
+
EvilEvents::BootPoint[:event_system].define_abstract_event_class(
|
31
31
|
event_type
|
32
32
|
)
|
33
33
|
end
|
@@ -36,7 +36,7 @@ module EvilEvents
|
|
36
36
|
# @api public
|
37
37
|
# @since 0.1.0
|
38
38
|
def define_event(event_type, &event_class_definitions)
|
39
|
-
EvilEvents::BootPoint
|
39
|
+
EvilEvents::BootPoint[:event_system].define_event_class(
|
40
40
|
event_type, &event_class_definitions
|
41
41
|
)
|
42
42
|
end
|
@@ -45,7 +45,7 @@ module EvilEvents
|
|
45
45
|
# @api public
|
46
46
|
# @since 0.1.0
|
47
47
|
def emit(event_type, **event_attributes)
|
48
|
-
EvilEvents::BootPoint
|
48
|
+
EvilEvents::BootPoint[:event_system].raw_emit(
|
49
49
|
event_type, **event_attributes
|
50
50
|
)
|
51
51
|
end
|
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.0rc2
|
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-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-types
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.0.5
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: coveralls
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.7.2
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.7.2
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: pry
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +122,20 @@ dependencies:
|
|
108
122
|
- - '='
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: 0.15.1
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simplecov-json
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.2'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.2'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: rubocop
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -190,6 +218,7 @@ files:
|
|
190
218
|
- ".rubocop.yml"
|
191
219
|
- ".travis.yml"
|
192
220
|
- ".yardopts"
|
221
|
+
- CHANGELOG.md
|
193
222
|
- CODE_OF_CONDUCT.md
|
194
223
|
- Gemfile
|
195
224
|
- LICENSE.txt
|
@@ -208,12 +237,13 @@ files:
|
|
208
237
|
- lib/evil_events/core/broadcasting/adapters/memory_async.rb
|
209
238
|
- lib/evil_events/core/broadcasting/adapters/memory_sync.rb
|
210
239
|
- lib/evil_events/core/broadcasting/dispatcher.rb
|
211
|
-
- lib/evil_events/core/broadcasting/dispatcher/
|
240
|
+
- lib/evil_events/core/broadcasting/dispatcher/mixin.rb
|
212
241
|
- lib/evil_events/core/broadcasting/emitter.rb
|
213
242
|
- lib/evil_events/core/events.rb
|
214
243
|
- lib/evil_events/core/events/abstract_event.rb
|
215
244
|
- lib/evil_events/core/events/event_class_factory.rb
|
216
245
|
- lib/evil_events/core/events/event_extensions/adapter_customizable.rb
|
246
|
+
- lib/evil_events/core/events/event_extensions/emittable.rb
|
217
247
|
- lib/evil_events/core/events/event_extensions/manageable.rb
|
218
248
|
- lib/evil_events/core/events/event_extensions/observable.rb
|
219
249
|
- lib/evil_events/core/events/event_extensions/payloadable.rb
|
@@ -240,7 +270,11 @@ files:
|
|
240
270
|
- lib/evil_events/shared/structure.rb
|
241
271
|
- lib/evil_events/shared/types.rb
|
242
272
|
- lib/evil_events/system.rb
|
273
|
+
- lib/evil_events/system/broadcaster.rb
|
274
|
+
- lib/evil_events/system/event_builder.rb
|
275
|
+
- lib/evil_events/system/event_manager.rb
|
243
276
|
- lib/evil_events/system/mock.rb
|
277
|
+
- lib/evil_events/system/mocking.rb
|
244
278
|
- lib/evil_events/version.rb
|
245
279
|
homepage: https://github.com/ergosploit/evil_events
|
246
280
|
licenses:
|