class Alis::Store
Public Class Methods
new()
click to toggle source
# File lib/alis/store.rb, line 8 def initialize @store_file = Alis.store_file @data = FileTest.exists?(@store_file) ? YAML.load_file(@store_file) : {} @alias_cache = {} @cmd_cache = {} end
Public Instance Methods
find_matched_alias(cmd, params_and_args)
click to toggle source
# File lib/alis/store.rb, line 27 def find_matched_alias(cmd, params_and_args) return nil unless @data[cmd] @data[cmd].keys.sort_by(&:size).reverse.each do |prms| first_params = params_and_args[0...(prms.size)] return get_alias(cmd, prms) if first_params == prms end nil end
get_alias(cmd, params)
click to toggle source
# File lib/alis/store.rb, line 19 def get_alias(cmd, params) @alias_cache[[cmd, params]] ||= fetch_alias(cmd, params) end
get_cmd(name)
click to toggle source
# File lib/alis/store.rb, line 23 def get_cmd(name) @cmd_cache[name] ||= fetch_cmd(name) end
has_cmd?(cmd)
click to toggle source
# File lib/alis/store.rb, line 53 def has_cmd?(cmd) !!@data[cmd] end
remove_alias(cmd, params)
click to toggle source
# File lib/alis/store.rb, line 41 def remove_alias(cmd, params) @data[cmd] && @data[cmd].delete(params) end
remove_all()
click to toggle source
# File lib/alis/store.rb, line 49 def remove_all @data = {} end
remove_cmd(cmd)
click to toggle source
# File lib/alis/store.rb, line 45 def remove_cmd(cmd) @data.delete(cmd) end
save!()
click to toggle source
# File lib/alis/store.rb, line 15 def save! File.open(@store_file, 'w'){ |f| YAML.dump(@data, f)} end
set_alias(cmd, params, exe, tail)
click to toggle source
# File lib/alis/store.rb, line 36 def set_alias(cmd, params, exe, tail) @data[cmd] ||= {} @data[cmd][params] = {:exe => exe, :tail => tail} end
to_s()
click to toggle source
# File lib/alis/store.rb, line 58 def to_s cols = [:alias, :exe, :tail] # alises to hash aliases = @data.map do |cmd, cmd_hash| cmd_hash.map do |params, opts| aliaz = "#{cmd} #{params.join(' ')}" {:alias => aliaz, :exe => opts[:exe], :tail => opts[:tail]} end end.flatten # add headers aliases.unshift({:alias => "ALIAS", :exe => "EXECUTE", :tail => "TAIL"}) width = cols.inject({}) do |h, col| h.merge({col => aliases.map{|a| a[col].size}.max}) end aliases.map do |a| cols.map{|col| a[col].ljust(width[col]) }.join(" " * 5) end.join("\n") end
Private Instance Methods
fetch_alias(cmd, params)
click to toggle source
# File lib/alis/store.rb, line 84 def fetch_alias(cmd, params) prms = @data[cmd] && @data[cmd][params] return nil unless prms Alias.new(cmd, params, prms[:exe], prms[:tail]) end
fetch_cmd(name)
click to toggle source
# File lib/alis/store.rb, line 90 def fetch_cmd(name) return nil unless @data[name] cmd = Cmd.new(name) @data[name].each do |alias_data| alias_params = alias_data.first cmd.aliases << get_alias(name, alias_params) end cmd end