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
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