evil_events 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|