class WordBank

Attributes

number[R]
special_chars[R]
word_bank[R]

Public Class Methods

new(words, number=8) click to toggle source
# File lib/password_genie_cl.rb, line 38
def initialize(words, number=8)
        self.word_bank= words
        self.number= number
        self.special_chars= special_chars
        @password_ary = []
        @numbers= (0..9).to_a
end

Public Instance Methods

add_caps() click to toggle source
# File lib/password_genie_cl.rb, line 46
def add_caps
        @caps_bank = []
        @word_bank.each do |letter|
                @caps_bank << letter.upcase
        end
        @word_bank.concat(@caps_bank)
        @caps_bank
end
add_numbers() click to toggle source
# File lib/password_genie_cl.rb, line 60
def add_numbers
        @word_bank.concat(@numbers)
        @word_bank
end
add_or_replace_info(site, username, password, choice) click to toggle source
# File lib/password_genie_cl.rb, line 129
def add_or_replace_info(site, username, password, choice)
        begin
                db = SQLite3::Database.open('genie.db')
                return "please set up database by restarting and choosing [1]" unless File.file?('genie.db')
                puts db.get_first_value "select SQLite_VERSION()"
                db.transaction
                if choice == 3
                        db.execute2 "CREATE table if not exists site_info(Id INTEGER PRIMARY KEY, Site TEXT, Username TEXT, Password TEXT)" 
                        db.execute2 "INSERT into site_info(Site, Password, Username) values(:site, :password, :username)" , site, password, username
                else
                        db.execute2 "UPDATE site_info SET Password = :password WHERE Site = :site AND Username = :username" , password, site, username 
                end
                db.commit
                if db.changes != 1
                        alter = "changes"
                else
                        alter = "change"
                end
                puts "you made #{db.changes} #{alter}."
        rescue SQLite3::Exception => e
                puts e
                db.rollback
        ensure
                db.close if db
        end
end
add_special_chars() click to toggle source
# File lib/password_genie_cl.rb, line 55
def add_special_chars
        @word_bank.concat(@special_chars)
        @word_bank
end
create() click to toggle source
# File lib/password_genie_cl.rb, line 65
def create
        i = @number
        until i == 0
                if !@words.nil?
                        if i == 3 && (!(@word_bank & @caps_bank).empty? && (@password_ary & @caps_bank).empty?)
                                @password_ary << @caps_bank[rand(0..@caps_bank.size - 1)]
                        end
                        if i == 2 && (!(@word_bank & @special_chars).empty? && (@password_ary & @special_chars).empty?)
                                @password_ary << @special_chars[rand(0..@special_chars.size - 1)]
                        end
                        if i == 1 && (!(@word_bank & @numbers).empty? && (@password_ary & @numbers).empty?)
                                @password_ary << @numbers[rand(0..@numbers.size - 1)]
                        end                 
                else
                        letter = rand(0..word_bank.size - 1)
                        @password_ary << word_bank[letter]
                        @word_bank.delete_at(letter)                
                        @password = @password_ary.join()

                end
                i -= 1
        end                           
        puts @password
        @password
end
find_info(info) click to toggle source
# File lib/password_genie_cl.rb, line 111
def find_info(info)
        begin
                db = SQLite3::Database.open('genie.db')
                puts db.get_first_value "select SQLite_VERSION()"
                return "please create a directory first" unless File.exist?('genie.db')
                print_out = db.execute2 "SELECT * FROM site_info WHERE Site= :info OR Username = :info", info
                return "no match" unless print_out != nil
                print_out.each do |line|
                        puts "[%5s] %8s | %s" % [line[1], line[2], line[3]]
                end
                puts
        rescue SQLite3::Exception => e
                puts e
        ensure
                db.close if db
        end
end
number=(number) click to toggle source
# File lib/password_genie_cl.rb, line 24
def number= (number)
        unless number.is_a?(Integer)
                raise "whole numbers only, please"
        end
        if number<=0
                raise ">= 0 only, please"
        end
        @number= number
end
save_info(site,username,password=@password) click to toggle source
# File lib/password_genie_cl.rb, line 91
def save_info(site,username,password=@password)
        begin
                db = SQLite3::Database.open('genie.db')
                puts db.get_first_value "select SQLite_VERSION()"
                db.results_as_hash = true
                site_in = site; username_in = username; pw_in = password
                db.transaction
                db.execute "create table if not exists site_info(Id INTEGER PRIMARY KEY, Site TEXT, Username TEXT, Password TEXT)"
                db_in = db.prepare "insert into site_info(Site, Username, Password) values(:site_in, :username_in, :pw_in)"
                db_in.execute site_in, username_in, pw_in
                db.commit
        rescue SQLite3::Exception => e
                puts "something went wrong: #{e}"
                db.rollback
        ensure
                db_in.close if db_in
                db.close if db
        end
end
special_chars=(special_chars) click to toggle source
# File lib/password_genie_cl.rb, line 34
def special_chars=(special_chars)
        @special_chars=[".",",","$"]
end
word_bank=(words) click to toggle source
# File lib/password_genie_cl.rb, line 9
def word_bank= (words)
        if words == ""
                puts "you have elected to design a numeric PIN."
        end
        unless words.is_a?(String)
                raise "entry must be letters"
        end
        word_bank= words.split("").to_a
        word_bank.delete(" ")
        unless word_bank.is_a?(Array)
                raise "word bank must contain letters"
        end
        @word_bank= word_bank
end