Module: SplitBuilder

Defined in:
lib/split-builder.rb,
lib/builder/errors.rb,
lib/builder/metric.rb,
lib/builder/schema.rb,
lib/builder/version.rb,
lib/builder/experiment.rb

Defined Under Namespace

Classes: BuilderError, Experiment, ExperimentAlreadyHasMetricError, Metric, MetricAlreadyDefinedError, Schema, UndefinedGoalError

Constant Summary collapse

VERSION =
"0.1.0".freeze

Class Method Summary collapse

Class Method Details

.dump_alternatives(alternatives) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/split-builder.rb', line 31

def dump_alternatives(alternatives)
  alternatives.map do |options|
    {
      options.fetch(:name).to_s => options.fetch(:percent, 50),
    }
  end
end

.dump_experiments(schema) ⇒ Object

Given a SplitBuilder::Schema, get an experiments hash formatted for Split gem.



6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/split-builder.rb', line 6

def dump_experiments(schema)
  schema.experiments.each_with_object({}) do |experiment, experiments|
    metric = schema.get_metric_by_name(experiment.metric_name)

    experiments[experiment.name.to_s] = {
      :metric => metric.name,
      :goals => dump_goals(metric.goals, schema.goals),
      :alternatives => dump_alternatives(experiment.alternatives),
      :resettable => false # TODO: Pull from a default config.
    }
  end
end

.dump_goals(metric_goals, schema_goals) ⇒ Object

Private



21
22
23
24
25
26
27
28
29
# File 'lib/split-builder.rb', line 21

def dump_goals(metric_goals, schema_goals)
  undefined_goals = metric_goals - schema_goals

  if undefined_goals.any?
    raise UndefinedGoalError, "Goals #{undefined_goals.inspect} must be present in schema's defined goals: #{schema_goals.inspect}"
  end

  metric_goals.map(&:to_s)
end