lib/inch/config.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Inch
  # Stores the configuration for Inch
  #
  # @see config/base.rb
  class Config
    class << self
      def instance(language = :ruby)
        if (block = @blocks[language.to_s])
          config = Config::Base.new(language)
          config = config.update(&block)
          config
        else
          fail "Language not registered: #{language}"
        end
      end

      # Registers a configuration block for a given language.
      #
      # @return [void]
      def register(language, &block)
        @blocks ||= {}
        @blocks[language.to_s] = block
      end

      def codebase(language = :ruby)
        instance(language).codebase
      end

      def base(&block)
        Config::Base.new(:__base__).update(&block)
      end

      # Returns the Config object for a given +language+.
      # Optionally parses a given +path+ for inch.yml
      #
      # @return [Config::Base]
      def for(language, path = nil)
        config = instance(language)
        config.codebase.update_via_yaml(path) if path
        config
      end

      def namespace(language, submodule = nil)
        const_name = ::Inch::Language.constants.detect do |name|
          name.to_s.downcase == language.to_s.downcase
        end
        const = ::Inch::Language.const_get(const_name)
        const = const.const_get(submodule) unless submodule.nil?
        const
      end
    end
  end
end

require 'inch/config/base'
require 'inch/config/evaluation'
require 'inch/config/codebase'