evil_events 0.3.1 → 0.4.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.
Files changed (76) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +10 -1
  4. data/.travis.yml +4 -5
  5. data/CHANGELOG.md +73 -0
  6. data/evil_events.gemspec +6 -3
  7. data/lib/evil_events.rb +3 -0
  8. data/lib/evil_events/core/broadcasting.rb +1 -0
  9. data/lib/evil_events/core/broadcasting/emitter.rb +19 -13
  10. data/lib/evil_events/core/broadcasting/emitter/adapter_proxy.rb +46 -0
  11. data/lib/evil_events/core/config.rb +37 -40
  12. data/lib/evil_events/core/events.rb +34 -3
  13. data/lib/evil_events/core/events/abstract_event.rb +4 -6
  14. data/lib/evil_events/core/events/event_extensions/class_signature.rb +13 -0
  15. data/lib/evil_events/core/events/event_extensions/class_signature/equalizer.rb +0 -2
  16. data/lib/evil_events/core/events/event_extensions/dispatchable.rb +74 -0
  17. data/lib/evil_events/core/events/event_extensions/observable.rb +2 -0
  18. data/lib/evil_events/core/events/event_extensions/serializable.rb +22 -2
  19. data/lib/evil_events/core/events/manager.rb +1 -1
  20. data/lib/evil_events/core/events/manager_registry.rb +16 -0
  21. data/lib/evil_events/core/events/manager_registry/scoped_event_type_matcher.rb +177 -0
  22. data/lib/evil_events/core/events/notifier/sequential.rb +2 -2
  23. data/lib/evil_events/core/events/serializers.rb +13 -2
  24. data/lib/evil_events/core/events/serializers/base.rb +56 -13
  25. data/lib/evil_events/core/events/serializers/base/abstract_engine.rb +47 -0
  26. data/lib/evil_events/core/events/serializers/base/abstract_factory.rb +60 -0
  27. data/lib/evil_events/core/events/serializers/base/data_transformer.rb +57 -0
  28. data/lib/evil_events/core/events/serializers/base/event_serialization_state.rb +80 -0
  29. data/lib/evil_events/core/events/serializers/base/generic_config.rb +7 -0
  30. data/lib/evil_events/core/events/serializers/hash.rb +3 -73
  31. data/lib/evil_events/core/events/serializers/hash/config.rb +11 -0
  32. data/lib/evil_events/core/events/serializers/hash/engines.rb +10 -0
  33. data/lib/evil_events/core/events/serializers/hash/engines/native.rb +60 -0
  34. data/lib/evil_events/core/events/serializers/hash/factory.rb +65 -0
  35. data/lib/evil_events/core/events/serializers/hash/packer.rb +26 -0
  36. data/lib/evil_events/core/events/serializers/hash/unpacker.rb +24 -0
  37. data/lib/evil_events/core/events/serializers/json.rb +3 -59
  38. data/lib/evil_events/core/events/serializers/json/config.rb +11 -0
  39. data/lib/evil_events/core/events/serializers/json/engines.rb +10 -0
  40. data/lib/evil_events/core/events/serializers/json/engines/native.rb +43 -0
  41. data/lib/evil_events/core/events/serializers/json/factory.rb +65 -0
  42. data/lib/evil_events/core/events/serializers/json/packer.rb +26 -0
  43. data/lib/evil_events/core/events/serializers/json/unpacker.rb +31 -0
  44. data/lib/evil_events/core/events/serializers/message_pack.rb +7 -0
  45. data/lib/evil_events/core/events/serializers/message_pack/config.rb +17 -0
  46. data/lib/evil_events/core/events/serializers/message_pack/engines.rb +10 -0
  47. data/lib/evil_events/core/events/serializers/message_pack/engines/mpacker.rb +81 -0
  48. data/lib/evil_events/core/events/serializers/message_pack/factory.rb +65 -0
  49. data/lib/evil_events/core/events/serializers/message_pack/packer.rb +26 -0
  50. data/lib/evil_events/core/events/serializers/message_pack/unpacker.rb +24 -0
  51. data/lib/evil_events/core/events/serializers/xml.rb +7 -0
  52. data/lib/evil_events/core/events/serializers/xml/config.rb +11 -0
  53. data/lib/evil_events/core/events/serializers/xml/engines.rb +10 -0
  54. data/lib/evil_events/core/events/serializers/xml/engines/ox.rb +31 -0
  55. data/lib/evil_events/core/events/serializers/xml/factory.rb +65 -0
  56. data/lib/evil_events/core/events/serializers/xml/packer.rb +26 -0
  57. data/lib/evil_events/core/events/serializers/xml/unpacker.rb +24 -0
  58. data/lib/evil_events/core/events/subscriber/mixin.rb +26 -3
  59. data/lib/evil_events/core/system.rb +28 -2
  60. data/lib/evil_events/core/system/broadcaster.rb +11 -5
  61. data/lib/evil_events/core/system/event_builder.rb +98 -34
  62. data/lib/evil_events/core/system/event_manager.rb +12 -0
  63. data/lib/evil_events/core/system/mock.rb +30 -2
  64. data/lib/evil_events/emitter.rb +4 -2
  65. data/lib/evil_events/error.rb +21 -1
  66. data/lib/evil_events/serializer.rb +14 -0
  67. data/lib/evil_events/shared.rb +1 -3
  68. data/lib/evil_events/shared/any_config.rb +60 -0
  69. data/lib/evil_events/version.rb +2 -2
  70. metadata +85 -14
  71. data/.jrubyrc +0 -1
  72. data/lib/evil_events/core/events/event_extensions/adapter_customizable.rb +0 -49
  73. data/lib/evil_events/core/events/event_extensions/emittable.rb +0 -41
  74. data/lib/evil_events/shared/combined_context.rb +0 -124
  75. data/lib/evil_events/shared/combined_context/mixin.rb +0 -43
  76. data/lib/evil_events/shared/configurable.rb +0 -7
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EvilEvents::Core::Events::EventExtensions
4
- # @api private
5
- # @since 0.1.0
6
- module Emittable
7
- class << self
8
- # @param base_class [Class{AbstractEvent}]
9
- #
10
- # @api private
11
- # @since 0.3.0
12
- def included(base_class)
13
- base_class.extend(ClassMethods)
14
- end
15
- end
16
-
17
- # @return void
18
- #
19
- # @api public
20
- # @since 0.1.0
21
- def emit!
22
- EvilEvents::Core::Bootstrap[:event_system].emit(self)
23
- end
24
-
25
- module ClassMethods
26
- # @option id [NilClass, Object]
27
- # @option payload [Hash]
28
- # @option metadata [Hash]
29
- # @return void
30
- #
31
- # @see EvilEvents::Core::Events::AbstractEvent#initialize
32
- # @see EvilEvents::Core::Events::EventExtensions::Emittable#emit!
33
- #
34
- # @api public
35
- # @since 0.3.0
36
- def emit!(**event_attributes)
37
- new(**event_attributes).emit!
38
- end
39
- end
40
- end
41
- end
@@ -1,124 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EvilEvents
4
- module Shared
5
- # @example
6
- # class EventStorage
7
- # attr_reader :events
8
- #
9
- # def initialize
10
- # @events = []
11
- # end
12
- #
13
- # def store_event(event)
14
- # @events << event
15
- # end
16
- # end
17
- #
18
- # storage = EventStorage.new
19
- # event = 'test_event'
20
- # clojure = proc { store_event(event) }
21
- # context = EvilEvents::Shared::CombinedContext.new(storage, clojure)
22
- #
23
- # storage.events # => []
24
- #
25
- # context.evaluate
26
- # storage.events # => ['test_event']
27
- #
28
- # context.evaluate
29
- # storage.events # => ['test_event', 'test_event']
30
- #
31
- # @since 0.1.0
32
- # @api public
33
- class CombinedContext < BasicObject
34
- # @since 0.1.0
35
- CombinedContextError = ::Class.new(::StandardError)
36
- # @since 0.1.0
37
- NonProcClojureObjectError = ::Class.new(CombinedContextError)
38
-
39
- # @return [Object]
40
- #
41
- # @since 0.1.0
42
- attr_reader :__required_context__
43
-
44
- # @return [Object]
45
- #
46
- # @since 0.1.0
47
- attr_reader :__outer_context__
48
-
49
- # @return [::Kernel]
50
- #
51
- # @since 0.1.0
52
- attr_reader :__kernel_context__
53
-
54
- # @return [Proc]
55
- #
56
- # @since 0.1.0
57
- attr_reader :__clojure__
58
-
59
- # @param required_context [Object]
60
- # @param clojure [Proc]
61
- #
62
- # @since 0.1.0
63
- def initialize(required_context, clojure)
64
- ::Kernel.raise NonProcClojureObjectError unless clojure.is_a?(::Proc)
65
-
66
- @__required_context__ = required_context
67
- @__outer_context__ = ::Kernel.eval('self', clojure.binding)
68
- @__kernel_context__ = ::Kernel
69
- @__clojure__ = clojure
70
- end
71
-
72
- # @return [Object]
73
- #
74
- # @see #method_missing
75
- #
76
- # @since 0.1.0
77
- def evaluate
78
- instance_eval(&__clojure__)
79
- end
80
-
81
- # @see #evaluate
82
- #
83
- # @since 0.1.0
84
- def method_missing(method_name, *arguments, &block)
85
- case
86
- when __outer_context__.respond_to?(method_name)
87
- __outer_context__.public_send(method_name, *arguments, &block)
88
- when __required_context__.respond_to?(method_name)
89
- __required_context__.public_send(method_name, *arguments, &block)
90
- when __kernel_context__.respond_to?(method_name)
91
- __kernel_context__.public_send(method_name, *arguments, &block)
92
- else
93
- super
94
- end
95
- end
96
-
97
- # @see #method_missing
98
- #
99
- # @since 0.1.0
100
- def respond_to_missing?(method_name, include_private = false)
101
- __outer_context__.respond_to?(method_name) ||
102
- __required_context__.respond_to?(method_name) ||
103
- __kernel_context__.respond_to?(method_name) || super
104
- end
105
-
106
- # @see #method_missing
107
- # @see #respond_to_missing?
108
- #
109
- # @since 0.1.0
110
- def method(method_name)
111
- case
112
- when __outer_context__.respond_to?(method_name)
113
- __outer_context__.method(method_name)
114
- when __required_context__.respond_to?(method_name)
115
- __required_context__.method(method_name)
116
- when __kernel_context__.respond_to?(method_name)
117
- __kernel_context__.method(method_name)
118
- else
119
- super
120
- end
121
- end
122
- end
123
- end
124
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EvilEvents::Shared
4
- class CombinedContext
5
- # @example
6
- # require 'securerandom'
7
- #
8
- # class Event
9
- # extend EvilEvents::Shared::CombinedContext::Mixin
10
- #
11
- # class << self
12
- # def type(type = nil)
13
- # @type = type if type
14
- # @type
15
- # end
16
- # end
17
- # end
18
- #
19
- # def get_uuid
20
- # SecureRandom.uuid
21
- # end
22
- #
23
- # MyEvent = Event.evaluate do
24
- # type get_uuid # Event.type + binding#get_uuid => works good :)
25
- # end
26
- #
27
- # @see EvilEvents::Shared::CombinedContext
28
- #
29
- # @api public
30
- # @since 0.1.0
31
- module Mixin
32
- # @param clojure [Proc]
33
- # @return [Object] Clojure evaluation result
34
- #
35
- # @see EvilEvents::Shared::CombinedContext#evaluate
36
- #
37
- # @since 0.1.0
38
- def evaluate(&clojure)
39
- CombinedContext.new(self, clojure).evaluate
40
- end
41
- end
42
- end
43
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EvilEvents::Shared
4
- # @api public
5
- # @since 0.1.0
6
- Configurable = Dry::Configurable
7
- end