class Pass
Constants
- MIN_NUM_CHARACTERS
- NUM_CHARACTERS
- VERSION
Public Class Methods
generate(num = NUM_CHARACTERS)
click to toggle source
# File lib/pass.rb, line 48 def Pass.generate(num = NUM_CHARACTERS) Pass.new.generate(num) end
new()
click to toggle source
# File lib/pass.rb, line 10 def initialize @list_carachters = ('a'..'z').to_a + ('A'..'Z').to_a + ('1'..'9').to_a - %w[l o I O 1] @num_iteration = 100 # Password must include digit, upper case, and lower case. @validation_regexps = [/\d/, /[a-z]/, /[A-Z]/] end
Public Instance Methods
exec(argv)
click to toggle source
# File lib/pass.rb, line 52 def exec(argv) num_characters = NUM_CHARACTERS opts = OptionParser.new opts.on('-c NUM', 'specify password length') do |value| num_characters = value end opts.on_tail('-v', '--version', 'show version') do puts "#{self.class.name} #{version}" exit 0 end opts.banner = <<END Usage: pass [options] [number of passwords] Description: Generates random passwords. Options: END begin res_argv = opts.parse!(argv) num_times = res_argv[0] || 1 puts multi_generate(num_times.to_i, num_characters.to_i) rescue SystemExit rescue Exception => e $stderr.puts "Error: #{e.message}" exit 1 end exit 0 end
generate(num = NUM_CHARACTERS)
click to toggle source
# File lib/pass.rb, line 18 def generate(num = NUM_CHARACTERS) if !integer?(num) || num < MIN_NUM_CHARACTERS raise Pass::Error, "Invalid Argument: number of characters should be more than #{MIN_NUM_CHARACTERS}." end @num_iteration.times do rest_num = num pass = "" while rest_num > list_size do pass += generate_password(list_size) rest_num -= list_size end pass += generate_password(rest_num) return pass if valid?(pass) end raise Pass::Error, "Not Converged: #{@num_iteration} times" end
multi_generate(num_password, num_character = NUM_CHARACTERS)
click to toggle source
# File lib/pass.rb, line 40 def multi_generate(num_password, num_character = NUM_CHARACTERS) passwords = [] num_password.times do passwords << generate(num_character) end passwords end
num_iteration()
click to toggle source
# File lib/pass.rb, line 82 def num_iteration @num_iteration end
num_iteration=(value)
click to toggle source
# File lib/pass.rb, line 86 def num_iteration=(value) raise(Error, "Invalid Argument: num_iteration #{value}") if !integer?(value) || value <= 0 @num_iteration = value end
valid?(pass)
click to toggle source
# File lib/pass.rb, line 36 def valid?(pass) @validation_regexps.all?{|reg| reg =~ pass} end
version()
click to toggle source
# File lib/pass.rb, line 91 def version VERSION end
Private Instance Methods
generate_password(num)
click to toggle source
# File lib/pass.rb, line 104 def generate_password(num) raise ArgumentError, "argument must be less than #{list_size}" if num > list_size @list_carachters.sample(num).join end
integer?(value)
click to toggle source
# File lib/pass.rb, line 96 def integer?(value) value.kind_of?(Integer) end
list_size()
click to toggle source
# File lib/pass.rb, line 100 def list_size @list_carachters.size end