Class: TrailGuide::Experiments::Base

Inherits:
Object
  • Object
show all
Includes:
Conversion, Enrollment, Lifecycle, Persistence, Results
Defined in:
lib/trail_guide/experiments/base.rb

Direct Known Subclasses

CombinedExperiment, TrailGuide::Experiment

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Results

included, #winner, #winning_variant

Methods included from Conversion

#allow_conversion?, #convert!

Methods included from Enrollment

#algorithm, #algorithm_choose!, #allow_participation?, #choose!, #choose_variant!

Methods included from Lifecycle

#calibrating?, included, #paused?, #paused_at, #run_callbacks, #running?, #scheduled?, #start!, #started?, #started_at, #stopped?, #stopped_at, #winner?

Methods included from Persistence

included

Constructor Details

#initialize(participant) ⇒ Base

Returns a new instance of Base.



76
77
78
# File 'lib/trail_guide/experiments/base.rb', line 76

def initialize(participant)
  @participant = Experiments::Participant.new(self, participant)
end

Instance Attribute Details

#participantObject (readonly)

Returns the value of attribute participant.



69
70
71
# File 'lib/trail_guide/experiments/base.rb', line 69

def participant
  @participant
end

Class Method Details

.as_json(opts = {}) ⇒ Object



58
59
60
61
62
63
64
65
66
# File 'lib/trail_guide/experiments/base.rb', line 58

def as_json(opts={})
  { experiment_name => {
    started_at: started_at,
    paused_at: paused_at,
    stopped_at: stopped_at,
    winner: winner.try(:name),
    variants: variants.map(&:as_json).reduce({}) { |r,v| r.merge!(v) },
  } }
end

.combined_experimentsObject



54
55
56
# File 'lib/trail_guide/experiments/base.rb', line 54

def combined_experiments
  combined.map { |combo| TrailGuide.catalog.find(combo) }
end

.configurationObject



29
30
31
# File 'lib/trail_guide/experiments/base.rb', line 29

def configuration
  @configuration ||= Experiments::Config.new(self)
end

.configure(*args, &block) ⇒ Object



33
34
35
# File 'lib/trail_guide/experiments/base.rb', line 33

def configure(*args, &block)
  configuration.configure(*args, &block)
end

.experiment_nameObject

TODO alias name once specs have solid coverage



38
39
40
# File 'lib/trail_guide/experiments/base.rb', line 38

def experiment_name
  configuration.name
end

.is_combined?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/trail_guide/experiments/base.rb', line 50

def is_combined?
  false
end

.register!Object



25
26
27
# File 'lib/trail_guide/experiments/base.rb', line 25

def register!
  TrailGuide.catalog.register(self)
end

.variants(include_control = true) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/trail_guide/experiments/base.rb', line 42

def variants(include_control=true)
  if include_control
    configuration.variants
  else
    configuration.variants.select { |var| !var.control? }
  end
end

Instance Method Details

#combined_experimentsObject



80
81
82
83
84
# File 'lib/trail_guide/experiments/base.rb', line 80

def combined_experiments
  @combined_experiments ||= self.class.combined_experiments.map do |combo|
    combo.new(participant.participant)
  end
end