forked from assaf/vanity
/
helpers.rb
66 lines (62 loc) · 1.71 KB
/
helpers.rb
1
2
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
29
30
31
32
33
34
35
36
37
38
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
65
66
module Vanity
# Helper methods available on Object.
#
# @example From ERB template
# <%= ab_test(:greeting) %> <%= current_user.name %>
# @example From Rails controller
# class AccountController < ApplicationController
# def create
# track! :signup
# Acccount.create! params[:account]
# end
# end
# @example From ActiveRecord
# class Posts < ActiveRecord::Base
# after_create do |post|
# track! :images if post.type == :image
# end
# end
module Helpers
# This method returns one of the alternative values in the named A/B test.
#
# @example A/B two alternatives for a page
# def index
# if ab_test(:new_page) # true/false test
# render action: "new_page"
# else
# render action: "index"
# end
# end
# @example Similar, alternative value is page name
# def index
# render action: ab_test(:new_page)
# end
# @since 1.2.0
def ab_test(name, &block)
if Vanity.playground.using_js?
@_vanity_experiments ||= {}
@_vanity_experiments[name] ||= Vanity.playground.experiment(name).choose
value = @_vanity_experiments[name].value
else
value = Vanity.playground.experiment(name).choose.value
end
if block
content = capture(value, &block)
block_called_from_erb?(block) ? concat(content) : content
else
value
end
end
# Tracks an action associated with a metric.
#
# @example
# track! :invitation
# @since 1.2.0
def track!(name, count = 1)
Vanity.playground.track! name, count
end
end
end
Object.class_eval do
include Vanity::Helpers
end