Class: SimpleTemplater
- Inherits:
-
Object
- Object
- SimpleTemplater
- Defined in:
- lib/simple-templater/builder.rb,
lib/simple-templater.rb,
lib/simple-templater/dsl.rb,
lib/simple-templater/helpers.rb,
lib/simple-templater/generator.rb,
lib/simple-templater/discoverer.rb,
lib/simple-templater/hooks/hook.rb,
lib/simple-templater/argv_parsing.rb,
lib/simple-templater/generator_set.rb,
lib/simple-templater/discoverers/gems.rb
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 simple-templater.scope file at the root of the project (don’t forget to add it to the gem’s manifest of files).
- lib /
- spec /
- Rakefile
- simple-templater.scope
This file should look something like this:
SimpleTemplater.scope(:rango) do
root = File.dirname(__FILE__)
Dir["#{root}/stubs/*"].each do |stub_dir|
if File.directory?(stub_dir)
SimpleTemplater.register(:rango, stub_dir)
end
end
end
Multiple scopes can be added to the same simple-templater.scope file for use with different generator programs.
Defined Under Namespace
Modules: ArgvParsingMixin, Helpers, Hooks Classes: Builder, DSL, Discoverer, FlatBuilder, Generator, GeneratorSet, RubyGems
Instance Attribute Summary collapse
-
#generators ⇒ Object
readonly
Returns the value of attribute generators.
-
#scope ⇒ Object
readonly
Returns the value of attribute scope.
Class Method Summary collapse
-
.discover!(scope) ⇒ Object
Searches installed gems for simple-templater.scope files and loads all code blocks in them that match the given scope.
-
.generators ⇒ Object
scope => generator rango: GeneratorSet.new(:project, *paths).
- .logger ⇒ Object
- .logger=(logger) ⇒ Object
- .register(scope, name, *paths) ⇒ Object
-
.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.
- .scopes ⇒ Object
Instance Method Summary collapse
- #discover! ⇒ Object
- #find(name) ⇒ Object
-
#initialize(scope, logger = nil) ⇒ SimpleTemplater
constructor
A new instance of SimpleTemplater.
- #logger ⇒ Object
-
#register(name, path) ⇒ Object
templater.register(:project, path).
Constructor Details
#initialize(scope, logger = nil) ⇒ SimpleTemplater
Returns a new instance of SimpleTemplater.
69 70 71 72 |
# File 'lib/simple-templater.rb', line 69 def initialize(scope, logger = nil) @scope = scope @generators = Hash.new end |
Instance Attribute Details
#generators ⇒ Object (readonly)
Returns the value of attribute generators.
68 69 70 |
# File 'lib/simple-templater.rb', line 68 def generators @generators end |
#scope ⇒ Object (readonly)
Returns the value of attribute scope.
68 69 70 |
# File 'lib/simple-templater.rb', line 68 def scope @scope end |
Class Method Details
.discover!(scope) ⇒ Object
Searches installed gems for simple-templater.scope files and loads all code blocks in them that match the given scope.
Parameters
- scope<String>
-
The name of the scope to search for
62 63 64 65 66 |
# File 'lib/simple-templater.rb', line 62 def self.discover!(scope) klass = Discoverer.detect discoverer = klass.new(scope) discoverer.run end |
.generators ⇒ Object
scope => generator rango: GeneratorSet.new(:project, *paths)
37 38 39 |
# File 'lib/simple-templater.rb', line 37 def self.generators @generators ||= Hash.new end |
.logger ⇒ Object
20 21 22 23 24 25 |
# File 'lib/simple-templater.rb', line 20 def self.logger @@logger ||= begin require "logger" Logger.new(STDOUT) end end |
.logger=(logger) ⇒ Object
27 28 29 |
# File 'lib/simple-templater.rb', line 27 def self.logger=(logger) @@logger = logger end |
.register(scope, name, *paths) ⇒ Object
52 53 54 55 |
# File 'lib/simple-templater.rb', line 52 def self.register(scope, name, *paths) self.generators[scope] ||= Array.new self.generators[scope].push(GeneratorSet.new(name, *paths)) 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
47 48 49 50 |
# File 'lib/simple-templater.rb', line 47 def self.scope(scope, &block) self.scopes[scope] ||= Array.new self.scopes[scope] << block end |
.scopes ⇒ Object
31 32 33 |
# File 'lib/simple-templater.rb', line 31 def self.scopes @scopes ||= Hash.new end |
Instance Method Details
#discover! ⇒ Object
78 79 80 |
# File 'lib/simple-templater.rb', line 78 def discover! SimpleTemplater.discover!(self.scope) end |
#find(name) ⇒ Object
91 92 93 94 95 |
# File 'lib/simple-templater.rb', line 91 def find(name) self.generators.find do |generator| generator.name == name.to_sym end end |
#logger ⇒ Object
74 75 76 |
# File 'lib/simple-templater.rb', line 74 def logger @logger ||= standard_logger end |
#register(name, path) ⇒ Object
templater.register(:project, path)
87 88 89 |
# File 'lib/simple-templater.rb', line 87 def register(name, path) SimpleTemplater.register(self.scope, name, path) end |