Sha256: f0451361261fa7e629023aee93f469ecef9c375202fc5e4eb3436f0ad4ab8b40

Contents?: true

Size: 1.95 KB

Versions: 10

Compression:

Stored size: 1.95 KB

Contents

#
# This file is part of the ballast gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
#

module Ballast
  # A class which loads a list of YAML files in a folder and expose them in a dotted notation.
  #   For each file, only the subsection for the current environment is loaded, so each YAML document should be an hash.
  class Configuration < HashWithIndifferentAccess
    # Returns the default root directory to lookup a configuration. It will be the Rails root if set or the current folder.
    #
    # @return [String] The default root directory to lookup a configuration.
    def self.default_root
      defined?(Rails) ? Rails.root.to_s : Dir.pwd
    end

    # Returns the default environment. It will be the first non-nil of the following: Rails environment, the Rack environment or "production".
    #
    # @return [String] The default environment.
    def self.default_environment
      defined?(Rails) ? Rails.env : ENV.fetch("RACK_ENV", "production")
    end

    # Creates a new configuration.
    #
    # @param sections [Array] A list of sections to load. Each section name should be the basename (without extension) of a file in the root folder.
    #   Subfolders are not supported.
    # @param root [String|NilClass] The root folder where look for file.
    # @param environment [String|NilClass] The environment to load.
    def initialize(*sections, root: nil, environment: nil)
      super()
      root ||= ::Ballast::Configuration.default_root
      environment ||= ::Ballast::Configuration.default_environment

      sections.each do |section|
        content = load_section(root, section)
        self[section.underscore] = content.fetch(environment, {})
      end

      enable_dotted_access
    end

    private

    # :nodoc:
    def load_section(root, section)
      YAML.load_file("#{root}/config/#{section}.yml") rescue {}
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
ballast-2.2.3 lib/ballast/configuration.rb
ballast-2.2.2 lib/ballast/configuration.rb
ballast-2.2.1 lib/ballast/configuration.rb
ballast-2.2.0 lib/ballast/configuration.rb
ballast-2.1.3 lib/ballast/configuration.rb
ballast-2.1.2 lib/ballast/configuration.rb
ballast-2.1.1 lib/ballast/configuration.rb
ballast-2.1.0 lib/ballast/configuration.rb
ballast-2.0.1 lib/ballast/configuration.rb
ballast-2.0.0 lib/ballast/configuration.rb