0.1
No release in over 3 years
Low commit activity in last 3 years
Think auto incrementing field from SQL for mongoid.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0
>= 0

Runtime

< 8.0, >= 6.0
 Project Readme

mongoid-autoinc

A mongoid plugin to add auto incrementing fields to your documents.

Inline docs Code Climate Build Status

Installation

in gemfile:

gem 'mongoid-autoinc'

in class:

require 'autoinc'

Usage

# app/models/user.rb
class User
  include Mongoid::Document
  include Mongoid::Autoinc
  field :name
  field :number, type: Integer

  increments :number
end

user = User.create(name: 'Dr. Percival "Perry" Ulysses Cox')
user.id # BSON::ObjectId('4d1d150d30f2246bc6000001')
user.number # 1

another_user = User.create(name: 'Bob Kelso')
another_user.number # 2

Scopes

You can scope on document fields. For example:

class PatientFile
  include Mongoid::Document
  include Mongoid::Autoinc

  field :name
  field :number, type: Integer

  increments :number, scope: :patient_id

  belongs_to :patient

end

Scope can also be a Proc:

increments :number, scope: -> { patient.name }

Custom Increment Trigger

You can trigger the assignment of an increment field manually by passing: auto: false to the increment field. This allows for more flexible assignment of your increment number:

class Intern
  include Mongoid::Document
  include Mongoid::Autoinc

  field :name
  field :number

  increments :number, auto: false

  after_save :assign_number_to_jd

protected

  def assign_number_to_jd
    assign!(:number) if number.blank? && name == 'J.D.'
  end

end

Custom Model Name

You can override the model name used to generate the autoincrement keys. This can be useful when working with subclasses or namespaces.

class Intern
  include Mongoid::Document
  include Mongoid::Autoinc

  field :name
  field :number

  increments :number, model_name => :foo
end

Seeds

You can use a seed to start the incrementing field at a given value. The first document created will start at 'seed + 1'.

class Vehicle
  include Mongoid::Document
  include Mongoid::Autoinc

  field :model
  field :vin

  increments :vin, seed: 1000

end

car = Vehicle.new(model: "Coupe")
car.vin # 1001

Step

The step option can be used to specify the amount to increment the field every time a new document is created. If no step is specified, it will increment by 1.

class Ticket
  include Mongoid::Document
  include Mongoid::Autoinc

  field :number

  increments :number, step: 5

end
first_ticket = Ticket.new
first_ticket.number # 5
second_ticket = Ticket.new
second_ticket.number # 10

The step option can also be a Proc:

increments :number, step: -> { 1 + rand(10) }

Development

$ gem install bundler (if you don't have it)
$ bundle install
$ bundle exec spec

Contributing

Contributions

Thanks to Johnny Shields (@johnnyshields) for implementing proc support to scopes And to Marcus Gartner (@mgartner) for implementing the seed functionality

Kris Martin (@krismartin) and Johnny Shields (@johnnyshields) for adding the overwritten model name feature

Copyright

See LICENSE for details