This provides a hook system which programs that use Templater can use to discover generators installed through gems. This requires two separate things, the Templater-using progrma will have to call the # method giving a scope, like this:
Templater::Discovery.discover!("name-of-scope")
Where “name-of-scope” should be a string that uniquely identifies your program. Any gem wishing to then add a generator, that is automatically picked up, will then need to add a Generators file at the root of the project (don’t forget to add it to the gem’s manifest of files).
* lib / * spec / * Rakefile * Generators
This file should look something like this:
scope "name-of-scope" do require ...something... end
Multiple scopes can be added to the same Generators file for use with different generator programs.
Searches installed gems for Generators files and loads all code blocks in them that match the given scope.
scope | The name of the scope to search for |
# File lib/templater/discovery.rb, line 46 46: def discover!(scope) 47: @scopes = {} 48: generator_files.each do |file| 49: load file 50: end 51: @scopes[scope].each { |block| block.call } if @scopes[scope] 52: end
Adds a block of code specific for a certain scope of generators, where the scope would probably be the name of the program running the generator.
scope | The name of the scope |
block<&Proc> | A block of code to execute provided the scope is correct |
# File lib/templater/discovery.rb, line 36 36: def scope(scope, &block) 37: @scopes[scope] ||= [] 38: @scopes[scope] << block 39: end
# File lib/templater/discovery.rb, line 56 56: def find_latest_gem_paths 57: # Minigems provides a simpler (and much faster) method for finding the 58: # latest gems. 59: if Gem.respond_to?(:latest_gem_paths) 60: Gem.latest_gem_paths 61: else 62: gems = Gem.cache.inject({}) do |latest_gems, cache| 63: name, gem = cache 64: currently_latest = latest_gems[gem.name] 65: latest_gems[gem.name] = gem if currently_latest.nil? or gem.version > currently_latest.version 66: latest_gems 67: end 68: gems.values.map{|g| g.full_gem_path} 69: end 70: end
# File lib/templater/discovery.rb, line 72 72: def generator_files 73: find_latest_gem_paths.inject([]) do |files, gem_path| 74: path = ::File.join(gem_path, "Generators") 75: files << path if ::File.exists?(path) and not ::File.directory?(path) 76: files 77: end 78: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.