Module: Templater::Discovery
Overview
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 #discover! 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.
Instance Method Summary collapse
-
#discover!(scope) ⇒ Object
Searches installed gems for Generators files and loads all code blocks in them that match the given scope.
-
#scope(scope, &block) ⇒ Object
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.
Instance Method Details
#discover!(scope) ⇒ Object
Searches installed gems for Generators files and loads all code blocks in them that match the given scope.
Parameters
- scope<String>
-
The name of the scope to search for
46 47 48 49 50 51 52 |
# File 'lib/templater/discovery.rb', line 46 def discover!(scope) @scopes = {} generator_files.each do |file| load file end @scopes[scope].each { |block| block.call } if @scopes[scope] end |
#scope(scope, &block) ⇒ Object
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<String>
-
The name of the scope
- block<&Proc>
-
A block of code to execute provided the scope is correct
36 37 38 39 |
# File 'lib/templater/discovery.rb', line 36 def scope(scope, &block) @scopes[scope] ||= [] @scopes[scope] << block end |