Module: Yes::Core::Commands::Stateless::HandlerHelpers
- Included in:
- GroupHandler, Handler
- Defined in:
- lib/yes/core/commands/stateless/handler_helpers.rb
Overview
Provides helper methods for checking event stream state in stateless command handlers. Includes methods for checking if subjects have been added, removed, published, etc.
Instance Method Summary collapse
- #activated?(subject, event_name, options = {}) ⇒ Boolean
- #added?(subject, options = {}) ⇒ Boolean
- #deactivated?(subject, event_name, options = {}) ⇒ Boolean
- #disabled?(subject, event_name, options = {}) ⇒ Boolean
- #enabled?(subject, event_name, options = {}) ⇒ Boolean
- #event_exists_with_payload?(subject, payload, event_name, options = {}) ⇒ Boolean
- #event_in_stream?(subject, event_name, options = {}) ⇒ Boolean (also: #changed?)
- #item_added?(subject, payload, event_name, options = {}) ⇒ Boolean
- #item_assigned?(subject, payload, event_name, options = {}) ⇒ Boolean
- #item_removed?(subject, payload, event_name, options = {}) ⇒ Boolean
- #item_unassigned?(subject, payload, event_name, options = {}) ⇒ Boolean
- #no_change?(subject, payload, event_name) ⇒ Boolean
- #partial_payload_field_changed?(subject, payload_field_key, event_name, options = {}) ⇒ Boolean
- #published? ⇒ Boolean
- #removed?(subject, options = {}) ⇒ Boolean
- #skip?(locale, event) ⇒ Boolean
- #unpublished?(subject, options = {}) ⇒ Boolean
Instance Method Details
#activated?(subject, event_name, options = {}) ⇒ Boolean
110 111 112 113 114 115 116 117 118 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 110 def activated?(subject, event_name, = {}) activated_event = last_event(subject, event_name, ) return false unless activated_event deactivated_event = last_event(subject, event_name.sub('Activated', 'Deactivated'), ) return true unless deactivated_event activated_event.stream_revision > deactivated_event.stream_revision end |
#added?(subject, options = {}) ⇒ Boolean
20 21 22 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 20 def added?(subject, = {}) event_in_stream?(subject, 'Added', ) end |
#deactivated?(subject, event_name, options = {}) ⇒ Boolean
124 125 126 127 128 129 130 131 132 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 124 def deactivated?(subject, event_name, = {}) deactivated_event = last_event(subject, event_name, ) return false unless deactivated_event activated_event = last_event(subject, event_name.sub('Deactivated', 'Activated'), ) return true unless activated_event deactivated_event.stream_revision > activated_event.stream_revision end |
#disabled?(subject, event_name, options = {}) ⇒ Boolean
152 153 154 155 156 157 158 159 160 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 152 def disabled?(subject, event_name, = {}) disabled_event = last_event(subject, event_name, ) return false unless disabled_event enabled_event = last_event(subject, event_name.sub('Disabled', 'Enabled'), ) return true unless enabled_event disabled_event.stream_revision > enabled_event.stream_revision end |
#enabled?(subject, event_name, options = {}) ⇒ Boolean
138 139 140 141 142 143 144 145 146 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 138 def enabled?(subject, event_name, = {}) enabled_event = last_event(subject, event_name, ) return false unless enabled_event disabled_event = last_event(subject, event_name.sub('Enabled', 'Disabled'), ) return true unless disabled_event enabled_event.stream_revision > disabled_event.stream_revision end |
#event_exists_with_payload?(subject, payload, event_name, options = {}) ⇒ Boolean
167 168 169 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 167 def event_exists_with_payload?(subject, payload, event_name, = {}) event_in_stream?(subject, event_name, .merge(payload:)) end |
#event_in_stream?(subject, event_name, options = {}) ⇒ Boolean Also known as: changed?
175 176 177 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 175 def event_in_stream?(subject, event_name, = {}) last_event(subject, event_name, ).present? end |
#item_added?(subject, payload, event_name, options = {}) ⇒ Boolean
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 29 def item_added?(subject, payload, event_name, = {}) added_event = last_event(subject, event_name, .merge(payload: { equal: payload })) return false unless added_event removed_event = last_event(subject, event_name.sub('Added', 'Removed'), .merge(payload: { equal: payload })) return true unless removed_event added_event.stream_revision > removed_event.stream_revision end |
#item_assigned?(subject, payload, event_name, options = {}) ⇒ Boolean
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 61 def item_assigned?(subject, payload, event_name, = {}) assigned_event = last_event(subject, event_name, .merge(payload: { equal: payload })) return false unless assigned_event removed_event = last_event(subject, event_name.sub('Assigned', 'Unassigned'), .merge(payload: { equal: payload })) return true unless removed_event assigned_event.stream_revision > removed_event.stream_revision end |
#item_removed?(subject, payload, event_name, options = {}) ⇒ Boolean
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 45 def item_removed?(subject, payload, event_name, = {}) removed_event = last_event(subject, event_name, .merge(payload: { equal: payload })) return false unless removed_event added_event = last_event(subject, event_name.sub('Removed', 'Added'), .merge(payload: { equal: payload })) return true unless added_event removed_event.stream_revision > added_event.stream_revision end |
#item_unassigned?(subject, payload, event_name, options = {}) ⇒ Boolean
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 77 def item_unassigned?(subject, payload, event_name, = {}) unassigned_event = last_event(subject, event_name, .merge(payload: { equal: payload })) return false unless unassigned_event added_event = last_event(subject, event_name.sub('Unassigned', 'Assigned'), .merge(payload: { equal: payload })) return true unless added_event unassigned_event.stream_revision > added_event.stream_revision end |
#no_change?(subject, payload, event_name) ⇒ Boolean
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 184 def no_change?(subject, payload, event_name) = { resolve_payload: true } [:locale] = payload[:locale] if payload[:locale] event = last_event( subject, event_name, , skip_decryption: false ) return false unless event payload = payload.as_json event.data.all? { |k, v| payload[k] == v } end |
#partial_payload_field_changed?(subject, payload_field_key, event_name, options = {}) ⇒ Boolean
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 208 def partial_payload_field_changed?(subject, payload_field_key, event_name, = {}) stream = subject.stream enumerable_events = load_events(stream, options: { direction: 'Forwards' }) partial_data = {} event_type = "#{subject.context}::#{subject.subject}#{event_name}" enumerable_events.each do |result| result.each do |event| next unless event.type == event_type next if [:locale] && skip?([:locale], event) event = resolve_payloads(event) if [:payload] || [:resolve_payload] event.data[payload_field_key.to_s].each do |key, value| partial_data[key] = value end end end partial_data.stringify_keys.merge([:payload].stringify_keys) != partial_data.stringify_keys rescue PgEventstore::StreamNotFoundError true end |
#published? ⇒ Boolean
102 103 104 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 102 def published?(...) !unpublished?(...) end |
#removed?(subject, options = {}) ⇒ Boolean
13 14 15 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 13 def removed?(subject, = {}) event_in_stream?(subject, 'Removed', ) end |
#skip?(locale, event) ⇒ Boolean
236 237 238 239 240 241 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 236 def skip?(locale, event) event_locale = event.data.transform_keys(&:to_s)['locale'].to_s return false if event_locale.empty? event_locale != locale.to_s end |
#unpublished?(subject, options = {}) ⇒ Boolean
91 92 93 94 95 96 97 98 99 |
# File 'lib/yes/core/commands/stateless/handler_helpers.rb', line 91 def unpublished?(subject, = {}) published_event = last_event(subject, 'Published', ) return true unless published_event unpublished_event = last_event(subject, 'Unpublished', ) return false unless unpublished_event unpublished_event.stream_revision > published_event.stream_revision end |