class VoucherCode::Config

Voucher code configuration

Attributes

charset[R]
config[R]
count[R]
length[R]
pattern[R]
postfix[R]
prefix[R]

Public Class Methods

new(config = {}) click to toggle source
# File lib/voucher_code/config.rb, line 15
def initialize(config = {})
  @config = config || {}
  @count = config[:count] || 1
  @length = config[:length] || 8
  @charset = config[:charset] || select_charset('alphanumeric')
  @prefix = config[:prefix] || ''
  @postfix = config[:postfix] || ''

  @pattern = if config[:pattern].nil? || config[:pattern].empty?
              looping('#', @length)
            else
              config[:pattern]
            end
end

Public Instance Methods

generate() click to toggle source
# File lib/voucher_code/config.rb, line 30
def generate
  raise 'Not possible to generate some requested codes.' unless feasible?

  codes = {}
  while @count.positive?
    code = generate_single_data

    unless codes[code]
      codes[code] = true
      @count -= 1
    end
  end

  codes.keys
end

Private Instance Methods

feasible?() click to toggle source
# File lib/voucher_code/config.rb, line 78
def feasible?
  (@length ** (@pattern.match(/#/) || []).length) >= @count
end
generate_single_data() click to toggle source
# File lib/voucher_code/config.rb, line 68
def generate_single_data
  code = @pattern.split('').map { |char|
    char == '#' ?
      Helpers::Randomize.random_element(@charset) :
      char
  }.join('')

  "#{@prefix}#{code}#{@postfix}"
end
looping(str, length) click to toggle source
# File lib/voucher_code/config.rb, line 48
def looping(str, length)
  result = ''

  i = 0
  until i > length - 1
    result += str
    i += 1
  end

  result
end
select_charset(name) click to toggle source
# File lib/voucher_code/config.rb, line 60
def select_charset(name)
  selected_charset = Resources::CHARSET[name.to_sym]

  raise 'Invalid charset' unless selected_charset

  selected_charset
end