Sha256: f5493282e175629cd14dd2ae4f651f6d52174b02c2969c6346257cbdeda1c741

Contents?: true

Size: 1.66 KB

Versions: 5

Compression:

Stored size: 1.66 KB

Contents

module MetricFu
  class Loader
    # TODO: This class mostly serves to clean up the base MetricFu module,
    #   but needs further work

    attr_reader :loaded_files
    def initialize(lib_root)
      @lib_root = lib_root
      @loaded_files = []
    end

    def lib_require(base='',&block)
      paths = []
      base_path = File.join(@lib_root, base)
      Array((yield paths, base_path)).each do |path|
        file = File.join(base_path, *Array(path))
        require file
        if @loaded_files.include?(file)
          puts "!!!\tAlready loaded #{file}" if !!(ENV['MF_DEBUG'] =~ /true/i)
        else
          @loaded_files << file
        end
      end
    end

    # TODO: Reduce duplication of directory logic
    def create_dirs(klass)
      class << klass
        Array(yield).each do |dir|
          define_method("#{dir}_dir") do
            File.join(lib_dir,dir)
          end
          module_eval(%Q(def #{dir}_require(&block); lib_require('#{dir}', &block); end))
        end
      end
    end

    def create_artifact_subdirs(klass)
      class << klass
        Array(yield).each do |dir|
          define_method("#{dir.gsub(/[^A-Za-z0-9]/,'')}_dir") do
            File.join(artifact_dir,dir)
          end
        end
      end
    end

    def load_tasks(tasks_relative_path)
      load File.join(@lib_root, 'tasks', *Array(tasks_relative_path))
    end

    def setup
      MetricFu.lib_require { 'configuration' }
      MetricFu.lib_require { 'metric' }
      # TODO: consolidate these setup files
      MetricFu.lib_require { 'initial_requires' }
      # Load a few things to make our lives easier elsewhere.
      MetricFu.lib_require { 'load_files' }
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
metric_fu-4.4.4 lib/metric_fu/loader.rb
metric_fu-4.4.3 lib/metric_fu/loader.rb
metric_fu-4.4.2 lib/metric_fu/loader.rb
metric_fu-4.4.1 lib/metric_fu/loader.rb
metric_fu-4.4.0 lib/metric_fu/loader.rb