evil_events 0.4.0 → 0.5.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/.gitignore +2 -0
- data/.rubocop.yml +3 -0
- data/.travis.yml +30 -7
- data/CHANGELOG.md +24 -0
- data/Gemfile +0 -3
- data/bin/rspec +62 -0
- data/evil_events.gemspec +3 -5
- data/gemfiles/with_native_extensions.gemfile +9 -0
- data/gemfiles/without_native_extensions.gemfile +5 -0
- data/lib/evil_events.rb +1 -3
- data/lib/evil_events/config.rb +2 -2
- data/lib/evil_events/core/activity_logger.rb +1 -1
- data/lib/evil_events/core/config.rb +31 -39
- data/lib/evil_events/core/events.rb +0 -2
- data/lib/evil_events/core/events/event_extensions/dispatchable.rb +1 -1
- data/lib/evil_events/core/events/event_extensions/observable.rb +3 -1
- data/lib/evil_events/core/events/notifier/builder.rb +3 -3
- data/lib/evil_events/core/events/notifier/sequential.rb +2 -2
- data/lib/evil_events/core/events/notifier/worker/executor.rb +1 -1
- data/lib/evil_events/core/events/serializers/base/generic_config.rb +3 -1
- data/lib/evil_events/core/events/serializers/hash/config.rb +1 -3
- data/lib/evil_events/core/events/serializers/hash/factory.rb +3 -6
- data/lib/evil_events/core/events/serializers/json/config.rb +1 -3
- data/lib/evil_events/core/events/serializers/json/factory.rb +3 -6
- data/lib/evil_events/core/events/serializers/message_pack/config.rb +1 -9
- data/lib/evil_events/core/events/serializers/message_pack/engines/.keep +0 -0
- data/lib/evil_events/core/events/serializers/message_pack/factory.rb +3 -7
- data/lib/evil_events/core/events/serializers/xml/config.rb +1 -3
- data/lib/evil_events/core/events/serializers/xml/engines/.keep +0 -0
- data/lib/evil_events/core/events/serializers/xml/factory.rb +3 -6
- data/lib/evil_events/core/events/subscriber.rb +1 -1
- data/lib/evil_events/plugins.rb +10 -4
- data/lib/evil_events/plugins/mpacker_engine.rb +37 -0
- data/lib/evil_events/plugins/mpacker_engine/config.rb +13 -0
- data/lib/evil_events/{core/events/serializers/message_pack/engines → plugins/mpacker_engine}/mpacker.rb +9 -9
- data/lib/evil_events/plugins/oj_engine.rb +36 -0
- data/lib/evil_events/plugins/oj_engine/oj.rb +43 -0
- data/lib/evil_events/plugins/ox_engine.rb +36 -0
- data/lib/evil_events/{core/events/serializers/xml/engines → plugins/ox_engine}/ox.rb +4 -4
- data/lib/evil_events/shared/structure.rb +3 -3
- data/lib/evil_events/version.rb +2 -2
- metadata +21 -41
- data/lib/evil_events/plugins/redis_adapter.rb +0 -6
- data/lib/evil_events/plugins/sidekiq_adapter.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f55a8e9f05384af9d9f133b3672c10d646468aa4fb6c0bbd2f0e1cc0f511933e
|
4
|
+
data.tar.gz: b3cc8858a7b2d8840033da96e58e63cdeb50a52a9b413e473c381cee9e4d5283
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16dee4d83a1a16336732aa196b2c3946c4762e722a2f5a8c28c61e90f35d5edcf649d9d674401bfb40a5eab2f1cdebc3ddb7979b00b4dabfd954e47396b093b8
|
7
|
+
data.tar.gz: f259fb9d9ef65be8f20b6becefe36b379c9e01e1d435d395541eee38ce67005d85df58e3c7a771a4f13caef59033b375b5c109202e31735cb490e1da395b1e62
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -1,12 +1,35 @@
|
|
1
1
|
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.2.10
|
4
|
-
- 2.3.7
|
5
|
-
- 2.4.4
|
6
|
-
- 2.5.1
|
7
|
-
- ruby-head
|
8
|
-
|
9
2
|
sudo: false
|
10
3
|
before_install: gem install bundler
|
11
4
|
cache: bundler
|
12
5
|
script: bundle exec rspec
|
6
|
+
matrix:
|
7
|
+
fast_finish: true
|
8
|
+
include:
|
9
|
+
- rvm: 2.2.10
|
10
|
+
gemfile: gemfiles/with_native_extensions.gemfile
|
11
|
+
env: TEST_NATIVE_EXTENSIONS=true
|
12
|
+
- rvm: 2.3.7
|
13
|
+
gemfile: gemfiles/with_native_extensions.gemfile
|
14
|
+
env: TEST_NATIVE_EXTENSIONS=true
|
15
|
+
- rvm: 2.4.4
|
16
|
+
gemfile: gemfiles/with_native_extensions.gemfile
|
17
|
+
env: TEST_NATIVE_EXTENSIONS=true
|
18
|
+
- rvm: 2.5.1
|
19
|
+
gemfile: gemfiles/with_native_extensions.gemfile
|
20
|
+
env: TEST_NATIVE_EXTENSIONS=true
|
21
|
+
- rvm: ruby-head
|
22
|
+
gemfile: gemfiles/with_native_extensions.gemfile
|
23
|
+
env: TEST_NATIVE_EXTENSIONS=true
|
24
|
+
- rvm: 2.2.10
|
25
|
+
gemfile: gemfiles/without_native_extensions.gemfile
|
26
|
+
- rvm: 2.3.7
|
27
|
+
gemfile: gemfiles/without_native_extensions.gemfile
|
28
|
+
- rvm: 2.4.4
|
29
|
+
gemfile: gemfiles/without_native_extensions.gemfile
|
30
|
+
- rvm: 2.5.1
|
31
|
+
gemfile: gemfiles/without_native_extensions.gemfile
|
32
|
+
- rvm: ruby-head
|
33
|
+
gemfile: gemfiles/without_native_extensions.gemfile
|
34
|
+
- rvm: jruby-head
|
35
|
+
gemfile: gemfiles/without_native_extensions.gemfile
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,30 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [0.5.0] - 2018-05-20
|
5
|
+
### Added
|
6
|
+
- Added Oj serialization engine for JSON format;
|
7
|
+
- JRuby is BACK! 💣
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
- No more `dry-configurable` dependency => gem `qonfig` is used instead;
|
11
|
+
- Moved to plugins:
|
12
|
+
- Ox serialization engine:
|
13
|
+
- requires `gem ox ~> 2.9.2`;
|
14
|
+
- configuration:
|
15
|
+
- `EvilEvents::Plugins.load! :ox_engine`
|
16
|
+
- `EvilEvents::Config.configure { |c| c.serializers.xml.engine = :ox }`
|
17
|
+
- Oj serialization engine:
|
18
|
+
- requires `gem oj ~> 3.6.0`
|
19
|
+
- configuration:
|
20
|
+
- `EvilEvents::Plugins.load! :oj_engine`
|
21
|
+
- `EvilEvents::Config.configure { |c| c.serializers.json.engine = :oj }`
|
22
|
+
- Mpacker serialization engine (uses gem `msgpack` with native dependencies)
|
23
|
+
- requires `gem msgpack ~> 1.2.4`
|
24
|
+
- configuration:
|
25
|
+
- `EvilEvents::Plugins.load! :mpacker_engine`
|
26
|
+
- `EvilEvents::Config.configure { |c| c.serializers.msgpack.engine = :mpacker }`
|
27
|
+
|
4
28
|
## [0.4.0] - 2018-05-02
|
5
29
|
### Added
|
6
30
|
- **Routing Key Based Event Types**. A new way of subscribing to events and approach to event naming: routing-key-based event naming;
|
data/Gemfile
CHANGED
data/bin/rspec
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'pathname'
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
module EvilEventsSpecRunner
|
8
|
+
GEMFILES = {
|
9
|
+
with_native: File.expand_path(
|
10
|
+
File.join('..', '..', 'gemfiles', 'with_native_extensions.gemfile'),
|
11
|
+
Pathname.new(__FILE__).realpath
|
12
|
+
),
|
13
|
+
|
14
|
+
without_naitve: File.expand_path(
|
15
|
+
File.join('..', '..', 'gemfiles', 'without_native_extensions.gemfile'),
|
16
|
+
Pathname.new(__FILE__).realpath
|
17
|
+
)
|
18
|
+
}.freeze
|
19
|
+
|
20
|
+
class << self
|
21
|
+
def run!
|
22
|
+
OptionParser.new do |opts|
|
23
|
+
opts.banner = 'Usage: bin/rspec [options]'
|
24
|
+
|
25
|
+
opts.on('-w', '--without-native-extensions', 'Test without native extensions') do
|
26
|
+
run_without_native_extensions!
|
27
|
+
end
|
28
|
+
|
29
|
+
opts.on('-n', '--with-native-extensions', 'Test with native extensions') do
|
30
|
+
run_with_native_extensions!
|
31
|
+
end
|
32
|
+
|
33
|
+
opts.on('-h', '--help', 'Show this message') do
|
34
|
+
puts opts
|
35
|
+
end
|
36
|
+
end.parse!
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def run_with_native_extensions!
|
42
|
+
ENV['TEST_NATIVE_EXTENSIONS'] = 'true'
|
43
|
+
ENV['BUNDLE_GEMFILE'] = GEMFILES[:with_native]
|
44
|
+
|
45
|
+
run_tests!
|
46
|
+
end
|
47
|
+
|
48
|
+
def run_without_native_extensions!
|
49
|
+
ENV['BUNDLE_GEMFILE'] = GEMFILES[:without_native]
|
50
|
+
|
51
|
+
run_tests!
|
52
|
+
end
|
53
|
+
|
54
|
+
def run_tests!
|
55
|
+
require 'rubygems'
|
56
|
+
require 'bundler/setup'
|
57
|
+
load Gem.bin_path('rspec-core', 'rspec')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
EvilEventsSpecRunner.run!
|
data/evil_events.gemspec
CHANGED
@@ -27,14 +27,12 @@ Gem::Specification.new do |spec|
|
|
27
27
|
end
|
28
28
|
|
29
29
|
spec.add_dependency 'dry-monads', '~> 0.4.0'
|
30
|
-
spec.add_dependency 'dry-types', '~> 0.
|
31
|
-
spec.add_dependency 'dry-struct', '~> 0.
|
32
|
-
spec.add_dependency 'dry-configurable', '~> 0.7.0'
|
30
|
+
spec.add_dependency 'dry-types', '~> 0.13.0'
|
31
|
+
spec.add_dependency 'dry-struct', '~> 0.5.0'
|
33
32
|
spec.add_dependency 'dry-container', '~> 0.6.0'
|
34
33
|
spec.add_dependency 'concurrent-ruby', '~> 1.0.5'
|
35
34
|
spec.add_dependency 'symbiont-ruby', '~> 0.2.0'
|
36
|
-
spec.add_dependency '
|
37
|
-
spec.add_dependency 'msgpack', '~> 1.2.4'
|
35
|
+
spec.add_dependency 'qonfig', '~> 0.1.0'
|
38
36
|
|
39
37
|
spec.add_development_dependency 'coveralls', '~> 0.8.21'
|
40
38
|
spec.add_development_dependency 'simplecov', '~> 0.14.1'
|
data/lib/evil_events.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'dry-configurable'
|
4
3
|
require 'dry-container'
|
5
4
|
require 'dry-struct'
|
6
5
|
require 'dry-types'
|
@@ -9,10 +8,9 @@ require 'concurrent/map'
|
|
9
8
|
require 'symbiont'
|
10
9
|
require 'securerandom'
|
11
10
|
require 'forwardable'
|
12
|
-
require '
|
11
|
+
require 'qonfig'
|
13
12
|
require 'logger'
|
14
13
|
require 'json'
|
15
|
-
require 'ox'
|
16
14
|
|
17
15
|
# @api public
|
18
16
|
# @since 0.1.0
|
data/lib/evil_events/config.rb
CHANGED
@@ -12,14 +12,14 @@ module EvilEvents
|
|
12
12
|
# @api public
|
13
13
|
# @since 0.1.0
|
14
14
|
def options
|
15
|
-
EvilEvents::Core::Bootstrap[:config]
|
15
|
+
EvilEvents::Core::Bootstrap[:config].settings
|
16
16
|
end
|
17
17
|
|
18
18
|
# @see EvilEvents::Core::Config
|
19
19
|
# @api public
|
20
20
|
# @since 0.1.0
|
21
21
|
def configure
|
22
|
-
|
22
|
+
EvilEvents::Core::Bootstrap[:config].configure { |conf| yield(conf) if block_given? }
|
23
23
|
end
|
24
24
|
|
25
25
|
# @see EvilEvents::Config::Types
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module EvilEvents::Core
|
4
4
|
# @api private
|
5
5
|
# @since 0.1.0
|
6
|
-
class Config <
|
6
|
+
class Config < Qonfig::DataSet
|
7
7
|
class << self
|
8
8
|
# @api private
|
9
9
|
# @since 0.1.0
|
@@ -12,55 +12,47 @@ module EvilEvents::Core
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
setting :engine, :native
|
20
|
-
end
|
21
|
-
|
22
|
-
setting :hashing do
|
23
|
-
setting :engine, :native
|
24
|
-
end
|
25
|
-
|
26
|
-
setting :xml do
|
27
|
-
setting :engine, :ox
|
28
|
-
end
|
29
|
-
|
30
|
-
setting :msgpack do
|
31
|
-
setting :engine, :mpacker
|
15
|
+
setting :serializers do
|
16
|
+
setting :json do
|
17
|
+
setting :engine, :native
|
18
|
+
end
|
32
19
|
|
33
|
-
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
20
|
+
setting :hashing do
|
21
|
+
setting :engine, :native
|
37
22
|
end
|
38
23
|
|
39
|
-
setting :
|
40
|
-
setting :
|
24
|
+
setting :xml do
|
25
|
+
setting :engine, :ox
|
41
26
|
end
|
42
27
|
|
43
|
-
setting :
|
44
|
-
setting :
|
28
|
+
setting :msgpack do
|
29
|
+
setting :engine
|
45
30
|
end
|
31
|
+
end
|
46
32
|
|
47
|
-
|
33
|
+
setting :adapter do
|
34
|
+
setting :default, :memory_sync
|
35
|
+
end
|
36
|
+
|
37
|
+
setting :subscriber do
|
38
|
+
setting :default_delegator, :call
|
39
|
+
end
|
48
40
|
|
49
|
-
|
50
|
-
setting :type, :sequential
|
41
|
+
setting :logger, EvilEvents::Shared::Logger.new(STDOUT)
|
51
42
|
|
52
|
-
|
53
|
-
|
54
|
-
|
43
|
+
setting :notifier do
|
44
|
+
setting :type, :sequential
|
45
|
+
|
46
|
+
setting :sequential do
|
47
|
+
# NOTE: place future settings here
|
48
|
+
end
|
55
49
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
end
|
50
|
+
setting :worker do
|
51
|
+
setting :min_threads, 0
|
52
|
+
setting :max_threads, 5
|
53
|
+
setting :max_queue, 1000
|
54
|
+
setting :fallback_policy, :main_thread
|
62
55
|
end
|
63
56
|
end
|
64
|
-
# rubocop:enable Metrics/BlockLength
|
65
57
|
end
|
66
58
|
end
|
@@ -27,14 +27,12 @@ module EvilEvents::Core
|
|
27
27
|
require_relative 'events/serializers/hash/unpacker'
|
28
28
|
require_relative 'events/serializers/xml'
|
29
29
|
require_relative 'events/serializers/xml/engines'
|
30
|
-
require_relative 'events/serializers/xml/engines/ox'
|
31
30
|
require_relative 'events/serializers/xml/config'
|
32
31
|
require_relative 'events/serializers/xml/factory'
|
33
32
|
require_relative 'events/serializers/xml/packer'
|
34
33
|
require_relative 'events/serializers/xml/unpacker'
|
35
34
|
require_relative 'events/serializers/message_pack'
|
36
35
|
require_relative 'events/serializers/message_pack/engines'
|
37
|
-
require_relative 'events/serializers/message_pack/engines/mpacker'
|
38
36
|
require_relative 'events/serializers/message_pack/config'
|
39
37
|
require_relative 'events/serializers/message_pack/factory'
|
40
38
|
require_relative 'events/serializers/message_pack/packer'
|
@@ -52,7 +52,7 @@ module EvilEvents::Core::Events::EventExtensions
|
|
52
52
|
#
|
53
53
|
# @since 0.4.0
|
54
54
|
def adapter_name
|
55
|
-
@adapter_identifier || EvilEvents::Core::Bootstrap[:config].adapter.default
|
55
|
+
@adapter_identifier || EvilEvents::Core::Bootstrap[:config].settings.adapter.default
|
56
56
|
end
|
57
57
|
|
58
58
|
# @option id [NilClass,Object]
|
@@ -36,7 +36,9 @@ module EvilEvents::Core::Events::EventExtensions
|
|
36
36
|
# @since 0.1.0
|
37
37
|
def default_delegator(delegator = nil)
|
38
38
|
@default_delegator = delegator if delegator
|
39
|
-
@default_delegator ||
|
39
|
+
@default_delegator || begin
|
40
|
+
EvilEvents::Core::Bootstrap[:config].settings.subscriber.default_delegator
|
41
|
+
end
|
40
42
|
end
|
41
43
|
|
42
44
|
# @return [Array]
|
@@ -11,7 +11,7 @@ module EvilEvents::Core::Events::Notifier
|
|
11
11
|
# @api private
|
12
12
|
# @since 0.3.0
|
13
13
|
def build_notifier!
|
14
|
-
case EvilEvents::Core::Bootstrap[:config].notifier.type
|
14
|
+
case EvilEvents::Core::Bootstrap[:config].settings.notifier.type
|
15
15
|
when :sequential then build_sequential_notifier!
|
16
16
|
when :worker then build_worker_notifier!
|
17
17
|
else
|
@@ -26,7 +26,7 @@ module EvilEvents::Core::Events::Notifier
|
|
26
26
|
# @api private
|
27
27
|
# @since 0.3.0
|
28
28
|
def build_sequential_notifier!
|
29
|
-
options = EvilEvents::Core::Bootstrap[:config].notifier
|
29
|
+
options = EvilEvents::Core::Bootstrap[:config].to_h[:notifier][:sequential]
|
30
30
|
Sequential.new(**options)
|
31
31
|
end
|
32
32
|
|
@@ -35,7 +35,7 @@ module EvilEvents::Core::Events::Notifier
|
|
35
35
|
# @api private
|
36
36
|
# @since 0.3.0
|
37
37
|
def build_worker_notifier!
|
38
|
-
options = EvilEvents::Core::Bootstrap[:config].notifier
|
38
|
+
options = EvilEvents::Core::Bootstrap[:config].to_h[:notifier][:worker]
|
39
39
|
Worker.new(**options)
|
40
40
|
end
|
41
41
|
end
|
@@ -25,11 +25,11 @@ module EvilEvents::Core::Events::Notifier
|
|
25
25
|
|
26
26
|
log_success(event, subscriber)
|
27
27
|
rescue StandardError => error
|
28
|
+
log_failure(event, subscriber)
|
29
|
+
|
28
30
|
event.__call_on_error_hooks__(error)
|
29
31
|
|
30
32
|
errors_stack << error
|
31
|
-
|
32
|
-
log_failure(event, subscriber)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -60,8 +60,8 @@ class EvilEvents::Core::Events::Notifier::Worker::Executor
|
|
60
60
|
end.on_success do
|
61
61
|
log_success(job.event, job.subscriber)
|
62
62
|
end.on_error do |error|
|
63
|
-
job.event.__call_on_error_hooks__(error)
|
64
63
|
log_failure(job.event, job.subscriber)
|
64
|
+
job.event.__call_on_error_hooks__(error)
|
65
65
|
end.execute
|
66
66
|
rescue Concurrent::RejectedExecutionError
|
67
67
|
raise EvilEvents::WorkerDisabledOrBusyError
|
@@ -10,11 +10,8 @@ class EvilEvents::Core::Events::Serializers
|
|
10
10
|
# @api private
|
11
11
|
# @since 0.4.0
|
12
12
|
def build_config
|
13
|
-
|
14
|
-
|
15
|
-
Config.new do |config|
|
16
|
-
config.engine = settings.engine
|
17
|
-
end
|
13
|
+
options = EvilEvents::Core::Bootstrap[:config].settings.serializers.hashing
|
14
|
+
Config.new.tap { |conf| conf.settings.options = options }
|
18
15
|
end
|
19
16
|
|
20
17
|
# @param config [Hash::Config]
|
@@ -24,7 +21,7 @@ class EvilEvents::Core::Events::Serializers
|
|
24
21
|
# @api private
|
25
22
|
# @since 0.4.0
|
26
23
|
def build_engine(config)
|
27
|
-
Engines.resolve(config.engine).new(config)
|
24
|
+
Engines.resolve(config.settings.options[:engine]).new(config)
|
28
25
|
rescue Dry::Container::Error
|
29
26
|
raise EvilEvents::UnrecognizedSerializationEngineError
|
30
27
|
end
|
@@ -10,11 +10,8 @@ class EvilEvents::Core::Events::Serializers
|
|
10
10
|
# @api private
|
11
11
|
# @since 0.4.0
|
12
12
|
def build_config
|
13
|
-
|
14
|
-
|
15
|
-
Config.new do |config|
|
16
|
-
config.engine = settings.engine
|
17
|
-
end
|
13
|
+
options = EvilEvents::Core::Bootstrap[:config].settings.serializers.json
|
14
|
+
Config.new.tap { |conf| conf.settings.options = options }
|
18
15
|
end
|
19
16
|
|
20
17
|
# @param config [JSON::Config]
|
@@ -24,7 +21,7 @@ class EvilEvents::Core::Events::Serializers
|
|
24
21
|
# @api private
|
25
22
|
# @since 0.4.0
|
26
23
|
def build_engine(config)
|
27
|
-
Engines.resolve(config.engine).new(config)
|
24
|
+
Engines.resolve(config.settings.options[:engine]).new(config)
|
28
25
|
rescue Dry::Container::Error
|
29
26
|
raise EvilEvents::UnrecognizedSerializationEngineError
|
30
27
|
end
|
@@ -4,14 +4,6 @@ class EvilEvents::Core::Events::Serializers
|
|
4
4
|
class MessagePack
|
5
5
|
# @api private
|
6
6
|
# @since 0.4.0
|
7
|
-
|
8
|
-
configure do
|
9
|
-
setting :engine, reader: true
|
10
|
-
|
11
|
-
setting :mpacker, reader: true do
|
12
|
-
setting :configurator, ->(engine) {}
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
7
|
+
Config = Class.new(Base::GenericConfig)
|
16
8
|
end
|
17
9
|
end
|
File without changes
|
@@ -10,12 +10,8 @@ class EvilEvents::Core::Events::Serializers
|
|
10
10
|
# @api private
|
11
11
|
# @since 0.4.0
|
12
12
|
def build_config
|
13
|
-
|
14
|
-
|
15
|
-
Config.new do |config|
|
16
|
-
config.engine = settings.engine
|
17
|
-
config.mpacker.configurator = settings.mpacker.configurator
|
18
|
-
end
|
13
|
+
options = EvilEvents::Core::Bootstrap[:config].settings.serializers.msgpack
|
14
|
+
Config.new.tap { |conf| conf.settings.options = options }
|
19
15
|
end
|
20
16
|
|
21
17
|
# @param config [MessagePack::Config]
|
@@ -25,7 +21,7 @@ class EvilEvents::Core::Events::Serializers
|
|
25
21
|
# @api private
|
26
22
|
# @since 0.4.0
|
27
23
|
def build_engine(config)
|
28
|
-
Engines.resolve(config.engine).new(config)
|
24
|
+
Engines.resolve(config.settings.options[:engine]).new(config)
|
29
25
|
rescue Dry::Container::Error
|
30
26
|
raise EvilEvents::UnrecognizedSerializationEngineError
|
31
27
|
end
|
File without changes
|
@@ -10,11 +10,8 @@ class EvilEvents::Core::Events::Serializers
|
|
10
10
|
# @api private
|
11
11
|
# @since 0.4.0
|
12
12
|
def build_config
|
13
|
-
|
14
|
-
|
15
|
-
Config.new do |config|
|
16
|
-
config.engine = settings.engine
|
17
|
-
end
|
13
|
+
options = EvilEvents::Core::Bootstrap[:config].settings.serializers.xml
|
14
|
+
Config.new.tap { |conf| conf.settings.options = options }
|
18
15
|
end
|
19
16
|
|
20
17
|
# @param config [XML::Config]
|
@@ -24,7 +21,7 @@ class EvilEvents::Core::Events::Serializers
|
|
24
21
|
# @api private
|
25
22
|
# @since 0.4.0
|
26
23
|
def build_engine(config)
|
27
|
-
Engines.resolve(config.engine).new(config)
|
24
|
+
Engines.resolve(config.settings.options[:engine]).new(config)
|
28
25
|
rescue Dry::Container::Error
|
29
26
|
raise EvilEvents::UnrecognizedSerializationEngineError
|
30
27
|
end
|
@@ -46,7 +46,7 @@ module EvilEvents::Core::Events
|
|
46
46
|
#
|
47
47
|
# @since 0.1.0
|
48
48
|
def default_resolver
|
49
|
-
delegation = -> { EvilEvents::Core::Bootstrap[:config].subscriber.default_delegator }
|
49
|
+
delegation = -> { EvilEvents::Core::Bootstrap[:config].settings.subscriber.default_delegator }
|
50
50
|
EvilEvents::Shared::DelegatorResolver.new(delegation)
|
51
51
|
end
|
52
52
|
end
|
data/lib/evil_events/plugins.rb
CHANGED
@@ -4,13 +4,19 @@ module EvilEvents
|
|
4
4
|
# @api public
|
5
5
|
# @since 0.2.0
|
6
6
|
class Plugins
|
7
|
+
require_relative 'plugins/oj_engine'
|
8
|
+
require_relative 'plugins/ox_engine'
|
9
|
+
require_relative 'plugins/mpacker_engine'
|
10
|
+
|
7
11
|
# @since 0.3.0
|
8
12
|
extend Shared::ExtensionsMixin
|
9
13
|
|
10
|
-
# @since 0.
|
11
|
-
register_extension(:
|
12
|
-
# @since 0.
|
13
|
-
register_extension(:
|
14
|
+
# @since 0.5.0
|
15
|
+
register_extension(:oj_engine) { OjEngine.load! }
|
16
|
+
# @since 0.5.0
|
17
|
+
register_extension(:ox_engine) { OxEngine.load! }
|
18
|
+
# @since 0.5.0
|
19
|
+
register_extension(:mpacker_engine) { MpackerEngine.load! }
|
14
20
|
|
15
21
|
class << self
|
16
22
|
# @param plugins [Symbol,Symbol,Symbol,...]
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::Plugins
|
4
|
+
# @api private
|
5
|
+
# @since 0.5.0
|
6
|
+
module MpackerEngine
|
7
|
+
class << self
|
8
|
+
# @return [void]
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
# @since 0.5.0
|
12
|
+
def load!
|
13
|
+
load_dependencies!
|
14
|
+
load_code!
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# @return [void]
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
# @since 0.5.0
|
23
|
+
def load_dependencies!
|
24
|
+
require 'msgpack'
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [void]
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
# @since 0.5.0
|
31
|
+
def load_code!
|
32
|
+
require_relative 'mpacker_engine/config'
|
33
|
+
require_relative 'mpacker_engine/mpacker'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
class EvilEvents::Core::Events::Serializers::MessagePack::Engines
|
4
4
|
# @api private
|
5
|
-
# @since 0.
|
5
|
+
# @since 0.5.0
|
6
6
|
class Mpacker < EvilEvents::Core::Events::Serializers::Base::AbstractEngine
|
7
7
|
# @param config [EvilEvents::Core::Events::Serializers::MessagePack::Config]
|
8
8
|
# @raise [EvilEvents::SerializationEngineError]
|
9
9
|
#
|
10
10
|
# @api private
|
11
|
-
# @since 0.
|
11
|
+
# @since 0.5.0
|
12
12
|
def initialize(config)
|
13
|
-
configurator = config.mpacker
|
13
|
+
configurator = config.settings.options[:mpacker][:configurator]
|
14
14
|
raise EvilEvents::SerializationEngineError unless configurator.is_a?(Proc)
|
15
15
|
@factory = ::MessagePack::Factory.new.tap { |factory| configurator.call(factory) }
|
16
16
|
end
|
@@ -18,7 +18,7 @@ class EvilEvents::Core::Events::Serializers::MessagePack::Engines
|
|
18
18
|
# @param serialization_state [Base::EventSerializationState]
|
19
19
|
# @return [String]
|
20
20
|
#
|
21
|
-
# @since 0.
|
21
|
+
# @since 0.5.0
|
22
22
|
# @api private
|
23
23
|
def dump(serialization_state)
|
24
24
|
packer.pack(
|
@@ -33,7 +33,7 @@ class EvilEvents::Core::Events::Serializers::MessagePack::Engines
|
|
33
33
|
# @raise [EvilEvents::SerializationEngineError]
|
34
34
|
# @return [EventSerializationState]
|
35
35
|
#
|
36
|
-
# @since 0.
|
36
|
+
# @since 0.5.0
|
37
37
|
# @api private
|
38
38
|
def load(message)
|
39
39
|
begin
|
@@ -56,13 +56,13 @@ class EvilEvents::Core::Events::Serializers::MessagePack::Engines
|
|
56
56
|
# @return [::MessagePack::Factory]
|
57
57
|
#
|
58
58
|
# @api private
|
59
|
-
# @since 0.
|
59
|
+
# @since 0.5.0
|
60
60
|
attr_reader :factory
|
61
61
|
|
62
62
|
# @return [::MessagePack::Packer]
|
63
63
|
#
|
64
64
|
# @api private
|
65
|
-
# @since 0.
|
65
|
+
# @since 0.5.0
|
66
66
|
def packer
|
67
67
|
factory.packer
|
68
68
|
end
|
@@ -70,12 +70,12 @@ class EvilEvents::Core::Events::Serializers::MessagePack::Engines
|
|
70
70
|
# @return [::MessagePack::Unpacker]
|
71
71
|
#
|
72
72
|
# @api private
|
73
|
-
# @since 0.
|
73
|
+
# @since 0.5.0
|
74
74
|
def unpacker
|
75
75
|
factory.unpacker(symbolize_keys: true)
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
# @since 0.
|
79
|
+
# @since 0.5.0
|
80
80
|
register(:mpacker, Mpacker)
|
81
81
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::Plugins
|
4
|
+
# @api private
|
5
|
+
# @since 0.5.0
|
6
|
+
module OjEngine
|
7
|
+
class << self
|
8
|
+
# @return [void]
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
# @since 0.5.0
|
12
|
+
def load!
|
13
|
+
load_dependencies!
|
14
|
+
load_code!
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# @return [void]
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
# @since 0.5.0
|
23
|
+
def load_dependencies!
|
24
|
+
require 'oj'
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [void]
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
# @since 0.5.0
|
31
|
+
def load_code!
|
32
|
+
require_relative 'oj_engine/oj'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::Core::Events::Serializers::JSON::Engines
|
4
|
+
# @api private
|
5
|
+
# @since 0.5.0
|
6
|
+
class Oj < EvilEvents::Core::Events::Serializers::Base::AbstractEngine
|
7
|
+
# @param serialization_state [Base::EventSerializationState]
|
8
|
+
# @return [String]
|
9
|
+
#
|
10
|
+
# @since 0.5.0
|
11
|
+
# @api private
|
12
|
+
def dump(serialization_state)
|
13
|
+
::Oj.dump(
|
14
|
+
id: serialization_state.id,
|
15
|
+
type: serialization_state.type,
|
16
|
+
payload: serialization_state.payload,
|
17
|
+
metadata: serialization_state.metadata
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @param json_string [String]
|
22
|
+
# @raise [EvilEvents::SerializationEngineError]
|
23
|
+
# @return [EventSerializationState]
|
24
|
+
#
|
25
|
+
# @since 0.5.0
|
26
|
+
# @api private
|
27
|
+
def load(json_string)
|
28
|
+
json = ::Oj.load(json_string, symbol_keys: true)
|
29
|
+
|
30
|
+
restore_serialization_state(
|
31
|
+
id: json[:id],
|
32
|
+
type: json[:type],
|
33
|
+
payload: json[:payload],
|
34
|
+
metadata: json[:metadata]
|
35
|
+
)
|
36
|
+
rescue ::Oj::Error, NoMethodError, TypeError, ArgumentError
|
37
|
+
raise EvilEvents::SerializationEngineError
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# @since 0.5.0
|
42
|
+
register(:oj, Oj)
|
43
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EvilEvents::Plugins
|
4
|
+
# @api private
|
5
|
+
# @since 0.5.0
|
6
|
+
module OxEngine
|
7
|
+
class << self
|
8
|
+
# @return [void]
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
# @since 0.5.0
|
12
|
+
def load!
|
13
|
+
load_dependencies!
|
14
|
+
load_code!
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# @return [void]
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
# @since 0.5.0
|
23
|
+
def load_dependencies!
|
24
|
+
require 'ox'
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [void]
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
# @since 0.5.0
|
31
|
+
def load_code!
|
32
|
+
require_relative 'ox_engine/ox'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
class EvilEvents::Core::Events::Serializers::XML::Engines
|
4
4
|
# @api private
|
5
|
-
# @since 0.
|
5
|
+
# @since 0.5.0
|
6
6
|
class Ox < EvilEvents::Core::Events::Serializers::Base::AbstractEngine
|
7
7
|
# @param serialization_state [Base::EventSerializationState]
|
8
8
|
# @return [String]
|
9
9
|
#
|
10
|
-
# @since 0.
|
10
|
+
# @since 0.5.0
|
11
11
|
# @api private
|
12
12
|
def dump(serialization_state)
|
13
13
|
::Ox.dump(serialization_state)
|
@@ -17,7 +17,7 @@ class EvilEvents::Core::Events::Serializers::XML::Engines
|
|
17
17
|
# @raise [EvilEvents::SerializationEngineError]
|
18
18
|
# @return [EventSerializationState]
|
19
19
|
#
|
20
|
-
# @since 0.
|
20
|
+
# @since 0.5.0
|
21
21
|
# @api private
|
22
22
|
def load(xml)
|
23
23
|
::Ox.parse_obj(xml)
|
@@ -26,6 +26,6 @@ class EvilEvents::Core::Events::Serializers::XML::Engines
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
# @since 0.
|
29
|
+
# @since 0.5.0
|
30
30
|
register(:ox, Ox)
|
31
31
|
end
|
@@ -4,6 +4,9 @@ module EvilEvents::Shared
|
|
4
4
|
# @api public
|
5
5
|
# @since 0.1.0
|
6
6
|
class Structure < Dry::Struct
|
7
|
+
# NOTE: dry-struct API + dry-initializer API
|
8
|
+
input input.strict
|
9
|
+
|
7
10
|
class << self
|
8
11
|
# @since 0.1.0
|
9
12
|
alias_method :_native_attribute, :attribute
|
@@ -16,8 +19,5 @@ module EvilEvents::Shared
|
|
16
19
|
_native_attribute(key, type)
|
17
20
|
end
|
18
21
|
end
|
19
|
-
|
20
|
-
# NOTE: dry-struct API + dry-initializer API
|
21
|
-
constructor_type :strict_with_defaults
|
22
22
|
end
|
23
23
|
end
|
data/lib/evil_events/version.rb
CHANGED
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.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rustam Ibragimov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-monads
|
@@ -30,42 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.13.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.13.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: dry-struct
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.5.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: dry-configurable
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.7.0
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 0.7.0
|
54
|
+
version: 0.5.0
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: dry-container
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,33 +95,19 @@ dependencies:
|
|
109
95
|
- !ruby/object:Gem::Version
|
110
96
|
version: 0.2.0
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 2.9.2
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: 2.9.2
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: msgpack
|
98
|
+
name: qonfig
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
101
|
- - "~>"
|
130
102
|
- !ruby/object:Gem::Version
|
131
|
-
version: 1.
|
103
|
+
version: 0.1.0
|
132
104
|
type: :runtime
|
133
105
|
prerelease: false
|
134
106
|
version_requirements: !ruby/object:Gem::Requirement
|
135
107
|
requirements:
|
136
108
|
- - "~>"
|
137
109
|
- !ruby/object:Gem::Version
|
138
|
-
version: 1.
|
110
|
+
version: 0.1.0
|
139
111
|
- !ruby/object:Gem::Dependency
|
140
112
|
name: coveralls
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -282,8 +254,11 @@ files:
|
|
282
254
|
- README.md
|
283
255
|
- Rakefile
|
284
256
|
- bin/console
|
257
|
+
- bin/rspec
|
285
258
|
- bin/setup
|
286
259
|
- evil_events.gemspec
|
260
|
+
- gemfiles/with_native_extensions.gemfile
|
261
|
+
- gemfiles/without_native_extensions.gemfile
|
287
262
|
- lib/evil_events.rb
|
288
263
|
- lib/evil_events/application.rb
|
289
264
|
- lib/evil_events/config.rb
|
@@ -359,14 +334,14 @@ files:
|
|
359
334
|
- lib/evil_events/core/events/serializers/message_pack.rb
|
360
335
|
- lib/evil_events/core/events/serializers/message_pack/config.rb
|
361
336
|
- lib/evil_events/core/events/serializers/message_pack/engines.rb
|
362
|
-
- lib/evil_events/core/events/serializers/message_pack/engines
|
337
|
+
- lib/evil_events/core/events/serializers/message_pack/engines/.keep
|
363
338
|
- lib/evil_events/core/events/serializers/message_pack/factory.rb
|
364
339
|
- lib/evil_events/core/events/serializers/message_pack/packer.rb
|
365
340
|
- lib/evil_events/core/events/serializers/message_pack/unpacker.rb
|
366
341
|
- lib/evil_events/core/events/serializers/xml.rb
|
367
342
|
- lib/evil_events/core/events/serializers/xml/config.rb
|
368
343
|
- lib/evil_events/core/events/serializers/xml/engines.rb
|
369
|
-
- lib/evil_events/core/events/serializers/xml/engines
|
344
|
+
- lib/evil_events/core/events/serializers/xml/engines/.keep
|
370
345
|
- lib/evil_events/core/events/serializers/xml/factory.rb
|
371
346
|
- lib/evil_events/core/events/serializers/xml/packer.rb
|
372
347
|
- lib/evil_events/core/events/serializers/xml/unpacker.rb
|
@@ -384,8 +359,13 @@ files:
|
|
384
359
|
- lib/evil_events/error.rb
|
385
360
|
- lib/evil_events/event.rb
|
386
361
|
- lib/evil_events/plugins.rb
|
387
|
-
- lib/evil_events/plugins/
|
388
|
-
- lib/evil_events/plugins/
|
362
|
+
- lib/evil_events/plugins/mpacker_engine.rb
|
363
|
+
- lib/evil_events/plugins/mpacker_engine/config.rb
|
364
|
+
- lib/evil_events/plugins/mpacker_engine/mpacker.rb
|
365
|
+
- lib/evil_events/plugins/oj_engine.rb
|
366
|
+
- lib/evil_events/plugins/oj_engine/oj.rb
|
367
|
+
- lib/evil_events/plugins/ox_engine.rb
|
368
|
+
- lib/evil_events/plugins/ox_engine/ox.rb
|
389
369
|
- lib/evil_events/serializer.rb
|
390
370
|
- lib/evil_events/shared.rb
|
391
371
|
- lib/evil_events/shared/any_config.rb
|