Class: Pwrb::CLI
- Inherits:
-
Object
- Object
- Pwrb::CLI
- Defined in:
- lib/pwrb/cli.rb
Instance Method Summary collapse
- #add(user, site) ⇒ Object
- #copy(user, site) ⇒ Object
- #edit(user, site) ⇒ Object
-
#initialize(db, echo = false) ⇒ CLI
constructor
A new instance of CLI.
- #list(user, site) ⇒ Object
- #new_item(init = {}) ⇒ Object
- #new_password(prompt) ⇒ Object
- #remove(user, site) ⇒ Object
- #select(user, site) ⇒ Object
- #update(user, site) ⇒ Object
Constructor Details
#initialize(db, echo = false) ⇒ CLI
Returns a new instance of CLI.
7 8 9 10 |
# File 'lib/pwrb/cli.rb', line 7 def initialize(db, echo = false) @db = db @echo = echo end |
Instance Method Details
#add(user, site) ⇒ Object
75 76 77 78 79 80 |
# File 'lib/pwrb/cli.rb', line 75 def add(user, site) item = new_item(:user => user, :site => site) item[:password] = new_password("Enter password") @db.insert(item) end |
#copy(user, site) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/pwrb/cli.rb', line 48 def copy(user, site) item = select(user, site) return unless item seconds = 10 original_clipboard = Clipboard.paste sleep(0.1) Clipboard.copy(item[:password]) puts "Password for #{item[:site]} is in clipboard for #{seconds} seconds" begin sleep(seconds) rescue Interrupt Clipboard.copy(original_clipboard) raise end Clipboard.copy(original_clipboard) end |
#edit(user, site) ⇒ Object
82 83 84 85 86 87 |
# File 'lib/pwrb/cli.rb', line 82 def edit(user, site) item = select(user, site) return unless item @db.update(new_item(item.dup)) end |
#list(user, site) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/pwrb/cli.rb', line 12 def list(user, site) result = @db.query(user, site) return if result.empty? table = Tabularize.new table << %w[# ID User Password Site Date] table.separator! result.each_with_index do |p, index| user = p[:user] user += "<%s>" % p[:email] unless p[:email].empty? site = "%s[%s]" % [p[:site], p[:url]] password = (@echo ? p[:password] : "***") table << [index.to_s, p[:id].split('-').first, user, password, site, p[:date]] end puts table end |
#new_item(init = {}) ⇒ Object
96 97 98 99 100 101 102 103 104 105 |
# File 'lib/pwrb/cli.rb', line 96 def new_item(init = {}) item = init item[:user] = ask("User name: ") { |q| q.default = init[:user]; q.validate = /\A\S+\Z/ } item[:email] = ask("Email: ") { |q| q.default = init[:email] } item[:site] = ask("Site: ") { |q| q.default = init[:site]; q.validate = /\A.+\Z/ } item[:url] = ask("URL: ") { |q| q.default = init[:url] } item end |
#new_password(prompt) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/pwrb/cli.rb', line 107 def new_password(prompt) password = ask(prompt + ": ") { |q| q.echo = false } confirm = ask(prompt + " again: ") { |q| q.echo = false } if password == confirm password else puts "Password mismatch, try again!" new_password(prompt) end end |
#remove(user, site) ⇒ Object
89 90 91 92 93 94 |
# File 'lib/pwrb/cli.rb', line 89 def remove(user, site) item = select(user, site) return unless item @db.remove(item) end |
#select(user, site) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/pwrb/cli.rb', line 33 def select(user, site) result = @db.query(user, site) case result.count when 0 nil when 1 result[0] else list(user, site) index = ask('Which one?', Integer) { |q| q.in = 0...result.count } result[index] end end |
#update(user, site) ⇒ Object
68 69 70 71 72 73 |
# File 'lib/pwrb/cli.rb', line 68 def update(user, site) item = select(user, site) return unless item @db.update(item.merge(:password => new_password("Enter new password"))) end |