class PasswordGenerator

Constants

CONSOSTANTS
DEFAULT_GENERATE_OPTIONS
VOWELS

Public Class Methods

new(options={}) click to toggle source
# File lib/passwords_generator.rb, line 16
def initialize(options={})
  @params = DEFAULT_GENERATE_OPTIONS.merge(options)
  @dictionary = Dictionary.new(@params[:custom_dictionary_file]) unless @params[:without_word]
  @password = ''
end

Public Instance Methods

generate() click to toggle source
# File lib/passwords_generator.rb, line 22
def generate
  @params[:length] < 8 || @params[:without_word] ? generate_without_word : generate_with_word
  unless @params[:skip_upper_case]
    @params[:count_upper_case].times{random_letter_capital}
  end
  @password
end

Private Instance Methods

capital_letter() click to toggle source
# File lib/passwords_generator.rb, line 70
def capital_letter 
  random_index = rand(@password.length - 1)
  random_letter = @password[random_index]
  letter = /[a-z]/.match(random_letter).nil? ? nil : random_letter
  [random_index, letter]
end
generate_with_word(length = @params[:length]) click to toggle source
# File lib/passwords_generator.rb, line 32
def generate_with_word(length = @params[:length])
  if length > 0 
    const = length >= 6 ? rand(4..6) : length
    @password << random_word(const)
    generate_with_word(length-const)
  else 
    @password
  end
end
generate_without_word() click to toggle source
# File lib/passwords_generator.rb, line 42
def generate_without_word 
  @params[:length].times{|number| @password << random_symbol(number) }
end
random_letter_capital() click to toggle source
# File lib/passwords_generator.rb, line 61
def random_letter_capital
  letter = capital_letter
  if letter[1].nil? 
    random_letter_capital
  else 
    @password[letter[0]] = letter[1].upcase
  end
end
random_symbol(number) click to toggle source
# File lib/passwords_generator.rb, line 57
def random_symbol(number)
  number.even? ? VOWELS.sample : CONSOSTANTS.sample
end
random_word(length) click to toggle source
# File lib/passwords_generator.rb, line 46
def random_word(length)
  word = @dictionary.words.sample
  if word.length >= length
    word[0..length-1]
  else
    number_length = length - word.length
    number_length.times{ |i| word << (@params[:skip_number] ? random_symbol(i) : rand(10).to_s)}
    word
  end
end