Sha256: 6fdcc090c4528db1aa07168352acb59322bfd61306207ba2dbc0e4f72318bdc2

Contents?: true

Size: 1.71 KB

Versions: 2

Compression:

Stored size: 1.71 KB

Contents

module DocumentNumber
  module Model

    def self.included(base)
      base.send :extend, ClassMethods
      attr_accessor :with_number
    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
      #
      # Use params `with_number` to create an object with predefined number
      def has_document_number(options = {})
        options.reverse_merge! :column => :number, :start => 1

        class_attribute :document_number_options
        self.document_number_options = options.dup

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

        before_create method_name
        after_initialize method_name, :if => Proc.new { with_number == true }

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

      # Use this with your model to obtain an array of numbers
      #
      # Usage:
      # numbers = Invoice.get_numbers(100)
      def get_numbers(quantity)
        Array.new(Integer(quantity)) do
          "#{document_number_options[:prefix]}#{Numerator.next_number(to_s.underscore, document_number_options)}"
        end
      rescue
        []
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
document_number-0.9.6 lib/document_number/has_document_number.rb
document_number-0.9.5 lib/document_number/has_document_number.rb