class Hackle::Workspace

Public Class Methods

create(data:) click to toggle source
# File lib/hackle/workspaces/workspace.rb, line 36
def create(data:)
  buckets = Hash[data[:buckets].map { |b| [b[:id], bucket(b)] }]
  running_experiments = Hash[data[:experiments].map { |re| [re[:key], running_experiment(re, buckets)] }]
  completed_experiment = Hash[data[:completedExperiments].map { |ce| [ce[:experimentKey], completed_experiment(ce)] }]
  event_types = Hash[data[:events].map { |e| [e[:key], event_type(e)] }]
  experiments = running_experiments.merge(completed_experiment)
  Workspace.new(
    experiments: experiments,
    event_types: event_types
  )
end
new(experiments:, event_types:) click to toggle source

@param experiments [Hash{Integer => Experiment}] @param event_types [Hash{String => EventType}]

# File lib/hackle/workspaces/workspace.rb, line 6
def initialize(experiments:, event_types:)

  # @type [Hash{Integer => Experiment}]
  @experiments = experiments

  # @type [Hash{String => EventType}]
  @event_types = event_types
end

Private Class Methods

bucket(data) click to toggle source
# File lib/hackle/workspaces/workspace.rb, line 76
def bucket(data)
  Bucket.new(
    seed: data[:seed],
    slot_size: data[:slotSize],
    slots: data[:slots].map { |s| slot(s) }
  )
end
completed_experiment(data) click to toggle source
# File lib/hackle/workspaces/workspace.rb, line 60
def completed_experiment(data)
  Experiment::Completed.new(
    id: data[:experimentId],
    key: data[:experimentKey],
    winner_variation_key: data[:winnerVariationKey]
  )
end
event_type(data) click to toggle source
# File lib/hackle/workspaces/workspace.rb, line 92
def event_type(data)
  EventType.new(
    id: data[:id],
    key: data[:key]
  )
end
running_experiment(data, buckets) click to toggle source
# File lib/hackle/workspaces/workspace.rb, line 50
def running_experiment(data, buckets)
  Experiment::Running.new(
    id: data[:id],
    key: data[:key],
    bucket: buckets[data[:bucketId]],
    variations: Hash[data[:variations].map { |v| [v[:id], variation(v)] }],
    overrides: Hash[data[:execution][:userOverrides].map { |u| [u[:userId], u[:variationId]] }]
  )
end
slot(data) click to toggle source
# File lib/hackle/workspaces/workspace.rb, line 84
def slot(data)
  Slot.new(
    start_inclusive: data[:startInclusive],
    end_exclusive: data[:endExclusive],
    variation_id: data[:variationId]
  )
end
variation(data) click to toggle source
# File lib/hackle/workspaces/workspace.rb, line 68
def variation(data)
  Variation.new(
    id: data[:id],
    key: data[:key],
    dropped: data[:status] == 'DROPPED'
  )
end

Public Instance Methods

get_event_type(event_type_key:) click to toggle source

@param event_type_key [String]

@return [EventType]

# File lib/hackle/workspaces/workspace.rb, line 25
def get_event_type(event_type_key:)
  event_type = @event_types[event_type_key]

  if event_type.nil?
    EventType.undefined(key: event_type_key)
  else
    event_type
  end
end
get_experiment(experiment_key:) click to toggle source

@param experiment_key [Integer]

@return [Experiment, nil]

# File lib/hackle/workspaces/workspace.rb, line 18
def get_experiment(experiment_key:)
  @experiments[experiment_key]
end