acm 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -1
  3. data/exe/acm +54 -13
  4. data/lib/acm/version.rb +1 -1
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25cfa0755c326883a85c8b3d64e7034ce6b809160d8f1c14386d7c9abe269bf6
4
- data.tar.gz: 516d61261bffbca64ab569886af88df5ff4653c2eee53af1983867924b7771ee
3
+ metadata.gz: 3b36ad4f4d58f49342edd31fad00cd4d69c2dcde572a141dce2954068c88440a
4
+ data.tar.gz: dfe7d646e1d8e2aae1c7af64d3fa8d68a19eed3a2c7bb7c3895e51e041a73ba8
5
5
  SHA512:
6
- metadata.gz: 3896bc1f473bdda5fc5864e1e42b6dd24b9cdcff28e9968c8e6320f4f80a75afddc422dd63da66bf1cd8477d47e7d69193374573a413323de6d155e9f81fe369
7
- data.tar.gz: 244e65db2f672dd48a77eded3d99bd954764fa69b406acd9fb3f0ed184fd24ce92035675a188323afaebcbae5a81fe29dac1b6cfa43d7bafa853ba43272868c9
6
+ metadata.gz: 51e8e91d68d9e9ba06aece546f37ec08fe45fc1606a5bc2355e70641e9286c94b98f146d5ebe7ae6454434f23e043e8a64065c821808f4430672a8ceccfc8741
7
+ data.tar.gz: 540d94db6e7c8e2eb0cbbc57450d0efc5a697aab1bf7e9a73662af175f12f7427d03208c1943e96f6ccd0ca8f273e445a679db54ea55c5885c57d8e60ca72165
data/README.md CHANGED
@@ -9,7 +9,7 @@ Install it yourself as:
9
9
 
10
10
  > gem install acm
11
11
 
12
- If you using Windows, pleas install ffi gem:
12
+ If you are using Windows, please install ffi gem:
13
13
 
14
14
  > gem install ffi
15
15
 
@@ -90,6 +90,19 @@ And remove account:
90
90
  No such account: Gmail
91
91
 
92
92
 
93
+ ## Special key: login-with
94
+
95
+ Special key 'login-with' is reference to other account.
96
+
97
+ > acm add SomeWebService
98
+ (acm) Key? login-with
99
+ (acm) Value? GitHub
100
+ (acm) Key? # Enter to exit.
101
+
102
+ To track reference, use acm show command with --track option.
103
+
104
+ > acm show --track SomeWebService
105
+
93
106
  ## License
94
107
 
95
108
  MIT License
data/exe/acm CHANGED
@@ -10,6 +10,7 @@ require 'clipboard'
10
10
  class MyCLI < Thor
11
11
 
12
12
  DB_FILE = ENV['ACMDB'] || "#{ENV['HOME']}/.accounts"
13
+ REFERENCE_KEY = "login-with"
13
14
 
14
15
  desc "init", "Init database"
15
16
  def init
@@ -37,8 +38,21 @@ class MyCLI < Thor
37
38
  print "(acm) Key? "
38
39
  key = STDIN.gets.chomp.strip
39
40
  break if key.empty?
40
- print "(acm) Value? "
41
- value = STDIN.gets.chomp.strip
41
+ if key == "login-with"
42
+ while true
43
+ print "(acm) Value? "
44
+ value = STDIN.gets.chomp.strip
45
+ ref_account = lookup(value, db)
46
+ if ref_account
47
+ break
48
+ else
49
+ puts "#{value} not exist."
50
+ end
51
+ end
52
+ else
53
+ print "(acm) Value? "
54
+ value = STDIN.gets.chomp.strip
55
+ end
42
56
  details[key] = value
43
57
  end
44
58
  db << ac
@@ -54,30 +68,35 @@ class MyCLI < Thor
54
68
  desc "search PATTERN", "Search accounts by PATTERN"
55
69
  def search(target)
56
70
  db = load_db
57
- pattern = /#{target.encode("utf-8")}/i
58
- accounts = db.select{|a| pattern =~ a['account'].tr(" ", "") }
59
- accounts.each{|a| puts a['account'] }
71
+ accounts = search_accounts(target, db)
72
+ if accounts.empty?
73
+ puts "Not found: #{target}"
74
+ else
75
+ accounts.each{|a| puts a['account'] }
76
+ end
60
77
  end
61
78
 
62
79
  desc "show [options] ACCOUNT", "Show details of ACCOUNT"
63
80
  option :pass, :type => :boolean, :aliases => "-p", :desc => "Show password"
64
81
  option :clip, :type => :boolean, :aliases => "-c", :desc => "Copy password to clipboard"
82
+ option :track, :type => :boolean, :aliases => "-t", :desc => "Track referred account"
65
83
  def show(target)
66
84
  db = load_db
67
85
  account = lookup(target.encode("utf-8"), db)
68
86
  if account
69
87
  puts "Account: #{account['account']}"
70
- account['details'].each do |key, val|
71
- if /pass/ =~ key && !options[:pass]
72
- puts " #{key}: ******"
88
+ print_details(account['details'], options[:pass])
89
+ copy_password(account['details'], options[:clip])
90
+ if options[:track] && account['details'][REFERENCE_KEY]
91
+ ref_account = lookup(account['details'][REFERENCE_KEY], db)
92
+ if ref_account
93
+ puts "\nReference: #{ref_account['account']}"
94
+ print_details(ref_account['details'], options[:pass])
95
+ copy_password(ref_account['details'], options[:clip])
73
96
  else
74
- puts " #{key}: #{val}"
97
+ puts "\nReference not found: #{account['details'][REFERENCE_KEY]}"
75
98
  end
76
99
  end
77
- if options[:clip]
78
- password_key = account['details'].keys.select{|k| /pass/ =~ k}.first
79
- Clipboard.copy(account['details'][password_key])
80
- end
81
100
  else
82
101
  puts "No such account: #{target}"
83
102
  end
@@ -164,6 +183,28 @@ class MyCLI < Thor
164
183
  File.open(DB_FILE, "w"){|f| f.puts db.to_yaml }
165
184
  end
166
185
 
186
+ def search_accounts(target, db)
187
+ pattern = /#{target.encode("utf-8")}/i
188
+ db.select{|a| pattern =~ a['account'].tr(" ", "") }
189
+ end
190
+
191
+ def print_details(details, pass = false)
192
+ details.each do |key, val|
193
+ if /pass/ =~ key && !pass
194
+ puts " #{key}: ******"
195
+ else
196
+ puts " #{key}: #{val}"
197
+ end
198
+ end
199
+ end
200
+
201
+ def copy_password(details, clip = false)
202
+ if clip
203
+ password_key = details.keys.select{|k| /pass/ =~ k}.first
204
+ Clipboard.copy(details[password_key])
205
+ end
206
+ end
207
+
167
208
  end # of class MyCLI
168
209
 
169
210
 
@@ -1,3 +1,3 @@
1
1
  module Acm
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - takatoh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-14 00:00:00.000000000 Z
11
+ date: 2020-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler