class Mortar::YamlFile
Reads YAML files and optionally performs ERB evaluation
Constants
- ParseError
Attributes
content[R]
filename[R]
Public Class Methods
new(input, override_filename: nil)
click to toggle source
@param input [String,IO] A IO/File object, a path to a file or string content @param override_filename [String] use string as the filename for parse errors
# File lib/mortar/yaml_file.rb, line 24 def initialize(input, override_filename: nil) @filename = override_filename if input.respond_to?(:read) @content = input.read @filename ||= input.respond_to?(:path) ? input.path : input.to_s else @filename ||= input.to_s @content = File.read(input) end end
Public Instance Methods
basename()
click to toggle source
# File lib/mortar/yaml_file.rb, line 51 def basename File.basename(@filename) end
dirname()
click to toggle source
# File lib/mortar/yaml_file.rb, line 47 def dirname File.dirname(@filename) end
load(variables = {})
click to toggle source
@return [Array<Hash>]
# File lib/mortar/yaml_file.rb, line 36 def load(variables = {}) result = YAML.load_stream(read(variables), @filename) if result.is_a?(String) raise ParseError, "File #{"#{@filename} " if @filename}does not appear to be in YAML format" end result rescue Psych::SyntaxError => e raise ParseError, e.message end
read(variables = {})
click to toggle source
# File lib/mortar/yaml_file.rb, line 55 def read(variables = {}) Namespace.new(variables).with_binding do |ns_binding| ERB.new(@content, nil, '-').tap { |e| e.location = [@filename, nil] }.result(ns_binding) end rescue StandardError, ScriptError => e raise ParseError, "#{e.class.name} : #{e.message} (#{e.backtrace.first.gsub(/:in `with_binding'/, '')})" end