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