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