Class: PipeFitter::YamlLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/pipe_fitter/yaml_loader.rb

Instance Method Summary collapse

Constructor Details

#initializeYamlLoader

Returns a new instance of YamlLoader.



8
9
10
# File 'lib/pipe_fitter/yaml_loader.rb', line 8

def initialize
  @search_path = [Pathname.new(".")]
end

Instance Method Details

#include_template(filename, context = {}) ⇒ Object



26
27
28
29
30
# File 'lib/pipe_fitter/yaml_loader.rb', line 26

def include_template(filename, context = {})
  path = search_filepath(filename)
  eval_erb(File.read(path), context)
    .gsub("\n", "\n" + " " * (context[:indent] || 0))
end

#load(filename) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/pipe_fitter/yaml_loader.rb', line 12

def load(filename)
  @search_path.unshift(Pathname.new(filename).dirname)
  text = eval_erb(grep_v(filename, /^\s*#/))
  YAML.load(text, aliases: true) || {}
rescue ArgumentError
  YAML.load(text) || {}
rescue Psych::SyntaxError => e
  text.split("\n").each_with_index do |l, i|
    mark = (e.line == i + 1) ? "*" : " "
    $stderr.puts format("%s%4d| %s", mark, i + 1, l)
  end
  raise e
end

#search_filepath(filename) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/pipe_fitter/yaml_loader.rb', line 32

def search_filepath(filename)
  dir = @search_path.find { |p| p.join(filename).exist? }
  if dir
    dir.join(filename)
  elsif File.exists?(filename)
    filename
  end
end