class Sequential::Generator

Attributes

column[R]
record[R]
scope[R]
skip[R]
start_at[R]

Public Class Methods

new(record, options = {}) click to toggle source
# File lib/sequential/generator.rb, line 5
def initialize(record, options = {})
  @record   = record
  @scope    = options[:scope]
  @column   = (options[:column] || :sequential_id).to_sym
  @start_at = options[:start_at] || 1
  @skip     = options[:skip]
end

Public Instance Methods

id_set?() click to toggle source
# File lib/sequential/generator.rb, line 35
def id_set?
  !record.send(column).nil?
end
set() click to toggle source
# File lib/sequential/generator.rb, line 13
def set
  unless id_set? || skip?
    where_opts = {
      model:  record.class.name,
      column: column
    }

    where_opts.merge!(  scope: scope.to_s,
                        scope_value: record.send(scope.to_sym).to_s,
                     ) if scope

    sequence = Sequential::Sequence.where(where_opts).
                                      first_or_create(value: start_at - 1)

    sequence.with_lock do
      sequence.value += 1
      record.send(:"#{column}=", sequence.value)
      sequence.save
    end
  end
end
skip?() click to toggle source
# File lib/sequential/generator.rb, line 39
def skip?
  skip && skip.call(record)
end