Mongoid Sequence

Mongoid Sequence allows you to specify fields to behave like a sequence number (exactly like the "id" column in conventional SQL flavors).

Credits

This gem was inspired by a couple of gists by masatomo and ShogunPanda.

and

https://github.com/agile42/mongoid_sequence2/ from francis

Usage

setup

since v0.2.3 you can specific custom default storage options for Mongoid::Sequences, eg:

#config/initializers/sequence2.rb
Mongoid::Sequence2.setup do |config|
 config.collection_name = :__sequences
 config.session = :default
end

Include Mongoid::Sequence in your class and call sequence(:field).

Like this:

class Sequenced
    include Mongoid::Document
    include Mongoid::Sequence

    field :my_sequence, :type => Integer
    sequence :my_sequence
end

s1 = Sequenced.create
s1.sequence #=> 1

s2 = Sequenced.create
s2.sequence #=> 2 # and so on

It's also possible to make the id field behave like this:

class Sequenced
    include Mongoid::Document
    include Mongoid::Sequence

    sequence :_id
end

s1 = Sequenced.create
s1.id #=> 1

s2 = Sequenced.create
s2.id #=> 2 # and so on

You can also have any per model sequence without need to create given model's objects:

class Sequenced
    include Mongoid::Document
    include Mongoid::Sequence
end

Sequenced.next_sequence('some_name_1') #=> 1
Sequenced.next_sequence('some_name_1') #=> 2
Sequenced.next_sequence('some_name_2') #=> 1
# can also give an special step
Sequenced.next_sequence('some_name_2', 2) #=> 3

notice:

for v0.2.5, step should only work with no auto_increment field, more info check test/reference_test.rb

Consistency

Mongoid::Sequence uses the atomic findAndModify command, so you shouldn't have to worry about the sequence's consistency.

Installation

Just add it to your projects' Gemfile:

gem "mongoid-sequence2"

Thanks

thanks masatomo, goncalossilva, agile42


Copyright © 2010 Gonçalo Silva, released under the MIT license