Class: Legion::CLI::LexTemplates::TemplateOverlay

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/cli/lex_templates.rb

Overview

Renders and writes template-specific overlay files into the target extension directory.

Constant Summary collapse

PLACEHOLDER =
'%name%'

Instance Method Summary collapse

Constructor Details

#initialize(template_name, target_dir, vars) ⇒ TemplateOverlay

vars: { gem_name:, lex_name:, lex_class:, name_class: }



94
95
96
97
98
# File 'lib/legion/cli/lex_templates.rb', line 94

def initialize(template_name, target_dir, vars)
  @template_name = template_name
  @target_dir    = target_dir
  @vars          = vars
end

Instance Method Details

#apply(out = nil) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/legion/cli/lex_templates.rb', line 100

def apply(out = nil)
  src = LexTemplates.template_dir(@template_name)
  return unless src && Dir.exist?(src)

  each_template_file(src) do |abs_src, rel_path|
    dest_rel = rel_path.gsub(PLACEHOLDER, @vars[:lex_name])
    dest_rel = dest_rel.sub(/\.erb$/, '')
    dest_abs = File.join(@target_dir, dest_rel)

    FileUtils.mkdir_p(File.dirname(dest_abs))
    rendered = render_erb(File.read(abs_src))
    File.write(dest_abs, rendered)
    out&.success("  [#{@template_name}] #{dest_rel}")
  end
end