class Redwood::HookManager
Attributes
descs[R]
Public Class Methods
new(dir)
click to toggle source
# File lib/sup/hook.rb, line 80 def initialize dir @dir = dir @hooks = {} @contexts = {} @tags = {} Dir.mkdir dir unless File.exist? dir end
register(name, desc)
click to toggle source
# File lib/sup/hook.rb, line 108 def self.register name, desc @descs[name] = desc end
Public Instance Methods
clear()
click to toggle source
# File lib/sup/hook.rb, line 130 def clear; @hooks.clear; BufferManager.flash "Hooks cleared" end
clear_one(k;)
click to toggle source
# File lib/sup/hook.rb, line 131 def clear_one k; @hooks.delete k; end
enabled?(name;)
click to toggle source
# File lib/sup/hook.rb, line 128 def enabled? name; !hook_for(name).nil? end
print_hooks(pattern="", f=$stdout)
click to toggle source
# File lib/sup/hook.rb, line 112 def print_hooks pattern="", f=$stdout matching_hooks = HookManager.descs.sort.keep_if {|name, desc| pattern.empty? or name.match(pattern)}.map do |name, desc| <<EOS #{name} #{"-" * name.length} File: #{fn_for name} #{desc} EOS end showing_str = matching_hooks.size == HookManager.descs.size ? "" : " (showing #{matching_hooks.size})" f.puts "Have #{HookManager.descs.size} registered hooks#{showing_str}:" f.puts matching_hooks.each { |text| f.puts text } end
run(name, locals={})
click to toggle source
# File lib/sup/hook.rb, line 91 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
Private Instance Methods
fn_for(name)
click to toggle source
# File lib/sup/hook.rb, line 150 def fn_for name File.join @dir, "#{name}.rb" end
hook_for(name)
click to toggle source
# File lib/sup/hook.rb, line 135 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
log(m)
click to toggle source
# File lib/sup/hook.rb, line 154 def log m info("hook: " + m) end