Class: TrailGuide::Admin::ApplicationController

Inherits:
ApplicationController
  • Object
show all
Defined in:
app/controllers/trail_guide/admin/application_controller.rb

Instance Method Summary collapse

Instance Method Details

#experiment_color(experiment) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 91

def experiment_color(experiment)
  if experiment.winner?
    'primary'
  elsif experiment.started?
    if experiment.stopped?
      'danger'
    elsif experiment.paused?
      'warning'
    else
      'success'
    end
  elsif experiment.scheduled?
    'info'
  else
    'secondary'
  end
end

#experiment_icon(experiment) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 72

def experiment_icon(experiment)
  if experiment.winner?
    'fa-flag-checkered'
  elsif experiment.started?
    if experiment.stopped?
      'fa-stop'
    elsif experiment.paused?
      'fa-pause'
    else
      'fa-play'
    end
  elsif experiment.scheduled?
    'fa-clock'
  else
    'fa-flask'
  end
end

#experiment_metric(experiment, metric = nil, &block) ⇒ Object



57
58
59
60
61
62
63
64
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 57

def experiment_metric(experiment, metric=nil, &block)
  if experiment_metrics_visible?(experiment)
    yield and return if block_given?
    return helpers.number_with_delimiter(metric.to_i)
  end

  return helpers.('span', nil, class: 'fas fa-eye-slash text-muted', data: {toggle: 'tooltip'}, title: "metrics are hidden until this experiment reaches it's target sample size")
end

#experiment_metrics_visible?(experiment) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
54
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 48

def experiment_metrics_visible?(experiment)
  return true unless experiment.started? && !experiment.stopped? && !experiment.winner?
  return true if experiment_peeking?(experiment)
  return false if experiment.combined? && !experiment.combined_experiments.all?(&:target_sample_size_reached?)
  return true if experiment.target_sample_size_reached?
  return false
end

#experiment_peekable?(experiment) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
30
31
32
33
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 27

def experiment_peekable?(experiment)
  return false unless TrailGuide::Admin.configuration.peek_parameter
  return false unless experiment.started? && !experiment.stopped? && !experiment.winner?
  return true  if experiment.combined? && !experiment.combined_experiments.all?(&:target_sample_size_reached?)
  return false if experiment.target_sample_size_reached?
  return true
end

#experiment_peeking?(experiment) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
43
44
45
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 40

def experiment_peeking?(experiment)
  # TODO deprecate the argument/param??
  return params.key?(TrailGuide::Admin.configuration.peek_parameter)
  peek_param == experiment.experiment_name.to_s ||
    experiment.is_combined? && peek_param == experiment.parent.experiment_name.to_s
end

#format_time(time, format = TrailGuide::Admin.configuration.date_format) ⇒ Object



110
111
112
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 110

def format_time(time, format=TrailGuide::Admin.configuration.date_format)
  ActiveSupport::TimeWithZone.new(time.utc, TrailGuide::Admin.configuration.time_zone).strftime(format)
end

#peek_paramObject



36
37
38
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 36

def peek_param
  params[TrailGuide::Admin.configuration.peek_parameter]
end

#peek_url(experiment, *args, **opts) ⇒ Object



67
68
69
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 67

def peek_url(experiment, *args, **opts)
  trail_guide_admin.experiment_url(experiment.experiment_name, *args, opts.merge({TrailGuide::Admin.configuration.peek_parameter => experiment.experiment_name}))
end

#preview_url(variant, *args, **opts) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 6

def preview_url(variant, *args, **opts)
  config_url = variant.experiment.configuration.preview_url
  param = TrailGuide.configuration.override_parameter
  opts = opts.merge({param => {variant.experiment.experiment_name => variant.name}})
  if config_url.respond_to?(:call)
    main_app.instance_exec *args, **opts, &config_url
  elsif config_url.is_a?(Symbol)
    main_app.send(config_url, *args, **opts)
  else
    config_url.to_s + "?#{param.to_s}[#{variant.experiment.experiment_name}]=#{variant.name}"
  end
end

#subtitle(context = self) ⇒ Object



20
21
22
23
24
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 20

def subtitle(context=self)
  subtitle = TrailGuide::Admin.configuration.subtitle
  subtitle = context.instance_exec(&subtitle) if subtitle.respond_to?(:call)
  subtitle
end

#trailguide_userObject



116
117
118
# File 'app/controllers/trail_guide/admin/application_controller.rb', line 116

def trailguide_user
  send TrailGuide::Admin.configuration.experiment_user.to_sym
end