def method_missing(method, *args)
      method = method.to_s
      if method.end_with? "_project?"
        method.sub! "_project", ""
        self.send method.to_sym, *args
      elsif !method.include?("_") && local_methods.find { |m| m.to_s.start_with? "#{method.chop}_" }
        project_methods = local_methods.find_all { |m| m.to_s.start_with? "#{method.chop}_" }
        project_methods.collect { |m| self.send m.to_s }.any?
      else
        raise NameError.new("undefined local variable or method '#{method}' for ProjectScout::Dir")
      end
    end
def method_missing(method, *args)
      method = method.to_s
      if method.end_with? "_project?"
        method.sub! "_project", ""
        self.send method.to_sym, *args
      elsif !method.include?("_") && local_methods.find { |m| m.to_s.start_with? "#{method.chop}_" }
        project_methods = local_methods.find_all { |m| m.to_s.start_with? "#{method.chop}_" }
        project_methods.collect { |m| self.send m.to_s }.any?
      else
        raise NameError.new("undefined local variable or method '#{method}' for ProjectScout::Dir")
      end
    end
Explanation of magic:

 1) if a method is invoked with a "_project?" suffix, strip "_project"
    and call with the same arguments. Thus calling foo_bar_project?
    invokes foo_bar?

 2) if a method invoked has no underscores in it, and local methods
    exist that start with the same string, invoke all of them and
    return true if and return true. Thus calling foo_project? when
    foo_bar_project? and foo_baz_project? exist will return true
    only if any of foo_bar_project? and foo_baz_project? return true.