Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Smooch allows you to make A/B decisions and report them to KISS Metrics. It combines the power of makings these decisions in Ruby code with the enhcanced reporting of the KISS Metrics Javascript.

branch: master

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 spec
Octocat-spinner-32 .gitignore
Octocat-spinner-32 Gemfile
Octocat-spinner-32 MIT-LICENSE
Octocat-spinner-32 README.mdown
Octocat-spinner-32 Rakefile
Octocat-spinner-32 init.rb
Octocat-spinner-32 smooch.gemspec


KISSmetrics is a great tool and the Javascript API has some niceties that the Ruby API doesn't have, but sometimes it's nice to make decisions in the Rails controller or views. Smooch makes this possible while keeping most of the Javascript features.

Smooch allows you to:

  • Define a user's unique identifier and uses the API to associate it later if not logged in yet

  • Define A/B tests and makes the decision in your Ruby code

  • Record events in your Ruby code

  • Use the same code in your views for development a production but not KISSmetrics about development actions or for other reasons

  • Still use the Javascript API as before if you like

Example Usage


class ApplicationController < ActionController::Base
    kiss :current_user


def new
    km.record("Signup page viewed")
    if km.ab("Show faces in sidebar", ["yes", "no"]) == "yes"
        @profiles =
    @user =

def create
    @user =[:user])
        km.set("User zipcode", @user.zipcode)
        km.record("Signup converted")
        redirect_to @user
        render :new


<%= render 'faces', :users => @profiles if @profiles %>
<%= f.text_field :zipcode
<%= submit_tag km.ab("Signup Button Text", ["Go!", "Submit"]) %>


        <%= km.script %>


  apikey: kiss_metrics_api_key_here


km.script will report the data to KISSmetrics if there is a line in kissmetrics.yml for your environment. In the above example it would have reported the choices about showing faces in the sidebar and the button text as well as the conversion points noted. This would have all been correlated to the user's new id and have set the zipcode if they were successful in the signup.

You can also pass a boolean variable into the call as follows: km.script(tracking_metrics?)

We use this to opt-out site admins from our metrics for more relevant results.


Smooch replicates some of the A/B behaviors of the KISSmetrics library by using (it's own) cookies to remember decisions and be consistent.

For any given set of decisions made or events recorded/set, they are simply given to the Javascript API the next time the application layout is rendered. This will use either flash or in-memory depending on when the calls were made.

Several tactics used from other reporting libraries such as vanity.

Copyright (c) 2011 Brian Leonard, released under the MIT license

Something went wrong with that request. Please try again.