# File lib/sup/hook.rb, line 64 def initialize dir @dir = dir @hooks = {} @descs = {} @contexts = {} @tags = {} Dir.mkdir dir unless File.exists? dir end
# File lib/sup/hook.rb, line 115 def clear; @hooks.clear; end
# File lib/sup/hook.rb, line 113 def enabled? name; !hook_for(name).nil? end
# File lib/sup/hook.rb, line 97 def print_hooks f=$stdout puts <<EOS Have #{@descs.size} registered hooks: EOS @descs.sort.each do |name, desc| f.puts <<EOS #{name} #{"-" * name.length} File: #{fn_for name} #{desc} EOS end end
# File lib/sup/hook.rb, line 93 def register name, desc @descs[name] = desc end
# File lib/sup/hook.rb, line 76 def run name, locals={} hook = hook_for(name) or return context = @contexts[hook] ||= HookContext.new(name) result = nil fn = fn_for name begin result = context.__run hook, fn, locals rescue Exception => e log "error running #{fn}: #{e.message}" log e.backtrace.join("\n") @hooks[name] = nil # disable it BufferManager.flash "Error running hook: #{e.message}" if BufferManager.instantiated? end result end
# File lib/sup/hook.rb, line 134 def fn_for name File.join @dir, "#{name}.rb" end
# File lib/sup/hook.rb, line 119 def hook_for name unless @hooks.member? name @hooks[name] = begin returning IO.read(fn_for(name)) do debug "read '#{name}' from #{fn_for(name)}" end rescue SystemCallError => e #debug "disabled hook for '#{name}': #{e.message}" nil end end @hooks[name] end
# File lib/sup/hook.rb, line 138 def log m info("hook: " + m) end