Sha256: 0efefe548be0fa044298d6afc863f335aa130608cc31d4a198bdece65ef7fc58

Contents?: true

Size: 834 Bytes

Versions: 1

Compression:

Stored size: 834 Bytes

Contents

# frozen_string_literal: true

require 'yaml'
require 'erb'

module Conifer
  class File
    NotFoundError = Class.new(StandardError)

    attr_reader :name, :prefix, :dir

    def initialize(name, dir:, prefix: nil)
      @name = name
      @prefix = prefix
      @dir = dir
    end

    def [](key)
      args = key.split('.').tap { |v| v.prepend(prefix) if prefix }
      config.dig(*args)
    end

    def as_hash
      config
    end

    private

    def config
      @config ||= YAML.safe_load(ERB.new(::File.read(path)).result)
    end

    def path(directory = dir)
      file = ::File.join(directory, name).to_s

      if ::File.exist?(file)
        file
      else
        raise NotFoundError, "Could not find file #{name}" if directory == '/'

        path(::File.expand_path('..', directory))
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
conifer-0.2.0 lib/conifer/file.rb