Class: Alias

Inherits:
Object
  • Object
show all
Defined in:
lib/models/alias.rb

Class Method Summary collapse

Class Method Details

.allObject



2
3
4
5
6
7
8
9
# File 'lib/models/alias.rb', line 2

def self.all
  default_yml = "#{__dir__}/../alias.yml"
  extend_yml = "#{ENV['HOME']}/.dk/alias.yml"
  default_alias = YAML.load_file(default_yml) || {}

  extend_alias = File.exist?(extend_yml) ? YAML.load_file(extend_yml) : {}
  ret = {}.merge(default_alias).merge(extend_alias)
end

.create_alias(name, cmds) ⇒ Object



18
19
20
21
22
23
# File 'lib/models/alias.rb', line 18

def self.create_alias(name, cmds)
  extend_yml = "#{ENV['HOME']}/.dk/alias.yml"
  extend_alias = File.exist?(extend_yml) ? YAML.load_file(extend_yml) : {}
  extend_alias[name] = cmds.join(' ')
  update_alias(extend_yml, extend_alias.to_yaml)
end

.delete_alias(name) ⇒ Object



25
26
27
28
29
30
# File 'lib/models/alias.rb', line 25

def self.delete_alias(name)
  extend_yml = "#{ENV['HOME']}/.dk/alias.yml"
  extend_alias = File.exist?(extend_yml) ? YAML.load_file(extend_yml) : {}
  extend_alias.delete(name)
  update_alias(extend_yml, extend_alias.to_yaml)
end

.list_aliasObject



11
12
13
14
15
16
# File 'lib/models/alias.rb', line 11

def self.list_alias
  hammer.say 'Aliases:'
  all.each do |name, cmd|
    hammer.say("   #{name}  ##{cmd}")
  end
end

.parse(args) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/models/alias.rb', line 48

def self.parse(args)
  regexp = /:/
  hash_opts = args.select { |item| regexp.match(item) }
  options = args - hash_opts
  split_options = Thor::Options.split(options)
  hash_opts_obj = hash_opts.map { |item| item.split(':') }.to_h
  hash_opts_obj['args'] = options.unshift('')
  ret = [hash_opts_obj, split_options]
end

.run(name, args) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'lib/models/alias.rb', line 37

def self.run(name, args)
  hash_opts, options = parse(args)
  begin
    command = Erubis::Eruby.new(options.unshift(all[name]).join(' ')).result(hash_opts)
    hammer.run(command)
  rescue => e
    missed_opts = /`(.*)'/.match(e.message).captures.map { |i| "#{i}:<#{i}>" }.join(',')
    hammer.say("pls provide opts #{missed_opts}")
  end
end

.update_alias(file, content) ⇒ Object



32
33
34
35
# File 'lib/models/alias.rb', line 32

def self.update_alias(file, content)
  return hammer.create_file(file, content) unless File.exist?(file)
  File.open(file, 'w') { |f| f.write content }
end