evil_events 0.1.1 → 0.2.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/.rubocop.yml +17 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +29 -1
- data/evil_events.gemspec +17 -16
- data/lib/evil_events.rb +3 -1
- data/lib/evil_events/application.rb +16 -0
- data/lib/evil_events/config.rb +23 -6
- data/lib/evil_events/{adapters.rb → config/adapters.rb} +4 -4
- data/lib/evil_events/config/types.rb +24 -0
- data/lib/evil_events/core.rb +1 -0
- data/lib/evil_events/core/bootstrap.rb +1 -1
- data/lib/evil_events/core/broadcasting/emitter.rb +1 -1
- data/lib/evil_events/core/error.rb +8 -0
- data/lib/evil_events/core/events.rb +3 -0
- data/lib/evil_events/core/events/abstract_event.rb +2 -0
- data/lib/evil_events/core/events/event_extensions/class_signature.rb +30 -0
- data/lib/evil_events/core/events/event_extensions/class_signature/equalizer.rb +82 -0
- data/lib/evil_events/core/events/event_extensions/class_signature/signature.rb +70 -0
- data/lib/evil_events/core/events/event_extensions/metadata_extendable.rb +16 -4
- data/lib/evil_events/core/events/event_extensions/payloadable.rb +16 -4
- data/lib/evil_events/core/events/event_extensions/type_aliasing.rb +1 -1
- data/lib/evil_events/core/events/event_factory.rb +7 -2
- data/lib/evil_events/core/events/manager.rb +1 -1
- data/lib/evil_events/core/events/manager/notifier.rb +2 -1
- data/lib/evil_events/core/events/manager_factory.rb +1 -1
- data/lib/evil_events/core/events/manager_registry.rb +39 -2
- data/lib/evil_events/core/events/serializers.rb +2 -1
- data/lib/evil_events/core/events/subscriber/mixin.rb +20 -11
- data/lib/evil_events/core/system.rb +16 -0
- data/lib/evil_events/core/system/event_manager.rb +33 -3
- data/lib/evil_events/core/system/mock.rb +20 -0
- data/lib/evil_events/core/system/type_manager.rb +35 -0
- data/lib/evil_events/plugins.rb +33 -0
- data/lib/evil_events/plugins/elastic_search.rb +6 -0
- data/lib/evil_events/plugins/rails.rb +6 -0
- data/lib/evil_events/shared.rb +4 -0
- data/lib/evil_events/shared/crypto.rb +1 -1
- data/lib/evil_events/shared/type_converter.rb +43 -0
- data/lib/evil_events/shared/type_converter/converter.rb +45 -0
- data/lib/evil_events/shared/type_converter/converter_registry.rb +51 -0
- data/lib/evil_events/shared/type_converter/type_builder.rb +51 -0
- data/lib/evil_events/version.rb +2 -2
- metadata +73 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ca82399f2d2f7e433c6dd9c111d2a6c3c285940
|
4
|
+
data.tar.gz: 445c719e88bb2f1ff12720b8aec3fc62c451ef91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3ea9dfd03ec8f792d926d83ed2f014cc22ce8bb42d8730e626473ffb48d28bbfe2d2bdb990b9d2d279d8a3fc7a3fcb32d8d0c0ac2304a94a1a1418d096d57c6
|
7
|
+
data.tar.gz: 4aa79a4f86765a4babbbc9aaea8c7a0947cc1f653a8c484b2496bc71daff8ce1a385b01c5665a265174f9f89a0f436a028a6b3f87022f17b9b6219bb69d27214
|
data/.rubocop.yml
CHANGED
@@ -16,6 +16,10 @@ Style/SingleLineMethods:
|
|
16
16
|
Exclude:
|
17
17
|
- spec/**/*
|
18
18
|
|
19
|
+
Style/RescueModifier:
|
20
|
+
Exclude:
|
21
|
+
- spec/**/*
|
22
|
+
|
19
23
|
Style/AsciiComments:
|
20
24
|
Enabled: false
|
21
25
|
|
@@ -25,6 +29,9 @@ Style/Alias:
|
|
25
29
|
Style/GuardClause:
|
26
30
|
Enabled: false
|
27
31
|
|
32
|
+
Style/DoubleNegation:
|
33
|
+
Enabled: false
|
34
|
+
|
28
35
|
Style/Documentation:
|
29
36
|
Enabled: false
|
30
37
|
|
@@ -37,12 +44,18 @@ Style/EmptyCaseCondition:
|
|
37
44
|
Style/FrozenStringLiteralComment:
|
38
45
|
Enabled: true
|
39
46
|
|
47
|
+
Style/InverseMethods:
|
48
|
+
Enabled: false
|
49
|
+
|
40
50
|
Style/ParallelAssignment:
|
41
51
|
Enabled: false
|
42
52
|
|
43
53
|
Style/CommentedKeyword:
|
44
54
|
Enabled: false
|
45
55
|
|
56
|
+
Lint/AmbiguousRegexpLiteral:
|
57
|
+
Enabled: false
|
58
|
+
|
46
59
|
Naming/FileName:
|
47
60
|
Enabled: false
|
48
61
|
|
@@ -65,11 +78,14 @@ Metrics/PerceivedComplexity:
|
|
65
78
|
Metrics/MethodLength:
|
66
79
|
Max: 25
|
67
80
|
|
81
|
+
RSpec/ContextWording:
|
82
|
+
Enabled: false
|
83
|
+
|
68
84
|
RSpec/HookArgument:
|
69
85
|
Enabled: false
|
70
86
|
|
71
87
|
RSpec/NestedGroups:
|
72
|
-
Max:
|
88
|
+
Max: 6
|
73
89
|
|
74
90
|
RSpec/MessageSpies:
|
75
91
|
Enabled: false
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,34 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [0.2.0] - 2017-11-19
|
5
|
+
### Added
|
6
|
+
- Support for custom coercive types:
|
7
|
+
- New utility for custom coercive types: `EvilEvents::Shared::TypeConverter`
|
8
|
+
- `AbstractEvent` supports new coercive types (metadata and payload are supported)
|
9
|
+
- Configuration point for coercive types: `EvilEvents::Config.setup_types { |types| ... }`
|
10
|
+
- Configuration point for adapters: `EvilEvents::Config.setup_adapters { |adapters| ... }`
|
11
|
+
- General class for internal errors: now all internal `*Error` classes inherits from `EvilEvents::Core::Error`
|
12
|
+
- Access to the list of registered event classes via `EvilEvents::Application.registered_events`
|
13
|
+
- Plugin ecosystem: see `EvilEvents::Plugins` (simple API example: `EvilEvents::Plugins.load!(:rails)`)
|
14
|
+
- Comparable event class signature object `<EventClass>.signature` with data about:
|
15
|
+
- class name
|
16
|
+
- class creation strategy
|
17
|
+
- adapter info (name and object)
|
18
|
+
- default delegator method name
|
19
|
+
- metadata attributes schema
|
20
|
+
- payload attributes schema
|
21
|
+
- string type alias
|
22
|
+
- Event subscriptions via event type alias pattern (Regexp) and conditional proc (Proc)
|
23
|
+
- The ability to subscribe to the list of events (via list of event type attributes)
|
24
|
+
|
25
|
+
### Changed
|
26
|
+
- Renamed config opts aggregator: `EvilEvents::Config.config` => `EvilEvents::Config.options`
|
27
|
+
- Moved adapters config object: `EvilEvents::Adapters` => `EvilEvents::Config::Adapters`
|
28
|
+
|
29
|
+
### Fixed
|
30
|
+
- Fixed a bug when an event created by an exceptional block still remains in the internal event registry
|
31
|
+
|
4
32
|
## [0.1.1] - 2017-10-29
|
5
|
-
###
|
33
|
+
### Added
|
6
34
|
- Serialization of event ids: support for using :id key in JSON/Hash serialization/deserialization.
|
data/evil_events.gemspec
CHANGED
@@ -26,20 +26,21 @@ Gem::Specification.new do |spec|
|
|
26
26
|
f.match(%r{^(spec|features)/})
|
27
27
|
end
|
28
28
|
|
29
|
-
spec.add_dependency 'dry-monads', '0.
|
30
|
-
spec.add_dependency 'dry-types', '0.12.1'
|
31
|
-
spec.add_dependency 'dry-struct', '0.3.1'
|
32
|
-
spec.add_dependency 'dry-configurable', '0.7.0'
|
33
|
-
spec.add_dependency 'dry-container', '0.6.0'
|
34
|
-
spec.add_dependency 'concurrent-ruby', '1.0.5'
|
35
|
-
|
36
|
-
spec.add_development_dependency 'coveralls', '0.8.21'
|
37
|
-
spec.add_development_dependency '
|
38
|
-
spec.add_development_dependency 'simplecov',
|
39
|
-
spec.add_development_dependency '
|
40
|
-
spec.add_development_dependency '
|
41
|
-
spec.add_development_dependency '
|
42
|
-
|
43
|
-
spec.add_development_dependency '
|
44
|
-
spec.add_development_dependency '
|
29
|
+
spec.add_dependency 'dry-monads', '~> 0.4.0'
|
30
|
+
spec.add_dependency 'dry-types', '~> 0.12.1'
|
31
|
+
spec.add_dependency 'dry-struct', '~> 0.3.1'
|
32
|
+
spec.add_dependency 'dry-configurable', '~> 0.7.0'
|
33
|
+
spec.add_dependency 'dry-container', '~> 0.6.0'
|
34
|
+
spec.add_dependency 'concurrent-ruby', '~> 1.0.5'
|
35
|
+
|
36
|
+
spec.add_development_dependency 'coveralls', '~> 0.8.21'
|
37
|
+
spec.add_development_dependency 'simplecov', '~> 0.14.1'
|
38
|
+
spec.add_development_dependency 'simplecov-json', '~> 0.2'
|
39
|
+
spec.add_development_dependency 'rubocop', '~> 0.51.0'
|
40
|
+
spec.add_development_dependency 'rspec', '~> 3.7.0'
|
41
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 1.20.1'
|
42
|
+
|
43
|
+
spec.add_development_dependency 'pry'
|
44
|
+
spec.add_development_dependency 'rake'
|
45
|
+
spec.add_development_dependency 'bundler'
|
45
46
|
end
|
data/lib/evil_events.rb
CHANGED
@@ -6,6 +6,7 @@ require 'dry-struct'
|
|
6
6
|
require 'dry-types'
|
7
7
|
require 'concurrent/array'
|
8
8
|
require 'concurrent/map'
|
9
|
+
require 'securerandom'
|
9
10
|
require 'logger'
|
10
11
|
require 'json'
|
11
12
|
|
@@ -19,8 +20,9 @@ module EvilEvents
|
|
19
20
|
require_relative 'evil_events/config'
|
20
21
|
require_relative 'evil_events/event'
|
21
22
|
require_relative 'evil_events/serializer'
|
22
|
-
require_relative 'evil_events/adapters'
|
23
23
|
require_relative 'evil_events/emitter'
|
24
24
|
require_relative 'evil_events/subscriber_mixin'
|
25
25
|
require_relative 'evil_events/dispatcher_mixin'
|
26
|
+
require_relative 'evil_events/application'
|
27
|
+
require_relative 'evil_events/plugins'
|
26
28
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents
|
4
|
+
# @api public
|
5
|
+
# @since 0.2.0
|
6
|
+
module Application
|
7
|
+
class << self
|
8
|
+
# @see EvilEvents::Core::System
|
9
|
+
# @api public
|
10
|
+
# @since 0.2.0
|
11
|
+
def registered_events
|
12
|
+
EvilEvents::Core::Bootstrap[:event_system].registered_events
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/evil_events/config.rb
CHANGED
@@ -4,19 +4,36 @@ module EvilEvents
|
|
4
4
|
# @api public
|
5
5
|
# @since 0.1.0
|
6
6
|
module Config
|
7
|
+
require_relative 'config/adapters'
|
8
|
+
require_relative 'config/types'
|
9
|
+
|
7
10
|
class << self
|
8
|
-
# @see EvilEvents::Config
|
11
|
+
# @see EvilEvents::Core::Config
|
9
12
|
# @api public
|
10
13
|
# @since 0.1.0
|
11
|
-
def
|
12
|
-
config
|
14
|
+
def options
|
15
|
+
EvilEvents::Core::Bootstrap[:config]
|
13
16
|
end
|
14
17
|
|
15
|
-
# @see EvilEvents::Config
|
18
|
+
# @see EvilEvents::Core::Config
|
16
19
|
# @api public
|
17
20
|
# @since 0.1.0
|
18
|
-
def
|
19
|
-
|
21
|
+
def configure
|
22
|
+
options.configure { |conf| yield(conf) if block_given? }
|
23
|
+
end
|
24
|
+
|
25
|
+
# @see EvilEvents::Config::Types
|
26
|
+
# @api public
|
27
|
+
# @since 0.2.0
|
28
|
+
def setup_types
|
29
|
+
yield(Config::Types) if block_given?
|
30
|
+
end
|
31
|
+
|
32
|
+
# @see EvilEvents::Config::Adapters
|
33
|
+
# @api public
|
34
|
+
# @since 0.2.0
|
35
|
+
def setup_adapters
|
36
|
+
yield(Config::Adapters) if block_given?
|
20
37
|
end
|
21
38
|
end
|
22
39
|
end
|
@@ -1,20 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module EvilEvents
|
3
|
+
module EvilEvents::Config
|
4
4
|
# @api public
|
5
|
-
# @since 0.
|
5
|
+
# @since 0.2.0
|
6
6
|
module Adapters
|
7
7
|
class << self
|
8
8
|
# @see EvilEvents::Core::System
|
9
9
|
# @api public
|
10
|
-
# @since 0.
|
10
|
+
# @since 0.2.0
|
11
11
|
def register(adapter_name, adapter_object)
|
12
12
|
EvilEvents::Core::Bootstrap[:event_system].register_adapter(adapter_name, adapter_object)
|
13
13
|
end
|
14
14
|
|
15
15
|
# @see EvilEvents::Core::System
|
16
16
|
# @api public
|
17
|
-
# @since 0.
|
17
|
+
# @since 0.2.0
|
18
18
|
def resolve(adapter_name)
|
19
19
|
EvilEvents::Core::Bootstrap[:event_system].resolve_adapter(adapter_name)
|
20
20
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Config
|
4
|
+
# @api public
|
5
|
+
# @since 0.2.0
|
6
|
+
module Types
|
7
|
+
class << self
|
8
|
+
# @see EvilEvents::Core::System
|
9
|
+
# @api public
|
10
|
+
# @since 0.2.0
|
11
|
+
def define_converter(type, &coercer)
|
12
|
+
EvilEvents::Core::Bootstrap[:event_system].register_converter(type, coercer)
|
13
|
+
end
|
14
|
+
|
15
|
+
# @see EvilEvents::Core::System
|
16
|
+
# @api public
|
17
|
+
# @since 0.2.0
|
18
|
+
def resolve_type(type, **options)
|
19
|
+
EvilEvents::Core::Bootstrap[:event_system].resolve_type(type, **options)
|
20
|
+
end
|
21
|
+
alias_method :[], :resolve_type
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/evil_events/core.rb
CHANGED
@@ -8,6 +8,6 @@ module EvilEvents::Core
|
|
8
8
|
extend EvilEvents::Shared::DependencyContainer::Mixin
|
9
9
|
|
10
10
|
register(:event_system, memoize: true) { EvilEvents::Core::System.new }
|
11
|
-
register(:config, memoize: true) { EvilEvents::Config.new }
|
11
|
+
register(:config, memoize: true) { EvilEvents::Core::Config.new }
|
12
12
|
end
|
13
13
|
end
|
@@ -18,6 +18,9 @@ module EvilEvents::Core
|
|
18
18
|
require_relative 'events/event_extensions/metadata_extendable'
|
19
19
|
require_relative 'events/event_extensions/metadata_extendable/abstract_metadata'
|
20
20
|
require_relative 'events/event_extensions/emittable'
|
21
|
+
require_relative 'events/event_extensions/class_signature'
|
22
|
+
require_relative 'events/event_extensions/class_signature/signature'
|
23
|
+
require_relative 'events/event_extensions/class_signature/equalizer'
|
21
24
|
require_relative 'events/abstract_event'
|
22
25
|
require_relative 'events/manager'
|
23
26
|
require_relative 'events/manager/notifier'
|
@@ -21,6 +21,8 @@ module EvilEvents::Core::Events
|
|
21
21
|
include EventExtensions::Emittable
|
22
22
|
# @since 0.1.0
|
23
23
|
include EventExtensions::MetadataExtendable
|
24
|
+
# @sicne 0.2.0
|
25
|
+
include EventExtensions::ClassSignature
|
24
26
|
# @since 0.1.0
|
25
27
|
extend EvilEvents::Shared::CombinedContext::Mixin
|
26
28
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Core::Events::EventExtensions
|
4
|
+
# @api private
|
5
|
+
# @since 0.2.0
|
6
|
+
module ClassSignature
|
7
|
+
class << self
|
8
|
+
# @param base_calss [Class{AbstractEvent}]
|
9
|
+
#
|
10
|
+
# @since 0.2.0
|
11
|
+
def included(base_class)
|
12
|
+
base_class.extend(ClassMethods)
|
13
|
+
|
14
|
+
base_class.singleton_class.class_eval do
|
15
|
+
attr_accessor :__creation_strategy
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# @since 0.2.0
|
21
|
+
module ClassMethods
|
22
|
+
# @return [Signature]
|
23
|
+
#
|
24
|
+
# @since 0.2.0
|
25
|
+
def signature
|
26
|
+
Signature.new(self)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilEvents::Core::Events::EventExtensions::ClassSignature
|
4
|
+
# @api private
|
5
|
+
# @since 0.2.0
|
6
|
+
class Equalizer
|
7
|
+
# @rreturn [Signature]
|
8
|
+
#
|
9
|
+
# @since 0.2.0
|
10
|
+
attr_reader :signature_a
|
11
|
+
# @rreturn [Signature]
|
12
|
+
#
|
13
|
+
# @since 0.2.0
|
14
|
+
attr_reader :signature_b
|
15
|
+
|
16
|
+
# @param signature_a [Signature]
|
17
|
+
# @param signature_b [Signature]
|
18
|
+
#
|
19
|
+
# @since 0.2.0
|
20
|
+
def initialize(signature_a, signature_b)
|
21
|
+
@signature_a = signature_a
|
22
|
+
@signature_b = signature_b
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [Boolean]
|
26
|
+
#
|
27
|
+
# @since 0.2.0
|
28
|
+
def equal_payload?
|
29
|
+
signature_a.payload_stamp == signature_b.payload_stamp
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [Boolean]
|
33
|
+
#
|
34
|
+
# @since 0.2.0
|
35
|
+
def equal_metadata?
|
36
|
+
signature_a.metadata_stamp == signature_b.metadata_stamp
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [Boolean]
|
40
|
+
#
|
41
|
+
# @since 0.2.0
|
42
|
+
def equal_delegator?
|
43
|
+
signature_a.delegator_stamp == signature_b.delegator_stamp
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Boolean]
|
47
|
+
#
|
48
|
+
# @since 0.2.0
|
49
|
+
def equal_adapter?
|
50
|
+
signature_a.adapter_stamp == signature_b.adapter_stamp
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [Boolean]
|
54
|
+
#
|
55
|
+
# @since 0.2.0
|
56
|
+
def equal_type_alias?
|
57
|
+
signature_a.type_alias_stamp == signature_b.type_alias_stamp
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [Boolean]
|
61
|
+
#
|
62
|
+
# @since 0.2.0
|
63
|
+
def equal_class?
|
64
|
+
signature_a.class_stamp == signature_b.class_stamp
|
65
|
+
end
|
66
|
+
|
67
|
+
# @option strict [Boolean]
|
68
|
+
# @return [Boolean]
|
69
|
+
#
|
70
|
+
# @since 0.2.0
|
71
|
+
def similar_signatures?
|
72
|
+
# rubocop:disable Layout/MultilineOperationIndentation
|
73
|
+
equal_type_alias? &&
|
74
|
+
equal_class? &&
|
75
|
+
equal_payload? &&
|
76
|
+
equal_metadata? &&
|
77
|
+
equal_delegator? &&
|
78
|
+
equal_adapter?
|
79
|
+
# rubocop:enable Layout/MultilineOperationIndentation
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|