Adapter for mongo
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
examples
lib
spec
.gitignore
.rspec
.travis.yml
Gemfile
Guardfile
LICENSE
README.md
Rakefile
adapter-mongo.gemspec

README.md

adapter-mongo

Mongo adapter for adapter gem.

require 'adapter/mongo'

key     = BSON::ObjectId.new
client  = Mongo::MongoClient.new.db('adapter')['testing']
adapter = Adapter[:mongo].new(client)
adapter.clear

adapter.write(key, {'some' => 'thing'})
puts 'Should be {"some" => "thing"}: ' + adapter.read(key).inspect

adapter.delete(key)
puts 'Should be nil: ' + adapter.read(key).inspect

adapter.write(key, {'some' => 'thing'})
adapter.clear
puts 'Should be nil: ' + adapter.read(key).inspect

puts 'Should be {"some" => "thing"}: ' + adapter.fetch(key, {'some' => 'thing'}).inspect

Flavors

There are two adapters included with this gem -- :mongo and :mongo_atomic. :mongo assumes that you are writing the full document each time. :mongo_atomic allows for partially updating documents. The difference is best shown with a bit of code.

require 'adapter/mongo_atomic'

key            = BSON::ObjectId.new
full_doc       = {'a' => 'c', 'b' => 'd'}
partial_doc    = {'a' => 'z'}
client         = Mongo::MongoClient.new.db('adapter')['testing']
adapter        = Adapter[:mongo].new(client)
atomic_adapter = Adapter[:mongo_atomic].new(client)

adapter.clear
atomic_adapter.clear

adapter.write(key, full_doc)
adapter.write(key, partial_doc)

doc = adapter.read(key)
doc.delete('_id')

# full doc must always be written with :mongo adapter
puts 'Should be {"a"=>"z"}: ' + doc.inspect

atomic_adapter.write(key, full_doc)
atomic_adapter.write(key, partial_doc)

doc = atomic_adapter.read(key)
doc.delete('_id')

# partial updates can be written with atomic adapter as $set is used
puts 'Should be {"a"=>"z", "b"=>"d"}: ' + doc.inspect

See examples/ or specs/ for more usage.

Contributing

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so we don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine, but bump version in a commit by itself so we can ignore when we pull)
  • Send us a pull request. Bonus points for topic branches.