class Spree::Core::NumberGenerator

Constants

BASE
DEFAULT_LENGTH

Attributes

length[RW]
prefix[RW]

Public Class Methods

new(options) click to toggle source
# File lib/spree/core/number_generator.rb, line 9
def initialize(options)
  @prefix     = options.fetch(:prefix)
  @length     = options.fetch(:length, DEFAULT_LENGTH)
  @letters    = options[:letters]
end

Public Instance Methods

included(host) click to toggle source
# File lib/spree/core/number_generator.rb, line 15
def included(host)
  generator_instance = self

  host.class_eval do
    validates(:number, presence: true, uniqueness: { allow_blank: true })

    before_validation do |instance|
      instance.number ||= generate_permalink(host)
    end

    define_singleton_method(:number_generator) { generator_instance }

    def generate_permalink(host)
      host.number_generator.generate_permalink(host)
    end
  end
end
new_candidate(length) click to toggle source
# File lib/spree/core/number_generator.rb, line 45
def new_candidate(length)
  characters = @letters ? 36 : 10
  @prefix + SecureRandom.random_number(characters**length).to_s(characters).rjust(length, '0').upcase
end