A simple ruby feature flipper
Go to file
Guillaume Dott d66f2c4a5f Add default rake task 2014-09-23 17:06:42 +02:00
lib Add Yaml repository 2014-09-01 17:51:45 +02:00
test Add Yaml repository 2014-09-01 17:51:45 +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 Add Yaml repository 2014-09-01 17:51:45 +02:00
Rakefile Add default rake task 2014-09-23 17:06:42 +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
  • Flop::Repository::Yaml

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'] })

YAML

The Yaml repository requires a yaml file as its first parameter. This repository is read-only so methods like activate, toggle, ... can not be used.

Flop::Repository::Yaml.new('my_file.yml')

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