class PasswordGenerator::Generator
Attributes
length[R]
letters[R]
options[R]
Public Class Methods
new(length, options)
click to toggle source
@param length [Fixnum] @param options [GENERATE_OptArg]
# File lib/password_generator.rb, line 32 def initialize(length, options) @length, @options = length, options @letters = generate_letters.freeze end
Public Instance Methods
generate()
click to toggle source
@return [String]
# File lib/password_generator.rb, line 38 def generate llen = letters.length # `Array#sample` accepts random generator. # But the feature/syntax makes my anxiety :( length.times.map{letters.fetch(SecureRandom.random_number(llen))}.join end
Private Instance Methods
generate_letters()
click to toggle source
@return [Array<String>]
# File lib/password_generator.rb, line 49 def generate_letters [].tap {|list| list.concat(DOWNCASES) unless options.avoid_downcases list.concat(UPPERCASES) unless options.avoid_uppercases list.concat(NUMBERS) unless options.avoid_numbers list.concat(SYMBOLS) unless options.avoid_symbols list.push(WHITESPACE) unless options.avoid_whitespace unless list.length >= 2 raise ArgumentError, "using letter-list is too short: #{list.inspect}" end } end