Module: FieldTest::Helpers

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
# File 'lib/field_test/helpers.rb', line 3

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

  participants = field_test_participants(options)

  if try(:request)
    if params[:field_test] && params[:field_test][experiment]
      options[:variant] ||= params[:field_test][experiment]
    end
  end

  # cache results for request
  @field_test_cache ||= {}
  @field_test_cache[experiment] ||= exp.variant(participants, options)
end

#field_test_converted(experiment, options = {}) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/field_test/helpers.rb', line 19

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

  participants = field_test_participants(options)

  exp.convert(participants)
end

#field_test_experiments(options = {}) ⇒ Object



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

def field_test_experiments(options = {})
  participants = field_test_participants(options)
  memberships = FieldTest::Membership.where(participant: participants).group_by(&:participant)
  experiments = {}
  participants.each do |participant|
    memberships[participant].each do |membership|
      experiments[membership.experiment] ||= membership.variant
    end
  end
  experiments
end

#field_test_participants(options = {}) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/field_test/helpers.rb', line 39

def field_test_participants(options = {})
  participants = []

  if options[:participant]
    participants << options[:participant]
  else
    if respond_to?(:current_user, true) && current_user
      participants << current_user
    end

    if try(:request)
      # use cookie
      cookie_key = "field_test"
      token = cookies[cookie_key]
      if participants.empty? && !token
        token = SecureRandom.uuid
        cookies[cookie_key] = {value: token, expires: 30.days.from_now}
      end
      if token
        participants << "cookie:#{token.gsub(/[^a-z0-9\-]/i, "")}"
      end
    end
  end

  FieldTest::Participant.standardize(participants)
end