aka2 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6b42c6d23b25160f7d666276d36d857b4aa047ef
4
+ data.tar.gz: a5002d7e07128d791043eca594a07c8cfdec78a0
5
+ SHA512:
6
+ metadata.gz: e3c58913ffefbb616c13aeea0c7441044cb4d4255d95f9e0889b00cc4b5e3b54faef0cf02b932997d921b516f7c66266c35e153f6acd61643ada7d7ddd4d33ac
7
+ data.tar.gz: 9816c945c799fec31e5574941bdd4dd9a3533795c8573facbae5d79f47de2db1d447c15ed3cd7064ab4ea8eff4b1072cdf3db84b7b5cb9de59102c51a67a3d9e
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in aka.gemspec
4
+ gemspec
@@ -0,0 +1,32 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ aka (0.0.1)
5
+ colorize (~> 0)
6
+ net-scp (~> 1.2, >= 1.2.1)
7
+ safe_yaml (~> 1.0, >= 1.0.4)
8
+ thor (~> 0.19.1)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ colorize (0.7.7)
14
+ minitest (5.7.0)
15
+ net-scp (1.2.1)
16
+ net-ssh (>= 2.6.5)
17
+ net-ssh (2.9.2)
18
+ rake (10.4.2)
19
+ safe_yaml (1.0.4)
20
+ thor (0.19.1)
21
+
22
+ PLATFORMS
23
+ ruby
24
+
25
+ DEPENDENCIES
26
+ aka!
27
+ bundler (~> 1.10)
28
+ minitest (~> 5.7)
29
+ rake (~> 10.0)
30
+
31
+ BUNDLED WITH
32
+ 1.10.2
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Ryan Goh
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,37 @@
1
+ # aka - The Missing Alias Manager
2
+
3
+ aka generate/edit/destroy/find permanent aliases with a single command.
4
+
5
+ aka2 requires ruby and is built for bash and zsh users.
6
+
7
+ ## Installation
8
+
9
+ $ gem install aka2
10
+
11
+ ## Usage
12
+
13
+ $ aka generate hello="echo helloworld"
14
+ $ aka destroy hello
15
+ $ aka edit hello
16
+ $ aka find hello
17
+ $ aka usage
18
+ $ aka
19
+
20
+ ## Requirement
21
+
22
+ Ruby
23
+
24
+ ## Development
25
+
26
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
27
+
28
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
29
+
30
+ ## Contributing
31
+
32
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ryangoh/aka2.
33
+
34
+
35
+ ## License
36
+
37
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'aka/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "aka2"
8
+ spec.version = Aka::VERSION
9
+ spec.authors = ["Bryan Lim","Ryan Goh"]
10
+ spec.email = ["ytbryan@gmail.com","gohengkeat89@gmail.com"]
11
+
12
+ spec.summary = %q{The Missing Alias Manager}
13
+ spec.description = %q{aka generate/edit/destroy/find permanent aliases with a single command. }
14
+ spec.homepage = "https://github.com/ytbryan/aka-gem"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ #spec.bindir = "exe"
19
+ #spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.executables = ["aka"]
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.required_ruby_version = ">= 2.2.2"
24
+
25
+
26
+ spec.add_runtime_dependency 'net-scp', '~> 1.2', '>= 1.2.1'
27
+ # spec.add_runtime_dependency 'open-uri'
28
+ spec.add_runtime_dependency 'colorize', '~> 0'
29
+ spec.add_runtime_dependency "safe_yaml", '~> 1.0', '>= 1.0.4'
30
+ spec.add_runtime_dependency 'thor' , '~> 0.19.1'
31
+ # spec.add_runtime_dependency 'fileutils'
32
+
33
+ spec.add_development_dependency "bundler", "~> 1.10"
34
+ spec.add_development_dependency "rake", "~> 10.0"
35
+ spec.add_development_dependency "minitest", "~> 5.7"
36
+ end
data/bin/aka ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'aka'
4
+
5
+ Aka::Base.start(ARGV)
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "aka"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,9 @@
1
+ ---
2
+ dotfile: "/home/ryan/.bashrc"
3
+ history: "/home/ryan/.bash_history"
4
+ home: "/home/ryan/.aka"
5
+ install: "/usr/local/bin"
6
+ profile: "/home/ryan/.bashrc"
7
+ list: 50
8
+ usage: 50
9
+ remote: 12.12.12.21
@@ -0,0 +1,1188 @@
1
+ require "aka/version"
2
+ require 'net/scp'
3
+ require 'open-uri'
4
+ require 'colorize'
5
+ require "safe_yaml/load"
6
+ require 'thor'
7
+ require 'fileutils'
8
+
9
+ module Aka
10
+ class Base < Thor
11
+ check_unknown_options!
12
+ package_name "aka"
13
+ default_task :list
14
+ map "dl" => "download",
15
+ "g" => "generate",
16
+ "d" => "destroy",
17
+ "f" => "find",
18
+ "up" => "upload",
19
+ "u" => "usage",
20
+ "l" => "list",
21
+ "e" => "edit",
22
+ "c" => "clean",
23
+ "h" => "help"
24
+
25
+ #
26
+ # DOWNLOAD
27
+ # aka download --to ~/Desktop/ --login admin@162.243.249.154:22000 --from /home/admin/hello desc "download [path]", "download a dot file"
28
+ desc "download", "download dotfile from server"
29
+ method_options :from => :string
30
+ method_options :to => :string
31
+ method_options :login => :string
32
+ def download
33
+ if options.from and options.to and options.login
34
+ success = true
35
+ arr = split(options.login)
36
+ pw = get_password()
37
+ begin
38
+ result = Net::SCP.download!(arr[1], #remote
39
+ arr.first,#username
40
+ options.from, #remote_path
41
+ options.to, #local_path
42
+ :ssh => {:password => pw,
43
+ :port => arr[2]})
44
+ rescue Exception => e
45
+ puts "\n#{e}"
46
+ success = false
47
+ end
48
+ puts "\nDone." if success
49
+ else
50
+ puts "Some options are missing."
51
+ puts "--login: #{options.login}"
52
+ puts "--to: #{options.to}"
53
+ puts "--from: #{options.from}"
54
+ puts "aka dl --login some_login_string --to some_local_path_string --from some_remote_path_string"
55
+ end
56
+ end
57
+
58
+ #
59
+ # UPLOAD
60
+ #
61
+ #aka upload --from ~/Desktop/TwitterAPI.rb --login admin@162.243.249.154:22000 --to /home/admin
62
+ desc "upload", "upload a dot file"
63
+ method_options :from => :string
64
+ method_options :to => :string
65
+ method_options :login => :string
66
+ def upload
67
+ if options.from and options.to and options.login
68
+ password = get_password()
69
+
70
+ if File.exists?(options.from)
71
+ success = true
72
+ begin
73
+ arr = split(options.login)
74
+ result = Net::SCP.upload!(arr[1], #remote
75
+ arr.first, #username
76
+ options.from, #local_path
77
+ options.to, #remote_path
78
+ :ssh => {:port => arr[2],
79
+ :password => password})
80
+ rescue Exception => e
81
+ puts "\n#{e}"
82
+ success = false
83
+ end
84
+
85
+ puts "\nDone." if success
86
+ else
87
+ puts "Cannot find #{options.from}"
88
+ end
89
+ else
90
+ puts "Some options are missing:"
91
+ puts "--of -> #{options.of}"
92
+ puts "--to -> #{options.to}"
93
+ puts "--from -> #{options.from}"
94
+ puts "aka up --of some_string --to some_string --from some_string"
95
+ end
96
+ end
97
+
98
+ #
99
+ # GENERATE
100
+ #
101
+ desc "generate", "generate an alias (short alias: g)"
102
+ method_options :last => :boolean
103
+ def generate args
104
+ result = false
105
+ if options.last?
106
+ result = add(add_last_command(parseARGS(args))) if args
107
+ else
108
+ result = add(parseARGS(args)) if args
109
+ if options.proj? and result == true
110
+ FileUtils.touch("#{Dir.pwd}/.aka")
111
+ add_to_proj(args)
112
+ end
113
+ end
114
+ reload_dot_file if result == true and !options.noreload
115
+ end
116
+
117
+ #
118
+ # DESTROY
119
+ #
120
+ desc "destroy", "destroy an alias (short alias: d)"
121
+ method_options :force => :boolean
122
+ def destroy(*args)
123
+ args.each_with_index do |value, index|
124
+ result = remove(value)
125
+ unalias_the(value) if !options.nounalias and result == true
126
+ reload_dot_file if result == true and !options.noreload
127
+ end
128
+ end
129
+
130
+ #
131
+ # SETUP
132
+ #
133
+ desc "setup", "setup aka"
134
+ method_options :force => :boolean
135
+ def setup
136
+ setup_aka
137
+ end
138
+
139
+ #
140
+ # first step: set config file
141
+ #
142
+ desc "setup2", "Gem - Setup aka"
143
+ method_options :force => :boolean
144
+ def setupconfig
145
+ configDir = "#{Dir.home}/.aka"
146
+ if File.exist?("#{configDir}/.config")
147
+ # list
148
+ puts "config file is exist in #{configDir}"
149
+ else
150
+ setup_config #create and setup .config file
151
+ setup_aka2 #setup aka
152
+ end
153
+ end
154
+
155
+ #
156
+ # FIND
157
+ #
158
+ desc "find", "find an alias (short alias: f)"
159
+ method_options :force => :boolean
160
+ def find *args
161
+ args.each_with_index do |value, index|
162
+ show_alias(value)
163
+ end
164
+ end
165
+
166
+ #
167
+ # EDIT
168
+ #
169
+ desc "edit", "edit an alias(short alias: e)"
170
+ method_options :force => :boolean
171
+ def edit args
172
+ if args
173
+ values = args.split("=")
174
+ if values.size > 1
175
+ truth, _alias = show_alias(args)
176
+ if truth == true
177
+ if options.name
178
+ remove(_alias) #remove that alias
179
+ edit_alias(values[1], _alias) #edit that alias
180
+ reload_dot_file() if !options.noreload
181
+ else
182
+ remove(_alias) #remove that alias
183
+ edit_this(values[1], _alias) #edit that alias
184
+ reload_dot_file() if !options.noreload
185
+ end
186
+ else
187
+ puts "Alias '#{args}' cannot be found".red
188
+ end
189
+ else
190
+ truth, _alias, command = show_alias(args)
191
+ if truth == true
192
+ if options.name
193
+ input = ask "Enter a new alias for command '#{command}'?\n"
194
+ if yes? "Please confirm the new alias? (y/N)"
195
+ remove(_alias) #remove that alias
196
+ edit_alias(input, _alias) #edit that alias
197
+ reload_dot_file() if !options.noreload
198
+ end
199
+ else
200
+ input = ask "Enter a new command for alias '#{args}'?\n"
201
+ if yes? "Please confirm the new command? (y/N)"
202
+ remove(_alias) #remove that alias
203
+ edit_this(input, _alias) #edit that alias
204
+ reload_dot_file() if !options.noreload
205
+ end
206
+ end
207
+ else
208
+ puts "Alias '#{args}' cannot be found".red
209
+ end
210
+ end
211
+
212
+ end #if args
213
+ end
214
+
215
+ #
216
+ # LIST OUT
217
+ #
218
+ desc "list", "list alias (short alias: l)"
219
+ method_options :force => :boolean
220
+ def list(args=nil)
221
+ if args != nil
222
+ showlast(args.to_i)
223
+ else
224
+ value = readYML("#{Dir.home}/.aka/.config")["list"]
225
+ showlast(value.to_i) #this is unsafe
226
+ end
227
+
228
+ #total of #{} exports #functions
229
+ puts "A total of #{count()} aliases,#{count_export} exports and #{count_function} functions from #{readYML("#{Dir.home}/.aka/.config")["dotfile"]}"
230
+ reload_dot_file
231
+ end
232
+
233
+ #
234
+ # LIST OUT - ryan - remove numbering
235
+ #
236
+ desc "list2", "list alias (short alias: l)"
237
+ method_options :force => :boolean
238
+ def list2(args=nil)
239
+ if args != nil
240
+ showlast2(args.to_i)
241
+ else
242
+ value = readYML("#{Dir.home}/.aka/.config")["list"]
243
+ showlast2(value.to_i) #this is unsafe
244
+ end
245
+
246
+ #total of #{} exports #functions
247
+ puts "A total of #{count()} aliases,#{count_export} exports and #{count_function} functions from #{readYML("#{Dir.home}/.aka/.config")["dotfile"]}"
248
+ reload_dot_file
249
+ puts "\nUse 'aka -h' to see all the useful commands.\n\n"
250
+ end
251
+
252
+ #
253
+ # USAGE
254
+ #
255
+ desc "usage [number]", "show commands usage based on history"
256
+ # method_options :least, :type => :boolean, :aliases => '-l', :desc => 'show the least used commands'
257
+ # method_options :clear, :type => :boolean, :aliases => '-c', :desc => 'clear the dot history file'
258
+ def usage(args=nil)
259
+ if args
260
+ if options.least
261
+ showUsage(args.to_i, true) if args
262
+ else
263
+ showUsage(args.to_i) if args
264
+ end
265
+ else
266
+ if options.least
267
+ value = readYML("#{Dir.home}/.aka/.config")["usage"]
268
+ showlast(value.to_i, true) #this is unsafe
269
+ else
270
+ value = readYML("#{Dir.home}/.aka/.config")["usage"]
271
+ showlast(value.to_i) #this is unsafe
272
+ end
273
+ end
274
+
275
+ if options[:clear]
276
+ puts "clear the dot history file"
277
+ end
278
+ end
279
+
280
+ #
281
+ # USAGE2 - ryan - remove numbering in front
282
+ #
283
+ desc "usage2 [number]", "show commands usage based on history"
284
+ # method_options :least, :type => :boolean, :aliases => '-l', :desc => 'show the least used commands'
285
+ # method_options :clear, :type => :boolean, :aliases => '-c', :desc => 'clear the dot history file'
286
+ def usage2(args=nil)
287
+ if args
288
+ if options.least
289
+ showUsage(args.to_i, true) if args
290
+ else
291
+ showUsage(args.to_i) if args
292
+ end
293
+ else
294
+ if options.least
295
+ value = readYML("#{Dir.home}/.aka/.config")["usage"]
296
+ showlast2(value.to_i, true) #this is unsafe
297
+ else
298
+ value = readYML("#{Dir.home}/.aka/.config")["usage"]
299
+ showlast2(value.to_i) #this is unsafe
300
+ end
301
+ end
302
+
303
+ if options[:clear]
304
+ puts "clear the dot history file"
305
+ end
306
+ end
307
+
308
+
309
+ #
310
+ # INSTALL
311
+ #
312
+ desc "install [name]", "install aka"
313
+ method_options :force => :boolean
314
+ def install
315
+ if File.exist? "#{Dir.pwd}/aka"
316
+ if File.exist? "/usr/local/bin/aka"
317
+ if yes? "aka exists. Do you want to replace it? (yN)"
318
+ FileUtils.rm("/usr/local/bin/aka")
319
+ system("ln -s #{Dir.pwd}/aka /usr/local/bin/aka")
320
+ puts "aka replaced."
321
+ end
322
+ else
323
+ result = system("ln -s #{Dir.pwd}/aka /usr/local/bin/aka")
324
+ puts "aka installed."
325
+ end
326
+ else
327
+ puts "Cannot find aka.".red
328
+ end
329
+ end
330
+
331
+ #
332
+ # INIT
333
+ #
334
+ desc "init", "setup aka"
335
+ method_options :dotfile => :string
336
+ method_options :history => :string
337
+ method_options :home => :string
338
+ method_options :install => :string
339
+ method_options :profile => :string
340
+ method_options :list => :numeric
341
+ method_options :usage => :numeric
342
+ method_options :remote => :string
343
+ method_options :config => :boolean
344
+ method_options :zshrc => :boolean
345
+ method_options :bashrc => :boolean
346
+ method_options :bash => :boolean
347
+
348
+ def init
349
+ if options.count < 1
350
+ setup
351
+ else
352
+ setZSHRC if options[:zshrc]
353
+ setBASHRC if options[:bashrc]
354
+ setBASH if options[:bash]
355
+
356
+ showConfig if options[:config]
357
+ setPath(options[:dotfile],"dotfile") if options[:dotfile]
358
+ setPath(options[:history],"history") if options[:history]
359
+ setPath(options[:home],"home") if options[:home]
360
+ setPath(options[:install],"install") if options[:install]
361
+ setPath(options[:profile],"profile") if options[:profile]
362
+ setPath(options[:list],"list") if options[:list]
363
+ setPath(options[:usage],"usage") if options[:usage]
364
+ setPath(options[:remote],"remote") if options[:remote]
365
+ end
366
+ end
367
+
368
+ #
369
+ # CLEAN
370
+ #
371
+ desc "clean", "perform cleanup"
372
+ def clean
373
+ cleanup
374
+ end
375
+
376
+ #
377
+ # PRIVATE METHODS
378
+ #
379
+
380
+ private
381
+
382
+ # set path
383
+ def setPath(path, value)
384
+ data = readYML("#{Dir.home}/.aka/.config")
385
+ if data.has_key?(value) == true
386
+ old_path = data[value]
387
+ data[value] = path
388
+ writeYML("#{Dir.home}/.aka/.config", data)
389
+ puts "#{value} -> #{path}"
390
+ else
391
+ puts "error: --#{value} does not exist in #{Dir.home}/.aka/.config "
392
+ end
393
+ end
394
+
395
+ # reload
396
+ def reload
397
+ system "source #{readYML("#{Dir.home}/.aka/.config")["dotfile"]}"
398
+ end
399
+
400
+ # read YML
401
+ def readYML path
402
+ if File.exists? path
403
+ return YAML.load_file(path)
404
+ else
405
+ puts "#{Dir.home}/.aka/.config does not exist. You need to create one, type `touch ~/.aka/.config` and copy https://github.com/ytbryan/aka/blob/master/.config".red
406
+ end
407
+ end
408
+
409
+ # write YML
410
+ def writeYML path, theyml
411
+ File.open(path, 'w') {|f| f.write theyml.to_yaml } #Store
412
+ end
413
+
414
+ # write_with
415
+ def write_with array
416
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
417
+
418
+ File.open(str, 'w') { |file|
419
+ array.each do |line|
420
+ file.write(line)
421
+ end
422
+ }
423
+ end
424
+
425
+ # write_with_newline
426
+ def write_with_newline array
427
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
428
+
429
+ File.open(str, 'w') { |file|
430
+ array.each do |line|
431
+ file.write(line + "\n")
432
+ end
433
+ }
434
+ end
435
+
436
+ # write
437
+ def write str, path
438
+ File.open(path, 'w') { |file| file.write(str) }
439
+ end
440
+
441
+ # append
442
+ def append str, path
443
+ File.open(path, 'a') { |file| file.write(str) }
444
+ end
445
+
446
+ #append_with_newline
447
+ def append_with_newline str, path
448
+ File.open(path, 'a') { |file| file.write(str + "\n") }
449
+ end
450
+
451
+ # reload_dot_file
452
+ def reload_dot_file
453
+ if isOhMyZsh == true
454
+ system("exec zsh")
455
+ else
456
+ system("kill -SIGUSR1 #{Process.ppid}")
457
+ end
458
+ end
459
+
460
+ # history write
461
+ def historywrite
462
+ if isOhMyZsh == true
463
+ system("exec zsh")
464
+ else
465
+ system "kill -SIGUSR2 #{Process.ppid}"
466
+ end
467
+ end
468
+
469
+ # unalias
470
+ def unalias_the value
471
+ if isOhMyZsh == true
472
+ system("exec zsh")
473
+ else
474
+ system "echo '#{value}' > ~/sigusr1-args;"
475
+ system "kill -SIGUSR2 #{Process.ppid}"
476
+ end
477
+ end
478
+
479
+ #split domain user
480
+ def split_domain_user fulldomain
481
+ username = fulldomain.split("@").first
482
+ domain = fulldomain.split("@")[1]
483
+ return [username, domain]
484
+ end
485
+
486
+ # split
487
+ def split fulldomain
488
+ username = fulldomain.split("@").first
489
+ domain = fulldomain.split("@")[1].split(":").first
490
+ port = fulldomain.split("@")[1].split(":")[1]
491
+ return [username, domain, port]
492
+ end
493
+
494
+ # add
495
+ def add input
496
+ if input and show_alias(input).first == false and not_empty_alias(input) == false
497
+ array = input.split("=")
498
+ full_command = "alias #{array.first}='#{array[1]}'".gsub("\n","") #remove new line in command
499
+ print_out_command = "aka g #{array.first}='#{array[1]}'"
500
+
501
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
502
+
503
+ File.open(str, 'a') { |file| file.write("\n" +full_command) }
504
+ puts "#{print_out_command} is added to #{readYML("#{Dir.home}/.aka/.config")["dotfile"]}"
505
+ return true
506
+ else
507
+ puts "The alias is already present."
508
+ return false
509
+ end
510
+ end
511
+
512
+ # not empty alias
513
+ def not_empty_alias input
514
+ array = input.split("=")
515
+ return true if array.count < 2
516
+ return array[1].strip == ""
517
+ end
518
+
519
+ # show alias
520
+ def show_alias argument
521
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
522
+
523
+ if content = File.open(str).read
524
+ content.gsub!(/\r\n?/, "\n")
525
+ content_array = content.split("\n")
526
+ content_array.each_with_index { |line, index|
527
+ value = line.split(" ")
528
+ if value.length > 1 and value.first == "alias"
529
+ answer = value[1].split("=")
530
+ if found?(answer.first, argument.split("=").first, line) == true
531
+ return [true, answer.first, answer[1]]
532
+ end
533
+ end
534
+ }
535
+ else
536
+ puts "#{@pwd} cannot be found.".red
537
+ return [false, nil, nil]
538
+ end
539
+ return [false, nil, nil]
540
+
541
+ end
542
+
543
+ # remove
544
+ def remove input
545
+
546
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
547
+
548
+ if content=File.open(str).read
549
+ content.gsub!(/\r\n?/, "\n")
550
+ content_array= content.split("\n")
551
+ content_array.each_with_index { |line, index|
552
+ value = line.split(" ")
553
+ if value.length > 1 and value.first == "alias"
554
+ answer = value[1].split("=")
555
+ if answer.first == input
556
+ content_array.delete_at(index) and write_with_newline(content_array)
557
+ print_out_command = "aka g #{input}=#{line.split("=")[1]}"
558
+ puts "removed: #{print_out_command} is removed from #{str}".red
559
+ return true
560
+ end
561
+ end
562
+ }
563
+
564
+ puts "#{input} cannot be found.".red
565
+ else
566
+ puts "#{@pwd} cannot be found.".red
567
+ return false
568
+ end
569
+ end
570
+
571
+ # history
572
+ def history
573
+
574
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["history"])
575
+
576
+ if content = File.open(str).read
577
+ puts ".bash_history is available"
578
+ count=0
579
+ content.gsub!(/\r\n?/, "\n")
580
+ content_array = content.split("\n")
581
+ content_array.each_with_index { |line, index|
582
+ array = line.split(" ")
583
+ if array.first == "alias"
584
+ count += 1
585
+ end
586
+ puts "#{index+1} #{line}"
587
+ }
588
+ puts "There are #{count} lines of history."
589
+ else
590
+ puts ".bash_history is not available".red
591
+ end
592
+ end
593
+
594
+ # check version
595
+ def version
596
+ puts ""
597
+ puts "aka #{program(:version)} - #{program(:last_update)}"
598
+ puts "#{program(:author)} - #{program(:contact)}"
599
+ puts "https://github.com/ytbryan/aka"
600
+ end
601
+
602
+ # check found
603
+ def found? answer, argument, line
604
+ if answer == argument
605
+ # puts line.red + " - aka add #{argument}"
606
+ # puts line.red
607
+ puts "found: aka g #{argument}=#{line.split('=')[1]}".red
608
+ return true
609
+ else
610
+ return false
611
+ end
612
+ end
613
+
614
+ # edit_this
615
+ def edit_this newcommand, this_alias
616
+ puts "new: aka g #{this_alias}='#{newcommand}'"
617
+ return append("alias " + this_alias + "='" + newcommand + "'", readYML("#{Dir.home}/.aka/.config")["dotfile"] )
618
+ end
619
+
620
+ # edit alias
621
+ def edit_alias newalias, thiscommand
622
+ puts "new: aka g #{this_alias}='#{newcommand}'"
623
+ return append("alias " + newalias + "='" + thiscommand + "'", readYML("#{Dir.home}/.aka/.config")["dotfile"] )
624
+ end
625
+
626
+ # count function
627
+ def count_function
628
+ function_count = 0
629
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
630
+ if content=File.open(str).read
631
+ content.gsub!(/\r\n?/, "\n")
632
+ content_array= content.split("\n")
633
+ content_array.each_with_index { |line, index|
634
+ value = line.split(" ")
635
+ if value.length > 1 and value.first == "function"
636
+ answer = value[1].split("=")
637
+ function_count += 1
638
+ end
639
+ }
640
+ return function_count
641
+ end
642
+ end
643
+
644
+ #count export
645
+ def count_export
646
+ export_count = 0
647
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
648
+ if content=File.open(str).read
649
+ content.gsub!(/\r\n?/, "\n")
650
+ content_array= content.split("\n")
651
+ content_array.each_with_index { |line, index|
652
+ value = line.split(" ")
653
+ if value.length > 1 and value.first == "export"
654
+ answer = value[1].split("=")
655
+ export_count += 1
656
+ end
657
+ }
658
+ return export_count
659
+ end
660
+
661
+ end
662
+
663
+ # count
664
+ def count
665
+ alias_count = 0
666
+
667
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
668
+
669
+ if content=File.open(str).read
670
+ content.gsub!(/\r\n?/, "\n")
671
+ content_array= content.split("\n")
672
+ content_array.each_with_index { |line, index|
673
+ value = line.split(" ")
674
+ if value.length > 1 and value.first == "alias"
675
+ answer = value[1].split("=")
676
+ alias_count += 1
677
+ end
678
+ }
679
+ return alias_count
680
+ end
681
+ end
682
+
683
+ # setup_aka
684
+ def setup_aka
685
+ append_with_newline("export HISTSIZE=10000","/etc/profile")
686
+ trap = "sigusr2() { unalias $1;}
687
+ sigusr1() { source #{readYML("#{Dir.home}/.aka/.config")["dotfile"]}; history -a; echo 'reloaded dot file'; }
688
+ trap sigusr1 SIGUSR1
689
+ trap 'sigusr2 $(cat ~/sigusr1-args)' SIGUSR2\n".pretty
690
+ append(trap, readYML("#{Dir.home}/.aka/.config")['profile'])
691
+ puts "Done. Please restart this shell.".red
692
+ end
693
+
694
+ # setup_aka2 by ryan - check bash file first
695
+ def setup_aka2
696
+ if File.exist?("#{Dir.home}/.zshrc") #if zshec exist
697
+ setZSHRC2
698
+ append_with_newline("export HISTSIZE=10000","#{Dir.home}/.zshrc")
699
+ elsif
700
+ File.exist?("#{Dir.home}/.bashrc") #if bashrc exist
701
+ setBASHRC2
702
+ append_with_newline("export HISTSIZE=10000","#{Dir.home}/.bashrc")
703
+ elsif File.exist?("#{Dir.home}/.bash_profile") #if bash_profile exist
704
+ setBASH2
705
+ append_with_newline("export HISTSIZE=10000","#{Dir.home}/.bash_profile")
706
+ else
707
+ puts "Currently aka2 just support zshrc, bashrc and bash_profile"
708
+ puts "Pleaes contact aka2 creator for more info."
709
+ end
710
+
711
+ trap = "sigusr2() { unalias $1;}
712
+ sigusr1() { source #{readYML("#{Dir.home}/.aka/.config")["dotfile"]}; history -a; echo 'reloaded dot file'; }
713
+ trap sigusr1 SIGUSR1
714
+ trap 'sigusr2 $(cat ~/sigusr1-args)' SIGUSR2\n".pretty
715
+ append(trap, readYML("#{Dir.home}/.aka/.config")['profile'])
716
+ puts "Done. Please restart this shell.".red
717
+ end
718
+
719
+ # create and setup config file
720
+ def setup_config
721
+ configDir = "#{Dir.home}/.aka"
722
+ if File.exist?("#{configDir}/.config")
723
+ puts "Directory #{configDir}/.config exist"
724
+ else
725
+ FileUtils::mkdir_p("#{configDir}")
726
+ FileUtils.cp("./lib/.config", "#{configDir}")
727
+ end
728
+ end
729
+
730
+ # write to location
731
+ def write_to_location location, address
732
+ if aka_directory_exists?
733
+ write(location, address)
734
+ else
735
+ puts ".aka not found.".red
736
+ end
737
+ end
738
+
739
+ # read location
740
+ def read location
741
+ answer = dot_location_exists?(location)
742
+ if answer == true and content = File.open(location).read
743
+ return content
744
+ end
745
+ return ""
746
+ end
747
+
748
+ # dot location exist
749
+ def dot_location_exists? address
750
+ return File.exist? address
751
+ end
752
+
753
+ # aka directory exist ?
754
+ def aka_directory_exists?
755
+ return File.directory?("#{Dir.home}/.aka")
756
+ end
757
+
758
+ # check config file
759
+ def checkConfigFile str
760
+ path = "#{Dir.home}/.bash_profile"
761
+ if str == ""
762
+ puts "Error: Type `aka init --dotfile #{path}` to set the path to your dotfile. \nReplace .bash_profile with .bashrc or .zshrc if you are not using bash.".red
763
+ exit()
764
+ end
765
+
766
+ if !File.exists?(str)
767
+ puts "Error: Type `aka init --dotfile #{path}` to set the path of your dotfile. \nReplace .bash_profile with .bashrc or .zshrc if you are not using bash.".red
768
+ exit()
769
+ end
770
+
771
+ return str
772
+ end
773
+
774
+ # show last
775
+ def showlast howmany=10
776
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
777
+
778
+ if content = File.open(str).read
779
+ content.gsub!(/\r\n?/, "\n")
780
+ content_array = content.split("\n")
781
+ #why not just call the last five lines? Because i can't be sure that they are aliases
782
+ total_aliases = []
783
+ content_array.each_with_index { |line, index|
784
+ value = line.split(" ")
785
+ if value.length > 1 and value.first == "alias"
786
+ total_aliases.push(line)
787
+ end
788
+ }
789
+ puts ""
790
+ if total_aliases.count > howmany
791
+ total_aliases.last(howmany).each_with_index do |line, index|
792
+ splitted= line.split('=')
793
+ puts "#{total_aliases.count - howmany + index+1}. aka g " + splitted[0].split(" ")[1] + "=" + splitted[1].red
794
+ # puts "#{total_aliases.count - howmany + index+1}. " + splitted[0] + "=" + splitted[1].red
795
+ end
796
+ else
797
+ total_aliases.last(howmany).each_with_index do |line, index|
798
+ splitted= line.split('=')
799
+ # puts "#{index+1}. " + splitted[0] + "=" + splitted[1].red
800
+ puts "#{index+1}. aka g " + splitted[0].split(" ")[1] + "=" + splitted[1].red
801
+ end
802
+ end
803
+ puts ""
804
+ end
805
+ end
806
+
807
+ # show last2 - ryan - remove number
808
+ def showlast2 howmany=10
809
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
810
+
811
+ if content = File.open(str).read
812
+ content.gsub!(/\r\n?/, "\n")
813
+ content_array = content.split("\n")
814
+ #why not just call the last five lines? Because i can't be sure that they are aliases
815
+ total_aliases = []
816
+ content_array.each_with_index { |line, index|
817
+ value = line.split(" ")
818
+ if value.length > 1 and value.first == "alias"
819
+ total_aliases.push(line)
820
+ end
821
+ }
822
+ puts ""
823
+ if total_aliases.count > howmany
824
+ total_aliases.last(howmany).each_with_index do |line, index|
825
+ splitted= line.split('=')
826
+ puts "aka g " + splitted[0].split(" ")[1] + "=" + splitted[1].red
827
+ # puts "#{total_aliases.count - howmany + index+1}. " + splitted[0] + "=" + splitted[1].red
828
+ end
829
+ else
830
+ total_aliases.last(howmany).each_with_index do |line, index|
831
+ splitted= line.split('=')
832
+ # puts "#{index+1}. " + splitted[0] + "=" + splitted[1].red
833
+ puts "aka g " + splitted[0].split(" ")[1] + "=" + splitted[1].red
834
+ end
835
+ end
836
+ puts ""
837
+ end
838
+ end
839
+
840
+ # show usage
841
+ def showUsage howmany=10, least=false
842
+
843
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["history"])
844
+
845
+ value = reload_dot_file()
846
+ #get all aliases
847
+ if content = File.open(str).read
848
+ content.gsub!(/\r\n?/, "\n")
849
+ content_array = content.split("\n")
850
+ total_aliases = []
851
+ content_array.each_with_index { |line, index|
852
+ value = line.split(" ")
853
+ total_aliases.push(value.first)
854
+ }
855
+ count_aliases(total_aliases, howmany, least)
856
+ end
857
+ end
858
+
859
+ # count aliases
860
+ def count_aliases array, howmany, least=false
861
+ name_array,count_array = [], []
862
+ #find the unique value
863
+ array.each_with_index { |value, index|
864
+ if name_array.include?(value) == false
865
+ name_array.push(value)
866
+ end
867
+ }
868
+ #count the value
869
+ name_array.each { |unique_value|
870
+ count = 0
871
+ array.each { |value|
872
+ if (unique_value == value)
873
+ count+=1
874
+ end
875
+ }
876
+ count_array.push(count)
877
+ }
878
+
879
+ sorted_count_array, sorted_name_array = sort(count_array, name_array)
880
+
881
+ #display the least used aliases
882
+ if least == true
883
+ if sorted_count_array.count == sorted_name_array.count
884
+ puts ""
885
+ sorted_name_array.last(howmany).each_with_index { |value, index|
886
+ percent = ((sorted_count_array[sorted_name_array.last(howmany).size + index]).round(2)/array.size.round(2))*100
887
+ str = "#{sorted_name_array.size-sorted_name_array.last(howmany).size+index+1}. #{value}"
888
+ puts "#{str} #{showSpace(str)} #{showBar(percent)}"
889
+ }
890
+ puts ""
891
+ else
892
+ puts "Something went wrong: count_array.count = #{sorted_count_array.count}\n
893
+ name_array.count = #{sorted_name_array.count}. Please check your .bash_history.".pretty
894
+ end
895
+ else
896
+ # #print out
897
+ if sorted_count_array.count == sorted_name_array.count
898
+ puts ""
899
+ sorted_name_array.first(howmany).each_with_index { |value, index|
900
+ percent = ((sorted_count_array[index]).round(2)/array.size.round(2))*100
901
+ str = "#{index+1}. #{value}"
902
+ puts "#{str} #{showSpace(str)} #{showBar(percent)}"
903
+ }
904
+ puts ""
905
+ else
906
+ puts "Something went wrong: count_array.count = #{sorted_count_array.count}\n
907
+ name_array.count = #{sorted_name_array.count}. Please check your .bash_history.".pretty
908
+ end
909
+ end
910
+ puts "There's a total of #{array.size} lines in #{readYML("#{Dir.home}/.aka/.config")["history"]}."
911
+ end
912
+
913
+ # sort
914
+ def sort(countarray, namearray) #highest first. decscending.
915
+ temp = 0, temp2 = ""
916
+ countarray.each_with_index { |count, index|
917
+ countarray[0..countarray.size-index].each_with_index { |x, thisindex| #always one less than total
918
+
919
+ if index < countarray.size-1 and thisindex < countarray.size-1
920
+ if countarray[thisindex] < countarray[thisindex+1] #if this count is less than next count
921
+ temp = countarray[thisindex]
922
+ countarray[thisindex] = countarray[thisindex+1]
923
+ countarray[thisindex+1] = temp
924
+
925
+ temp2 = namearray[thisindex]
926
+ namearray[thisindex] = namearray[thisindex+1]
927
+ namearray[thisindex+1] = temp2
928
+ end
929
+ end
930
+
931
+ }
932
+ }#outer loop
933
+ return countarray, namearray
934
+ end
935
+
936
+ # get history file
937
+ def get_latest_history_file
938
+ system("history -a")
939
+ end
940
+
941
+ # clean up
942
+ def cleanup
943
+
944
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["dotfile"])
945
+
946
+ if content = File.open(str).read
947
+ content.gsub!(/\r\n?/, "\n")
948
+ content_array = content.split("\n")
949
+ check = false
950
+ while check == false
951
+ check = true
952
+ content_array.each_with_index { |line, index|
953
+ if line == "" or line == "\n"
954
+ content_array.delete_at(index)
955
+ check = false
956
+ end
957
+ }
958
+ end
959
+ write_with_newline(content_array)
960
+ end
961
+ end
962
+
963
+ ################################################
964
+ ## Getting these babies ready for beauty contest
965
+ ################################################
966
+
967
+ def showSpace word
968
+ space = ""
969
+ val = 20 - word.size
970
+ val = 20 if val < 0
971
+ val.times do
972
+ space += " "
973
+ end
974
+ return space
975
+ end
976
+
977
+ def showBar percent
978
+ result = ""
979
+ val = percent/100 * 50
980
+ val = 2 if val > 1 and val < 2
981
+ val = 1 if val.round <= 1 #for visibiity, show two bars if it's just one
982
+ val.round.times do
983
+ result += "+"
984
+ end
985
+
986
+ remaining = 50 - val.round
987
+ remaining.times do
988
+ result += "-".red
989
+ end
990
+
991
+ return result + " #{percent.round(2)}%"
992
+ end
993
+
994
+
995
+ # command :config do |c|
996
+ # c.action do |args, options|
997
+ # # theyml = Hash.new
998
+ # # theyml["location"] = "~/.aka/.location"
999
+ # # theyml["global"] = "/Users/ytbryan/.bash_profile"
1000
+ # # theyml["groups"] = "~/.aka/groups"
1001
+ # # theyml["remote"] = "255, admin, 12.12.12.233"
1002
+ # # theyml["path"] = "~/.aka"
1003
+ # # writeYML("#{Dir.home}/.aka/.config", theyml)
1004
+ # FileUtils.touch(readYML("#{Dir.home}/.aka/.config")["location"])
1005
+ # end
1006
+ # end
1007
+ #
1008
+ # command :readconfig do |c|
1009
+ # c.action do |args, options|
1010
+ # puts "readYML('#{Dir.home}/.aka/.config')['location'] ->#{readYML("#{Dir.home}/.aka/.config")["location"].class} -> #{readYML("#{Dir.home}/.aka/.config")["location"]}"
1011
+ # puts "readYML("#{Dir.home}/.aka/.config")["location"] -> #{ readYML("#{Dir.home}/.aka/.config")["location"].class} -> #{ readYML("#{Dir.home}/.aka/.config")["location"]}"
1012
+ # puts "#{program(:path_to_location).class} -> #{program(:path_to_location)}"
1013
+ # end
1014
+ # end
1015
+ #
1016
+
1017
+ ###########################
1018
+ ### DEVELOPMENT
1019
+ ###########################
1020
+
1021
+ # command :build do |c|
1022
+ # c.syntax = 'aka build [options]'
1023
+ # c.summary = 'build the VERSION file and run tests'
1024
+ # c.action do |args, options|
1025
+ # write(program(:version), './VERSION')
1026
+ # puts "VERSION #{program(:version)} created at #{Time.now.strftime("%I:%M%p, %A, %d %b %Y")}"
1027
+ # end
1028
+ # end
1029
+
1030
+ # command :install do |c|
1031
+ # c.syntax = 'aka copy [options]'
1032
+ # c.summary = 'copy a local copy of aka to /usr/local/bin'
1033
+ # c.action do |args, options|
1034
+ # result = system("sudo cp aka /usr/local/bin")
1035
+ # puts "Installed aka #{program(:version)} into /usr/local/bin (#{Time.now.strftime("%I:%M%p,%a,%d %b %Y")}).".red if result == true
1036
+ # puts "" if result == true
1037
+ # end
1038
+ # end
1039
+ #
1040
+ # command :uninstall do |c|
1041
+ # c.syntax = 'aka uninstall [options]'
1042
+ # c.summary = 'uninstall aka'
1043
+ # c.action do |args, options|
1044
+ # input = ask "Confirm that you want to uninstall aka? (y/N)"
1045
+ # system("sudo rm -rf ~/.aka; sudo rm -rf /usr/local/bin/aka;") if input == "y"
1046
+ # end
1047
+ # end
1048
+
1049
+ def add_to_proj fullalias
1050
+ values = fullalias.split("=")
1051
+ yml = readYML("#{Dir.pwd}/.aka")
1052
+ if yml == false
1053
+ write_new_proj_aka_file fullalias
1054
+ else
1055
+ yml["proj"]["title"] = "this is title"
1056
+ yml["proj"]["summary"] = "this is summary"
1057
+ yml["proj"]["aka"][values.first] = values[1]
1058
+ writeYML("#{Dir.pwd}/.aka", yml)
1059
+ end
1060
+ end
1061
+
1062
+ def write_new_proj_aka_file fullalias
1063
+ values = fullalias.split("=")
1064
+
1065
+ theyml = {"proj" => {
1066
+ "title" => "",
1067
+ "summary" => "",
1068
+ "aliases" => {
1069
+ "firstvalue" => ""
1070
+ }}}
1071
+
1072
+ writeYML("#{Dir.pwd}/.aka", theyml)
1073
+ end
1074
+
1075
+ def createShortcut(proj)
1076
+ answer = ""
1077
+ proj["shortcuts"].to_a.each_with_index do |each,index|
1078
+ answer += "#{each["name"]}
1079
+ - #{each["command"]}
1080
+ ".pretty
1081
+ answer += "\n"
1082
+ end
1083
+ return answer
1084
+ end
1085
+
1086
+ def add_last_command name
1087
+ command= find_last_command()
1088
+ return str = name + "=" + "#{command}"
1089
+ end
1090
+
1091
+ def find_last_command
1092
+ str = checkConfigFile(readYML("#{Dir.home}/.aka/.config")["history"])
1093
+ #i think if you do history -w, you can retrieve the latest command
1094
+ if content = File.open(str).read
1095
+ count=0
1096
+ content.gsub!(/\r\n?/, "\n")
1097
+ content_array = content.split("\n")
1098
+ return content_array[content_array.count - 1]
1099
+ end
1100
+ end
1101
+
1102
+ def parseARGS str
1103
+ array = str.split(" ")
1104
+ array.each_with_index do |line, value|
1105
+ array[value] = line.gsub('#{pwd}', Shellwords.escape(Dir.pwd))
1106
+ end
1107
+ return array.join(" ")
1108
+ end
1109
+
1110
+ def add_pwd_to_the_command
1111
+ #detect #{pwd}
1112
+ #get the pwd and replace the the pwd
1113
+ end
1114
+
1115
+ def showConfig
1116
+ thing = YAML.load_file("#{Dir.home}/.aka/.config")
1117
+ puts ""
1118
+ thing.each do |company,details|
1119
+ puts "#{company} -> " + "#{details}".red
1120
+ end
1121
+ end
1122
+
1123
+ def setZSHRC
1124
+ setPath("#{Dir.home}/.zshrc","dotfile")
1125
+ setPath("#{Dir.home}/.zsh_history","history")
1126
+ setPath("/etc/zprofile","profile")
1127
+ end
1128
+
1129
+ def setBASHRC
1130
+ setPath("#{Dir.home}/.bashrc","dotfile")
1131
+ setPath("#{Dir.home}/.bash_history","history")
1132
+ setPath("/etc/profile","profile")
1133
+ end
1134
+
1135
+ def setBASH
1136
+ setPath("#{Dir.home}/.bash_profile","dotfile")
1137
+ setPath("#{Dir.home}/.bash_history","history")
1138
+ setPath("/etc/profile","profile")
1139
+ end
1140
+
1141
+ def setZSHRC2 #ryan - set the right dotfile and profile
1142
+ setPath("#{Dir.home}/.zshrc","dotfile")
1143
+ setPath("#{Dir.home}/.zsh_history","history")
1144
+ setPath("#{Dir.home}/.zshrc","profile")
1145
+ setPath("#{Dir.home}/.aka","home")
1146
+ end
1147
+
1148
+ def setBASHRC2 #ryan - set the right dotfile and profile
1149
+ setPath("#{Dir.home}/.bashrc","dotfile")
1150
+ setPath("#{Dir.home}/.bash_history","history")
1151
+ setPath("#{Dir.home}/.bashrc","profile")
1152
+ setPath("#{Dir.home}/.aka","home")
1153
+ end
1154
+
1155
+ def setBASH2 #ryan - set the right dotfile and profile
1156
+ setPath("#{Dir.home}/.bash_profile","dotfile")
1157
+ setPath("#{Dir.home}/.bash_history","history")
1158
+ setPath("/etc/profile","profile")
1159
+ setPath("#{Dir.home}/.aka","home")
1160
+ end
1161
+
1162
+ def get_password
1163
+ ask("Enter Password: ", :echo => false)
1164
+ end
1165
+
1166
+ def isOhMyZsh
1167
+ if readYML("#{Dir.home}/.aka/.config")["dotfile"] == "#{Dir.home}/.zshrc"
1168
+ return true
1169
+ else
1170
+ return false
1171
+ end
1172
+ end
1173
+
1174
+
1175
+ end
1176
+
1177
+
1178
+ end
1179
+
1180
+ class String
1181
+ def pretty
1182
+ return self.gsub("\s\t\r\f", ' ').squeeze(' ')
1183
+ end
1184
+
1185
+ def is_i?
1186
+ !!(self =~ /\A[-+]?[0-9]+\z/)
1187
+ end
1188
+ end