Flop

Flop is a feature flipper gem for ruby.

Toggle features on and off easily and store feature states in memory or in redis with the different repositories.

Installation

Add this line to your application's Gemfile:

gem 'flop'

And then execute:

$ bundle

Or install it yourself as:

$ gem install flop

Repositories

First, you need to configure where to store everything by setting a repository.

Available repositories are :

  • Flop::Repository::Memory
  • Flop::Repository::Redis

To set the repository, create a new object and affect it to Flop.repo.

Flop.repo = Flop::Repository::Memory.new

require 'redis'

Flop.repo = Flop::Repository::Redis.new(Redis.new)

Redis

The Redis repository requires a Redis connection as its first parameter. The default namespace can be passed as a second parameter.

The default namespace can be a string, an array or a proc.

Flop::Repository::Redis.new(Redis.new, "flop:namespace")
Flop::Repository::Redis.new(Redis.new, [:flop, :namespace])
Flop::Repository::Redis.new(Redis.new, -> { ENV['NAMESPACE'] })

Features

To access a feature, you can call the Flop[] method or create a new Flop::Feature object.

Flop[:example_feature] # is the same as
Flop::Feature.new(:example_feature)

Available methods on Flop::Feature are :

  • feature.active? returns true if the feature is active
  • feature.inactive? returns true if the feature is inactive
  • feature.set(boolean) sets the state of the feature to the passed value
  • feature.activate activates the feature
  • feature.deactivate deactivates the feature
  • feature.toggle toggles the state of the feature
  • feature.with { } executes the block if the feature is active
  • feature.without { } executes the block if the feature is inactive

Examples

Flop.repo = Flop::Repository::Memory.new

Flop[:feature].active? # => false
Flop[:feature].toggle # => true

Flop[:feature].with do
  # code
end

Contributing

  1. Fork it ( https://github.com/gdott9/flop/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request