Sha256: cab346a71180cecb4acfb9878b4279bf092d659c0f17df98729e978d728682fe

Contents?: true

Size: 988 Bytes

Versions: 1

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: 0

        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

1 entries across 1 versions & 1 rubygems

Version Path
document_number-0.0.1 lib/document_number/has_document_number.rb