dioteos / mongoid-autoinc

Auto incrementing fields for mongoid documents

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

mongoid-autoinc

Versions

Use 0.1.3 for mongoid 2.0

use 0.3.0 for mongoid 3.0

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

{<img src=“” />}[![Build Status](travis-ci.org/dioteos/mongoid-autoinc.png)](https://travis-ci.org/dioteos/mongoid-autoinc) <img src=“https://codeclimate.com/badge.png” />

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 => lambda { 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

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: lambda { 1 + rand(10) }

Development

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

Contributions

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

See LICENSE for details

About

Auto incrementing fields for mongoid documents

License:MIT License


Languages

Language:Ruby 100.0%