Class: FileTemplater::Template
- Inherits:
-
Object
- Object
- FileTemplater::Template
- Defined in:
- lib/file_templater/template.rb
Instance Method Summary collapse
-
#initialize(template, arguments, options = {}) ⇒ Template
constructor
options can include: bind: which binding rather than the default to use nomodify: if the template ERB will be loaded or not.
- #load(folder = @template) ⇒ Object
-
#transform_file_name(file) ⇒ Object
Expands the variable-in-file-name notation.
Constructor Details
#initialize(template, arguments, options = {}) ⇒ Template
options can include: bind: which binding rather than the default to use nomodify: if the template ERB will be loaded or not
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/file_templater/template.rb', line 6 def initialize(template, arguments, = {}) @nomodify = [:nomodify] @template = File.join(HUBS[:template], template) binding_string = [:bind] || template + ".rb" binding_file = File.join(HUBS[:binding], binding_string) using_binding = File.exist?(binding_file) if using_binding # Load the binding. FileActions.require_binding(binding_string) # Get the binding class name from the binding file, # and create an instance of it. binding_class = Object.const_get("Bindings::" + FileActions.get_class_name(binding_file)) @bind = binding_class.new(*arguments) end end |
Instance Method Details
#load(folder = @template) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/file_templater/template.rb', line 25 def load(folder = @template) FileUtils.mkdir(File.basename(folder)) unless folder == @template FileActions.unique_directory_list(folder).each do |f| # We need the whole path to f, but we will keep the short name. short_name = f f = File.join(folder, f) if File.directory?(f) self.load f else if !@nomodify && f.end_with?(".erb") output_file = File.open(File.join(Dir.pwd, transform_file_name(short_name)), "w") input_file = File.open(f, "r") output_file.print(ERB.new(input_file.read, nil, "<>").result(@bind && @bind.get_binding)) input_file.close output_file.close else FileUtils.copy_entry(f, File.join(Dir.pwd, transform_file_name(short_name))) end end end end |
#transform_file_name(file) ⇒ Object
Expands the variable-in-file-name notation. file is expected to be a short name
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/file_templater/template.rb', line 53 def transform_file_name(file) if @bind variables = file.scan(/{{([^}]*)}}/).flatten variables.each do |v| file.sub!("{{#{v}}}", @bind.get_binding.eval(v)) end end !@nomodify && file.end_with?(".erb") ? File.basename(file, ".*") : file end |