A simple ruby feature flipper
Go to file
Guillaume Dott 30d1958e46 Add abstract Repository class
The default behaviour is to raise an exception if set or get methods are
not defined in the repository.
2014-09-01 17:41:35 +02:00
lib Add abstract Repository class 2014-09-01 17:41:35 +02:00
test Add abstract Repository class 2014-09-01 17:41:35 +02:00
.gitignore First commit 2014-08-14 17:12:22 +02:00
Gemfile First commit 2014-08-14 17:12:22 +02:00
LICENSE.txt First commit 2014-08-14 17:12:22 +02:00
README.md Describe Redis repository in README 2014-08-18 12:01:10 +02:00
Rakefile Add tests 2014-08-18 10:49:35 +02:00
flop.gemspec Define version dependencies 2014-08-18 15:53:46 +02:00

README.md

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