Sha256: d607b0e41ded2895e007dfb796e28426ab7e6bede9cbb0293c2a8cac753bc98b

Contents?: true

Size: 2 KB

Versions: 27

Compression:

Stored size: 2 KB

Contents

module PowerStencil
  module Project

    module Config

      include PowerStencil::Project::Paths

      PROJECT_CONFIG_PRIORITY = 990
      USER_CONFIG_PRIORITY = 995
      PLUGIN_CONFIG_PRIORITY_MIN = 100

      attr_reader :plugin_priority_count


      def load_project_specific_config
        # Optional config files should have less priority than the command line layer
        add_optional_config_layer project_versioned_config_file, 'versioned project config file', PROJECT_CONFIG_PRIORITY
        add_optional_config_layer project_personal_config_file, 'personal project config file', USER_CONFIG_PRIORITY
        Climatic.send :setup_logger
        logger.debug 'Project config files loaded'
      end


      def add_plugin_config(plugin_name)
        yaml_file = plugin_config_specific_file plugin_name
        priority = if priority.nil?
                     PLUGIN_CONFIG_PRIORITY_MIN
                   else
                     plugin_priority_count + 1
                   end
        raise PowerStencil::Error, 'Too many plugins !!' if priority >= PROJECT_CONFIG_PRIORITY
        add_optional_config_layer yaml_file, "'#{plugin_name}' plugin specific config", priority
        @plugin_priority_count ||= 0
        @plugin_priority_count += 1
      end

      private

      def add_optional_config_layer(yaml_file, layer_name, layer_priority)
        if File.readable? yaml_file
          logger.debug "Loading #{layer_name}: '#{yaml_file}'..."
          begin
            new_config_layer = SuperStack::Layer.new.load yaml_file
            new_config_layer.name = layer_name
            new_config_layer.priority = layer_priority
            config << new_config_layer
            new_config_layer
          rescue => e
            logger.error "The #{layer_name} '#{yaml_file}' is invalid and has been ignored !"
            logger.debug PowerStencil::Error.report_error(e)
            false
          end
        else
          logger.debug "No #{layer_name} found."
          false
        end
      end

    end

  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
power_stencil-0.4.22 lib/power_stencil/project/config.rb
power_stencil-0.4.21 lib/power_stencil/project/config.rb
power_stencil-0.4.20 lib/power_stencil/project/config.rb
power_stencil-0.4.19 lib/power_stencil/project/config.rb
power_stencil-0.4.18 lib/power_stencil/project/config.rb
power_stencil-0.4.17 lib/power_stencil/project/config.rb
power_stencil-0.4.16 lib/power_stencil/project/config.rb
power_stencil-0.4.15 lib/power_stencil/project/config.rb
power_stencil-0.4.14 lib/power_stencil/project/config.rb
power_stencil-0.4.13 lib/power_stencil/project/config.rb
power_stencil-0.4.12 lib/power_stencil/project/config.rb
power_stencil-0.4.11 lib/power_stencil/project/config.rb
power_stencil-0.4.10 lib/power_stencil/project/config.rb
power_stencil-0.4.9 lib/power_stencil/project/config.rb
power_stencil-0.4.8 lib/power_stencil/project/config.rb
power_stencil-0.4.7 lib/power_stencil/project/config.rb
power_stencil-0.4.6 lib/power_stencil/project/config.rb
power_stencil-0.4.5 lib/power_stencil/project/config.rb
power_stencil-0.4.4 lib/power_stencil/project/config.rb
power_stencil-0.4.3 lib/power_stencil/project/config.rb