Sha256: 6b383f44e72a6cc8f2b71bdeead0a203000d90fca2d5eba38d18f90c3bd1e702

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

module Split
  module Helper
    def ab_test(experiment_name, *alternatives)
      experiment = Split::Experiment.find_or_create(experiment_name, *alternatives)
      return experiment.winner.name if experiment.winner

      if forced_alternative = override(experiment_name, alternatives)
        return forced_alternative
      end

      ab_user[experiment_name] = experiment.control.name if is_robot?

      if ab_user[experiment_name]
        return ab_user[experiment_name]
      else
        alternative = experiment.next_alternative
        alternative.increment_participation
        ab_user[experiment_name] = alternative.name
        return alternative.name
      end
    end

    def finished(experiment_name)
      return if is_robot?
      alternative_name = ab_user[experiment_name]
      alternative = Split::Alternative.find(alternative_name, experiment_name)
      alternative.increment_completion
      session[:split].delete(experiment_name)
    end

    def override(experiment_name, alternatives)
      return params[experiment_name] if defined?(params) && alternatives.include?(params[experiment_name])
    end

    def ab_user
      session[:split] ||= {}
    end

    def is_robot?
      request.user_agent =~ /\b(Baidu|Gigabot|Googlebot|libwww-perl|lwp-trivial|msnbot|SiteUptime|Slurp|WordPress|ZIBB|ZyBorg)\b/i
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
split-0.2.1 lib/split/helper.rb