class DitzStr::HookManager
Public Class Methods
method_missing(m, *a, &b)
click to toggle source
# File lib/ditzstr/hook.rb, line 9 def self.method_missing m, *a, &b @@instance ||= self.new @@instance.send m, *a, &b end
new()
click to toggle source
# File lib/ditzstr/hook.rb, line 3 def initialize @descs = {} @blocks = {} end
Public Instance Methods
enabled?(name;)
click to toggle source
# File lib/ditzstr/hook.rb, line 49 def enabled? name; !hooks_for(name).empty? end
hooks_for(name)
click to toggle source
# File lib/ditzstr/hook.rb, line 51 def hooks_for name if @blocks[name].nil? || @blocks[name].empty? dirs = [DitzStr::home_dir, DitzStr::find_dir_containing(".ditz")].compact.map do |d| File.join d, ".ditz", "hooks" end DitzStr::debug "looking for hooks in #{dirs.join(" and ")}" files = dirs.map { |d| Dir[File.join(d, "*.rb")] }.flatten files.each do |fn| DitzStr::debug "loading hook file #{fn}" require File.expand_path(fn) end end @blocks[name] || [] end
on(*names, &block)
click to toggle source
# File lib/ditzstr/hook.rb, line 19 def on *names, &block names.each do |name| raise "unregistered hook #{name.inspect}" unless @descs[name] @blocks[name] << block end end
print_hooks(f=$stdout)
click to toggle source
# File lib/ditzstr/hook.rb, line 34 def print_hooks f=$stdout puts <<EOS Ditz has #{@descs.size} registered hooks: EOS @descs.map{ |k,v| [k.to_s,v] }.sort.each do |name, desc| f.puts <<EOS #{name} #{"-" * name.length} #{desc} EOS end end
register(name, desc)
click to toggle source
# File lib/ditzstr/hook.rb, line 14 def register name, desc @descs[name] = desc @blocks[name] = [] end
run(name, *args)
click to toggle source
# File lib/ditzstr/hook.rb, line 26 def run name, *args raise "unregistered hook #{name.inspect}" unless @descs[name] blocks = hooks_for name return false if blocks.empty? blocks.each { |block| block[*args] } true end