Sha256: cfff4e17bed37771e925950f54c2a93a94d64078d87711bc593025d42774115f

Contents?: true

Size: 1.95 KB

Versions: 3

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true

# encoding: utf-8

module Alchemy
  class Config
    class << self
      # Returns the configuration for given parameter name.
      #
      # @param name [String]
      #
      def get(name)
        show[name.to_s]
      end
      alias_method :parameter, :get

      # Returns a merged configuration of the following files
      #
      # Alchemys default config: +gems/../alchemy_cms/config/alchemy/config.yml+
      # Your apps default config: +your_app/config/alchemy/config.yml+
      # Environment specific config: +your_app/config/alchemy/development.config.yml+
      #
      # An environment specific config overwrites the settings of your apps default config,
      # while your apps default config has precedence over Alchemys default config.
      #
      def show
        @config ||= merge_configs!(alchemy_config, main_app_config, env_specific_config)
      end

      private

      # Alchemy default configuration
      def alchemy_config
        read_file(File.join(File.dirname(__FILE__), '..', '..', 'config/alchemy/config.yml'))
      end

      # Application specific configuration
      def main_app_config
        read_file("#{Rails.root}/config/alchemy/config.yml")
      end

      # Rails Environment specific configuration
      def env_specific_config
        read_file("#{Rails.root}/config/alchemy/#{Rails.env}.config.yml")
      end

      # Tries to load yaml file from given path.
      # If it does not exist, or its empty, it returns an empty Hash.
      #
      def read_file(file)
        return YAML.load_file(file) || {} if File.exist?(file) # YAML.load_file returns false if file is empty.
        {}
      end

      # Merges all given configs together
      #
      def merge_configs!(*config_files)
        raise LoadError, 'No Alchemy config file found!' if config_files.map(&:blank?).all?
        config = {}
        config_files.each { |h| config.merge!(h.stringify_keys!) }
        config
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
alchemy_cms-4.0.0 lib/alchemy/config.rb
alchemy_cms-4.0.0.rc2 lib/alchemy/config.rb
alchemy_cms-4.0.0.rc1 lib/alchemy/config.rb