Sha256: 6908cc5416d21d6ba37a97be542d876eb95975589bf095fd7faa1b76db55ca1e

Contents?: true

Size: 988 Bytes

Versions: 3

Compression:

Stored size: 988 Bytes

Contents

module DocumentNumber
  module Model

    def self.included(base)
      base.send :extend, ClassMethods
    end

    module ClassMethods
      # Declare this in your model to automatic document number assignment
      #
      # Usage:
      # class Invoice < ActiveRecord::Base
      #   has_document_number
      # end
      #
      # Options:
      # :column        the column name to update. Default value is `:number`.
      # :prefix        the prefix for number.
      # :start         the start value for number
      def has_document_number(options = {})
        options.reverse_merge! column: :number, prefix: '', start: 1

        method_name = "auto_increment_#{options[:column]}"

        before_create method_name

        define_method method_name do
          return if send(options[:column]).present?
          number = Numerator.next_number(self, options)
          write_attribute options[:column], "#{options[:prefix]}#{number}"
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
document_number-0.9.2 lib/document_number/has_document_number.rb
document_number-0.9.1 lib/document_number/has_document_number.rb
document_number-0.9.0 lib/document_number/has_document_number.rb