Module: Spree::NumberGenerator
- Extended by:
- ActiveSupport::Concern
- Included in:
- Order, Payment, Shipment, StockTransfer
- Defined in:
- app/models/concerns/spree/number_generator.rb
Constant Summary collapse
- NUMBER_LENGTH =
9
- NUMBER_LETTERS =
false
- NUMBER_PREFIX =
'N'
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.by_number(number) ⇒ Object
14 15 16 |
# File 'app/models/concerns/spree/number_generator.rb', line 14 def self.by_number(number) where(number: number) end |
Instance Method Details
#generate_number(options = {}) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'app/models/concerns/spree/number_generator.rb', line 18 def generate_number( = {}) [:length] ||= NUMBER_LENGTH [:letters] ||= NUMBER_LETTERS [:prefix] ||= NUMBER_PREFIX possible = (0..9).to_a possible += ('A'..'Z').to_a if [:letters] self.number ||= loop do # Make a random number. random = "#{[:prefix]}#{(0...[:length]).map { possible.shuffle.first }.join}" # Use the random number if no other order exists with it. if self.class.exists?(number: random) # If over half of all possible options are taken add another digit. [:length] += 1 if self.class.count > (10 ** [:length] / 2) else break random end end end |