Groups

Rollout ships with one group by default: “all”, which does exactly what it
sounds like.

You can activate the all group for the chat feature like this:

$rollout.activate_group(:chat, :all)

You might also want to define your own groups. We have one for our
caretakers:

$rollout.define_group(:caretakers) do |user|
user.caretaker?
end

You can activate multiple groups per feature.

Deactivate groups like this:

$rollout.deactivate_group(:chat, :all)

Specific Users

You might want to let a specific user into a beta test or something. If
that user isn't part of an existing group, you can let them in
specifically:

$rollout.activate_user(:chat, @user)

Deactivate them like this:

$rollout.deactivate_user(:chat, @user)

User Percentages

If you're rolling out a new feature, you might want to test the waters
by slowly letting in a percentage of your users.

$rollout.activate_percentage(:chat, 20)

The algorithm for determining which users get let in is this:

user.id % 10 < percentage / 10

So, for 20%, users 0, 1, 10, 11, 20, 21, etc would be allowed in. Those
users would remain in as the percentage increases.

Deactivate all percentages like this:

$rollout.deactivate_percentage(:chat)

Feature is broken

Deactivate everybody at once:

$rollout.deactivate_all

For some of our less stable features, we are actually measuring the error
rate using redis, and deactivating them automatically when it raises above
a certain threshold. It's pretty cool. See github.com/jamesgolick/degrade
for the failure detection code.

Namespacing

Rollout separates its keys from other keys on the Redis server using the
“feature” keyspace.