flop/README.md

102 lines
2.6 KiB
Markdown

# Flop
[![Build Status](https://travis-ci.org/gdott9/flop.svg?branch=master)](https://travis-ci.org/gdott9/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`.
```ruby
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.
```ruby
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.
```ruby
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.
```ruby
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
```ruby
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