Templater::Discovery

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.

Public Instance Methods

discover!(scope) click to toggle source

Searches installed gems for Generators files and loads all code blocks in them that match the given scope.

Parameters

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
scope(scope, &block) click to toggle source

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.

Parameters

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

Protected Instance Methods

find_latest_gem_paths() click to toggle source
    # 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
generator_files() click to toggle source
    # 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.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.