module Vanity::Rails::Helpers
Introduces ab_test
helper (controllers and views). Similar to the generic ab_test
method, with the ability to capture content (applicable to views, see examples).
Public Instance Methods
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
@example A/B test inside ERB template (condition)
<%= if ab_test(:banner) %>100% less complexity!<% end %>
@example A/B test inside ERB template (value)
<%= ab_test(:greeting) %> <%= current_user.name %>
@example A/B test inside ERB template (capture)
<% ab_test :features do |count| %> <%= count %> features to choose from! <% end %>
# File lib/vanity/frameworks/rails.rb, line 223 def ab_test(name, &block) current_request = respond_to?(:request) ? self.request : nil value = Vanity.ab_test(name, current_request) if block content = capture(value, &block) if defined?(block_called_from_erb?) && block_called_from_erb?(block) concat(content) else content end else value end end
Return a copy of the active experiments on a page
@example Render
some info about each active experiment in development mode
<% if Rails.env.development? %> <% vanity_experiments.each do |name, alternative| %> <span>Participating in <%= name %>, seeing <%= alternative %>:<%= alternative.value %> </span> <% end %> <% end %>
@example Push experiment values into javascript for use there
<% experiments = vanity_experiments %> <% unless experiments.empty? %> <script> <% experiments.each do |name, alternative| %> myAbTests.<%= name.to_s.camelize(:lower) %> = '<%= alternative.value %>'; <% end %> </script> <% end %>
# File lib/vanity/frameworks/rails.rb, line 291 def vanity_experiments edit_safe_experiments = {} Vanity.context.vanity_active_experiments.each do |name, alternative| edit_safe_experiments[name] = alternative.clone end edit_safe_experiments end
# File lib/vanity/frameworks/rails.rb, line 258 def vanity_h(text) h(text) end
# File lib/vanity/frameworks/rails.rb, line 262 def vanity_html_safe(text) if text.respond_to?(:html_safe) text.html_safe else text end end
# File lib/vanity/frameworks/rails.rb, line 251 def vanity_js return if Vanity.context.vanity_active_experiments.nil? || Vanity.context.vanity_active_experiments.empty? javascript_tag do render :file => Vanity.template("_vanity"), :formats => [:js] end end
# File lib/vanity/frameworks/rails.rb, line 270 def vanity_simple_format(text, html_options={}) vanity_html_safe(simple_format(text, html_options)) end
Generate url with the identity of the current user and the metric to track on click
# File lib/vanity/frameworks/rails.rb, line 240 def vanity_track_url_for(identity, metric, options = {}) options = options.merge(:_identity => identity, :_track => metric) url_for(options) end
Generate url with the fingerprint for the current Vanity
experiment
# File lib/vanity/frameworks/rails.rb, line 246 def vanity_tracking_image(identity, metric, options = {}) options = options.merge(:controller => :vanity, :action => :image, :_identity => identity, :_track => metric) image_tag(url_for(options), :width => "1px", :height => "1px", :alt => "") end