Module: FieldTest::Helpers

Included in:
Controller, Mailer
Defined in:
lib/field_test/helpers.rb

Instance Method Summary collapse

Instance Method Details

#field_test(experiment, **options) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/field_test/helpers.rb', line 3

def field_test(experiment, **options)
  exp = FieldTest::Experiment.find(experiment)

  participants = FieldTest::Participant.standardize(options[:participant] || field_test_participant)

  if try(:request)
    options = options.dup

    if !options[:variant] && params[:field_test] && params[:field_test][experiment] && exp.variants.include?(params[:field_test][experiment])
      params_variant = params[:field_test][experiment]
    end

    if FieldTest.exclude_bots?
      options[:exclude] = Browser.new(request.user_agent).bot?
    end

    options[:ip] = request.remote_ip
    options[:user_agent] = request.user_agent
  end

  # cache results for request
  @field_test_cache ||= {}

  # don't update variant when passed via params
  @field_test_cache[experiment] ||= params_variant || exp.variant(participants, options)
end

#field_test_converted(experiment, **options) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/field_test/helpers.rb', line 30

def field_test_converted(experiment, **options)
  exp = FieldTest::Experiment.find(experiment)

  participants = FieldTest::Participant.standardize(options[:participant] || field_test_participant)

  exp.convert(participants, goal: options[:goal])
end

#field_test_experiments(**options) ⇒ Object

TODO fetch in single query



39
40
41
42
43
44
45
46
47
48
# File 'lib/field_test/helpers.rb', line 39

def field_test_experiments(**options)
  participants = FieldTest::Participant.standardize(options[:participant] || field_test_participant)
  experiments = {}
  participants.each do |participant|
    FieldTest::Membership.where(participant.where_values).each do |membership|
      experiments[membership.experiment] ||= membership.variant
    end
  end
  experiments
end