# File lib/hook.rb, line 9 def self.method_missing m, *a, &b @@instance ||= self.new @@instance.send m, *a, &b end
# File lib/hook.rb, line 3 def initialize @descs = {} @blocks = {} end
# File lib/hook.rb, line 49 def enabled? name; !hooks_for(name).empty? end
# File lib/hook.rb, line 51 def hooks_for name if @blocks[name].nil? || @blocks[name].empty? dirs = [Ditz::home_dir, Ditz::find_dir_containing(".ditz")].compact.map do |d| File.join d, ".ditz", "hooks" end Ditz::debug "looking for hooks in #{dirs.join(" and ")}" files = dirs.map { |d| Dir[File.join(d, "*.rb")] }.flatten files.each do |fn| Ditz::debug "loading hook file #{fn}" require File.expand_path(fn) end end @blocks[name] || [] end
# File lib/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
# File lib/hook.rb, line 34 def print_hooks f=$stdout puts "Ditz has #{@descs.size} registered hooks: " @descs.map{ |k,v| [k.to_s,v] }.sort.each do |name, desc| f.puts "#{name} #{"-" * name.length} #{desc} " end end
# File lib/hook.rb, line 14 def register name, desc @descs[name] = desc @blocks[name] = [] end
# File lib/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