0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
Mongoid::UPK generates more unique `_id` by using UUID.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Mongoid::UPK build status

Mongoid::UPK generates more unique _id by using UUID.

UPK stands for "unique primary key" or "uuid primary key".

Install

gem install mongoid_upk

Gemfile

gem "mongoid_upk"

Usage

Basic

class MyModel
  include Mongoid::Document
  include Mongoid::UPK
end

or:

class MyModel
  include Mongoid::Document
  include Mongoid::UPK
  uuid_pk # you can leave this out, because it's the default generator
end

Will use UUID (uuid gem by assaf), :compact mode per default.

Pretty UUID

class MyModel
  include Mongoid::Document
  include Mongoid::UPK
  pretty_uuid_pk
end

Almost same as above but with hyphens in it. (Example: c1b457b0-3214-012f-316d-10e6baa29f2c)

Mixed ID

class MyModel
  include Mongoid::Document
  include Mongoid::UPK
  bson_uuid_pk
end

Very long _id with both BSON::ObjectId and UUID. (Example: 4f2e55a2ee911332c4000001-95faf560320f012f315510e6baa29f2c)

Own pk generator

class MyModel
  include Mongoid::Document
  include Mongoid::UPK
  unique_pk do
    # code goes here
    # result must be a string
    # example:
    Digest::MD5.hexdigest(Time.now.to_f.to_s)
  end
end

Example is self-describing.

Motivation

While writing very fast to MongoDB it is possible to take a BSON::ObjectId twice. This will lead to big troubles because you never know which document will be returned.

This gem utilizes the key method and overwrites the automatically given default id with the choosen generator on save. So the real id can be read first after a successful save (I don't want to hack deeper here, because saves are more important than getting a unique id on instance initialization).

UUID is in most cases more reliable, especially if the app instances are set up correctly (and/or running on different machines).

Read more about the UUID gem and how to set up your project (e.g. using unicorn or other threaded webservers).

License

MIT/X11

2012 — Christoph 'asaaki' Grabo