class RubyEventStore::Flipper::NotificationHandler
Attributes
custom_events[R]
event_store[R]
stream_pattern[R]
Public Class Methods
new(event_store, stream_pattern, custom_events)
click to toggle source
# File lib/ruby_event_store/flipper.rb, line 16 def initialize(event_store, stream_pattern, custom_events) @event_store = event_store @stream_pattern = stream_pattern @custom_events = { "ToggleAdded" => Events::ToggleAdded, "ToggleRemoved" => Events::ToggleRemoved, "ToggleGloballyEnabled" => Events::ToggleGloballyEnabled, "ToggleEnabledForActor" => Events::ToggleEnabledForActor, "ToggleEnabledForGroup" => Events::ToggleEnabledForGroup, "ToggleEnabledForPercentageOfActors" => Events::ToggleEnabledForPercentageOfActors, "ToggleEnabledForPercentageOfTime" => Events::ToggleEnabledForPercentageOfTime, "ToggleGloballyDisabled" => Events::ToggleGloballyDisabled, "ToggleDisabledForActor" => Events::ToggleDisabledForActor, "ToggleDisabledForGroup" => Events::ToggleDisabledForGroup, "ToggleDisabledForPercentageOfActors" => Events::ToggleDisabledForPercentageOfActors, "ToggleDisabledForPercentageOfTime" => Events::ToggleDisabledForPercentageOfTime, }.merge(custom_events || {}) end
Public Instance Methods
call(_name, _start, _finish, _id, payload)
click to toggle source
# File lib/ruby_event_store/flipper.rb, line 35 def call(_name, _start, _finish, _id, payload) feature_name = payload.fetch(:feature_name).to_s operation = payload.fetch(:operation) common_payload = { feature_name: feature_name } event_store.publish(build_domain_event(common_payload, operation, payload), stream_name: stream_pattern.(feature_name)) end
Private Instance Methods
build_domain_event(common_payload, operation, payload)
click to toggle source
# File lib/ruby_event_store/flipper.rb, line 46 def build_domain_event(common_payload, operation, payload) case operation when :add event_klass("ToggleAdded").new(data: common_payload) when :remove event_klass("ToggleRemoved").new(data: common_payload) when :enable gate_name = payload.fetch(:gate_name) thing = payload.fetch(:thing) case gate_name when :boolean event_klass("ToggleGloballyEnabled").new(data: common_payload) when :actor event_klass("ToggleEnabledForActor").new(data: common_payload.merge( actor: thing.value, )) when :group event_klass("ToggleEnabledForGroup").new(data: common_payload.merge( group: thing.value.to_s, )) when :percentage_of_actors event_klass("ToggleEnabledForPercentageOfActors").new(data: common_payload.merge( percentage: thing.value, )) when :percentage_of_time event_klass("ToggleEnabledForPercentageOfTime").new(data: common_payload.merge( percentage: thing.value, )) end when :disable gate_name = payload.fetch(:gate_name) thing = payload.fetch(:thing) case gate_name when :boolean event_klass("ToggleGloballyDisabled").new(data: common_payload) when :actor event_klass("ToggleDisabledForActor").new(data: common_payload.merge( actor: thing.value, )) when :group event_klass("ToggleDisabledForGroup").new(data: common_payload.merge( group: thing.value.to_s, )) when :percentage_of_actors event_klass("ToggleDisabledForPercentageOfActors").new(data: common_payload) when :percentage_of_time event_klass("ToggleDisabledForPercentageOfTime").new(data: common_payload) end end end
event_klass(event_name)
click to toggle source
# File lib/ruby_event_store/flipper.rb, line 97 def event_klass(event_name) custom_events.fetch(event_name) end