Sha256: be714a9a573b36e8b0ee0cccb4886564a7092bb9552e03332a5aa2e911e9e507

Contents?: true

Size: 1.7 KB

Versions: 4

Compression:

Stored size: 1.7 KB

Contents

module Oxidized
  require 'oxidized/model/model'
  require 'oxidized/input/input'
  require 'oxidized/output/output'
  require 'oxidized/source/source'
  class Manager
    class << self
      def load dir, file
        require File.join dir, file + '.rb'
        klass = nil
        [Oxidized, Object].each do |mod|
          klass = mod.constants.find { |const| const.to_s.downcase == file.downcase }
          klass = mod.constants.find { |const| const.to_s.downcase == 'oxidized' + file.downcase } unless klass
          klass = mod.const_get klass if klass
          break if klass
        end
        i = klass.new
        i.setup if i.respond_to? :setup
        { file => klass }
      rescue LoadError
        false
      end
    end

    attr_reader :input, :output, :source, :model, :hook
    def initialize
      @input  = {}
      @output = {}
      @source = {}
      @model  = {}
      @hook   = {}
    end

    def add_input name
      loader @input, Config::InputDir, "input", name
    end

    def add_output name
      loader @output, Config::OutputDir, "output", name
    end

    def add_source name
      loader @source, Config::SourceDir, "source", name
    end

    def add_model name
      loader @model, Config::ModelDir, "model", name
    end

    def add_hook name
      loader @hook, Config::HookDir, "hook", name
    end

    private

    # if local version of file exists, load it, else load global - return falsy value if nothing loaded
    def loader hash, global_dir, local_dir, name
      dir = File.join(Config::Root, local_dir)
      map = Manager.load(dir, name) if File.exist? File.join(dir, name + ".rb")
      map = Manager.load(global_dir, name) unless map
      hash.merge!(map) if map
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
oxidized-0.25.1 lib/oxidized/manager.rb
oxidized-0.25.0 lib/oxidized/manager.rb
oxidized-0.24.0 lib/oxidized/manager.rb
oxidized-0.23.0 lib/oxidized/manager.rb