README.md in flipper-mongo-0.3.0 vs README.md in flipper-mongo-0.5.0

- old
+ new

@@ -1,8 +1,8 @@ # Flipper Mongo -A mongo adapter for [Flipper](https://github.com/jnunemaker/flipper), the feature flipping gems. +A [MongoDB](https://github.com/mongodb/mongo-ruby-driver) adapter for [Flipper](https://github.com/jnunemaker/flipper). ## Installation Add this line to your application's Gemfile: @@ -18,13 +18,63 @@ ## Usage ```ruby require 'flipper/adapters/mongo' -collection = Mongo::Connection.new.db('testing')['flipper'] -adapter = Flipper::Adapters::Mongo.new(collection, 'features') +collection = Mongo::MongoClient.new.db('testing')['flipper'] +adapter = Flipper::Adapters::Mongo.new(collection) flipper = Flipper.new(adapter) # profit... +``` + +## Internals + +Each feature is stored in a document, which means getting a feature is single query. + +```ruby +require 'flipper/adapters/mongo' +collection = Mongo::MongoClient.new.db('testing')['flipper'] +adapter = Flipper::Adapters::Mongo.new(collection) +flipper = Flipper.new(adapter) + +# Register a few groups. +Flipper.register(:admins) { |thing| thing.admin? } +Flipper.register(:early_access) { |thing| thing.early_access? } + +# Create a user class that has flipper_id instance method. +User = Struct.new(:flipper_id) + +flipper[:stats].enable +flipper[:stats].enable flipper.group(:admins) +flipper[:stats].enable flipper.group(:early_access) +flipper[:stats].enable User.new('25') +flipper[:stats].enable User.new('90') +flipper[:stats].enable User.new('180') +flipper[:stats].enable flipper.random(15) +flipper[:stats].enable flipper.actors(45) + +flipper[:search].enable + +puts 'all docs in collection' +pp collection.find.to_a +# all docs in collection +# [{"_id"=>"stats", +# "actors"=>["25", "90", "180"], +# "boolean"=>"true", +# "groups"=>["admins", "early_access"], +# "percentage_of_actors"=>"45", +# "percentage_of_random"=>"15"}, +# {"_id"=>"flipper_features", "features"=>["stats", "search"]}, +# {"_id"=>"search", "boolean"=>"true"}] + +puts 'flipper get of feature' +pp adapter.get(flipper[:stats]) +# flipper get of feature +# {:boolean=>"true", +# :groups=>#<Set: {"admins", "early_access"}>, +# :actors=>#<Set: {"25", "90", "180"}>, +# :percentage_of_actors=>"45", +# :percentage_of_random=>"15"} ``` ## Contributing 1. Fork it