Skip to content

Mock creation timestamps of MongoDB objects using their ObjectId

License

Notifications You must be signed in to change notification settings

O1O1O1O/mongoid-bigbang

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mongoid::Bigbang

They say it all started out with a big bang. But, what I wonder is, was it a big bang or did it just seem big because there wasn't anything else drown it out at the time? - Karl Pilkington

Gem Version Build Status

Why?

When you have a project in which you are not using Mongoid::Timestamps and you want to mock an object's creation time, you have to do some cumbersome operations in order to get those first 4 bytes of the ObjectId to represent the seconds since the Unix epoch that you want for that object.

Particularly, if you want to have two objects with the same creation time, it would not suffice to generate the IDs via the BSON::ObjectId.from_time method, since it would yield the same ID for both objects, and you probably do not want them to be seen as the same object.

This gem solves this little annoying issue by generating a unique ID for the given timestamp by using the other 8 bytes in ObjectId to generate the needed additional entropy.

Installation

Add this line to your application's Gemfile:

gem 'mongoid-bigbang'

And then execute:

$ bundle

Or install it yourself as:

$ gem install mongoid-bigbang

Usage

Whenever you want to generate a new ObjectId for a given timestamp, just call the Mongoid::Bigbang.id_from_time method, like follows:

# from time as String
Mongoid::Bigbang.id_from_time('18-01-2015 15:53:00 +0000')

# from time as Integer
Mongoid::Bigbang.id_from_time(1421596380)

# from time as Time
time = Time.parse('18-01-2015 15:53:00 +0000')
Mongoid::Bigbang.id_from_time(time)

It is recommended that you add the following to your spec_helper:

RSpec.configure do |config|
  config.before(:each) do
    Mongoid::Bigbang.clean
  end

  # your other configs...
end

Contributing

  1. Fork it ( https://github.com/dnlserrano/mongoid-bigbang/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

About

Mock creation timestamps of MongoDB objects using their ObjectId

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 100.0%