Add Feature class and memory repository
parent
7cd77196ca
commit
70c04b7ea8
43
README.md
43
README.md
|
@ -18,7 +18,48 @@ Or install it yourself as:
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
TODO: Write usage instructions here
|
### Repositories
|
||||||
|
|
||||||
|
First, you need to configure where to store everything by setting a repository.
|
||||||
|
|
||||||
|
Available repositories are :
|
||||||
|
- `Flop::Repository::Memory`
|
||||||
|
|
||||||
|
To set the repository, create a new object and affect it to `Flop.repo`.
|
||||||
|
```ruby
|
||||||
|
Flop.repo = Flop::Repository::Memory.new
|
||||||
|
```
|
||||||
|
|
||||||
|
### 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
|
## Contributing
|
||||||
|
|
||||||
|
|
13
lib/flop.rb
13
lib/flop.rb
|
@ -1,5 +1,14 @@
|
||||||
require "flop/version"
|
require 'flop/version'
|
||||||
|
|
||||||
|
require 'flop/feature'
|
||||||
|
require 'flop/repository/memory'
|
||||||
|
|
||||||
module Flop
|
module Flop
|
||||||
# Your code goes here...
|
class << self
|
||||||
|
attr_accessor :repo
|
||||||
|
|
||||||
|
def [](feature)
|
||||||
|
Flop::Feature.new(feature)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
module Flop
|
||||||
|
class Feature
|
||||||
|
attr_accessor :name, :repo
|
||||||
|
|
||||||
|
def initialize(name, repo = Flop.repo)
|
||||||
|
self.name = name.to_sym
|
||||||
|
self.repo = repo
|
||||||
|
end
|
||||||
|
|
||||||
|
def active?
|
||||||
|
repo.get(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def inactive?
|
||||||
|
!active?
|
||||||
|
end
|
||||||
|
|
||||||
|
def set(value)
|
||||||
|
repo.set(name, value)
|
||||||
|
end
|
||||||
|
|
||||||
|
def activate
|
||||||
|
set true
|
||||||
|
end
|
||||||
|
|
||||||
|
def deactivate
|
||||||
|
set false
|
||||||
|
end
|
||||||
|
|
||||||
|
def toggle
|
||||||
|
set !active?
|
||||||
|
end
|
||||||
|
|
||||||
|
def with(&block)
|
||||||
|
yield block if active?
|
||||||
|
end
|
||||||
|
|
||||||
|
def without(&block)
|
||||||
|
yield block if inactive?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,19 @@
|
||||||
|
module Flop
|
||||||
|
module Repository
|
||||||
|
class Memory
|
||||||
|
attr_accessor :features
|
||||||
|
|
||||||
|
def initialize
|
||||||
|
self.features = Hash.new(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(name)
|
||||||
|
features[name]
|
||||||
|
end
|
||||||
|
|
||||||
|
def set(name, value)
|
||||||
|
features[name] = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue