Class: Clacky::ExtensionScaffold::TemplateRenderer
- Inherits:
-
Object
- Object
- Clacky::ExtensionScaffold::TemplateRenderer
- Defined in:
- lib/clacky/extension/scaffold/template_renderer.rb
Overview
Copy a template directory into target, rendering .erb files with
ERB and substituting __key__ placeholders in path segments. Non-erb
files are copied byte-for-byte.
Placeholders in filenames use the __slug__ form (double underscores
around the key) — any locals key can be referenced this way.
Constant Summary collapse
- PATH_PLACEHOLDER =
/__([a-z_][a-z0-9_]*)__/.freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(template_dir, target, locals) ⇒ TemplateRenderer
constructor
A new instance of TemplateRenderer.
- #render ⇒ Object
Constructor Details
#initialize(template_dir, target, locals) ⇒ TemplateRenderer
Returns a new instance of TemplateRenderer.
22 23 24 25 26 27 |
# File 'lib/clacky/extension/scaffold/template_renderer.rb', line 22 def initialize(template_dir, target, locals) @template_dir = File.(template_dir) @target = target @locals = locals @binding = OpenStruct.new(locals).instance_eval { binding } end |
Class Method Details
.render(template_dir:, target:, locals: {}) ⇒ Object
18 19 20 |
# File 'lib/clacky/extension/scaffold/template_renderer.rb', line 18 def self.render(template_dir:, target:, locals: {}) new(template_dir, target, locals).render end |
Instance Method Details
#render ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/clacky/extension/scaffold/template_renderer.rb', line 29 def render raise ArgumentError, "template dir not found: #{@template_dir}" unless Dir.exist?(@template_dir) Dir.glob(File.join(@template_dir, "**", "{*,.[!.]*}"), File::FNM_DOTMATCH).sort.each do |src| next if [".", ".."].include?(File.basename(src)) rel = src.sub(/\A#{Regexp.escape(@template_dir)}\/?/, "") next if rel.empty? dest = File.join(@target, substitute_path(rel)) if File.directory?(src) FileUtils.mkdir_p(dest) elsif File.extname(src) == ".erb" FileUtils.mkdir_p(File.dirname(dest)) File.write(dest.sub(/\.erb\z/, ""), ERB.new(File.read(src), trim_mode: "-").result(@binding)) else FileUtils.mkdir_p(File.dirname(dest)) FileUtils.cp(src, dest) end end @target end |