class ActiveSupport::ConfigurationFile

:nodoc:
non-breaking spaces.
Warns in case of YAML confusing characters, like invisible
parsing the resulting YAML.
Reads a YAML configuration file, evaluating any ERB, then

def self.parse(content_path, **options)

def self.parse(content_path, **options)
  new(content_path).parse(**options)
end

def initialize(content_path)

def initialize(content_path)
  @content_path = content_path.to_s
  @content = read content_path
end

def parse(context: nil, **options)

def parse(context: nil, **options)
  source = @content.include?("<%") ? render(context) : @content
  if source == @content
    if YAML.respond_to?(:unsafe_load)
      YAML.unsafe_load_file(@content_path, **options) || {}
    else
      YAML.load_file(@content_path, **options) || {}
    end
  else
    if YAML.respond_to?(:unsafe_load)
      YAML.unsafe_load(source, **options) || {}
    else
      YAML.load(source, **options) || {}
    end
  end
rescue Psych::SyntaxError => error
  raise "YAML syntax error occurred while parsing #{@content_path}. " \
        "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
        "Error: #{error.message}"
end

def read(content_path)

def read(content_path)
  require "yaml" unless defined?(YAML)
  File.read(content_path).tap do |content|
    if content.include?("\u00A0")
      warn "#{content_path} contains invisible non-breaking spaces, you may want to remove those"
    end
  end
end

def render(context)

def render(context)
  require "erb" unless defined?(ERB)
  erb = ERB.new(@content).tap { |e| e.filename = @content_path }
  context ? erb.result(context) : erb.result
end