Sha256: aebaf50475ef860e64cec8a2632bdd919180bdf50aefca43d9da9520e887c5b6

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

require 'meta'
require 'yaml'
module ConfigFiles

  class << self
    def included(base)
      base.class_eval do
        extend ClassMethods
      end
    end
  end

  module ClassMethods
    include Meta
    attr_accessor :directories

    def yaml_extension
      '.yml'
    end

    def config_key
      :etc
    end

    def config_directories(*arr)
      self.directories||={ :etc => ['etc', '/etc'] }
      arr.each do |directory_list|
        directory_list.each do |key, value|
          self.directories[key]=value.map { |dir| File.expand_path(dir) }
          meta_def("#{key}_dir") { @directories[key] }
        end
      end
    end

    def static_config_files(*arr)
      arr.each do |file|
        content=YAML.load_file(config_file(file))
        meta_def(file) { content }
      end
    end

    def dynamic_config_files(*arr)
      arr.each do |file|
        meta_def(file) { YAML.load_file(config_file(file)) }
      end
    end

    alias_method :config_files, :dynamic_config_files

    private
    def first_directory(file, key=config_key)
      self.directories[key].find { |directory|
        File.exists?(File.join(directory, "#{file}#{yaml_extension}"))
      } || (raise Errno::ENOENT, "No #{file}#{yaml_extension} in #{self.directories[key]}")
    end

    def config_file(file, key=config_key)
      File.join(first_directory(file, key), "#{file}#{yaml_extension}")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
config_files-0.0.4 lib/config_files.rb