Sha256: 7b2765d93730b84669cc4c4f6d56d89ebccd9fd38db2c92a65d6401a29c0a5dd

Contents?: true

Size: 1.94 KB

Versions: 17

Compression:

Stored size: 1.94 KB

Contents

module Fluent
  require 'fluent/config/error'

  class Registry
    def initialize(kind, search_prefix)
      @kind = kind
      @search_prefix = search_prefix
      @map = {}
    end

    attr_reader :kind

    def register(type, value)
      type = type.to_sym
      @map[type] = value
    end

    def lookup(type)
      type = type.to_sym
      if value = @map[type]
        return value
      end
      search(type)
      if value = @map[type]
        return value
      end
      raise ConfigError, "Unknown #{@kind} plugin '#{type}'. Run 'gem search -rd fluentd-plugin' to find plugins"  # TODO error class
    end

    def search(type)
      path = "#{@search_prefix}#{type}"

      # prefer LOAD_PATH than gems
      files = $LOAD_PATH.map { |lp|
        lpath = File.expand_path(File.join(lp, "#{path}.rb"))
        File.exist?(lpath) ? lpath : nil
      }.compact
      unless files.empty?
        # prefer newer version
        require files.sort.last
        return
      end

      # search gems
      if defined?(::Gem::Specification) && ::Gem::Specification.respond_to?(:find_all)
        specs = Gem::Specification.find_all { |spec|
          spec.contains_requirable_file? path
        }

        # prefer newer version
        specs = specs.sort_by { |spec| spec.version }
        if spec = specs.last
          spec.require_paths.each { |lib|
            file = "#{spec.full_gem_path}/#{lib}/#{path}"
            require file
          }
        end

        # backward compatibility for rubygems < 1.8
      elsif defined?(::Gem) && ::Gem.respond_to?(:searcher)
        #files = Gem.find_files(path).sort
        specs = Gem.searcher.find_all(path)

        # prefer newer version
        specs = specs.sort_by { |spec| spec.version }
        specs.reverse_each { |spec|
          files = Gem.searcher.matching_files(spec, path)
          unless files.empty?
            require files.first
            break
          end
        }
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
fluentd-0.10.62 lib/fluent/registry.rb
fluentd-0.10.61 lib/fluent/registry.rb
fluentd-0.10.60 lib/fluent/registry.rb
fluentd-0.10.59 lib/fluent/registry.rb
fluentd-0.10.58 lib/fluent/registry.rb
fluentd-0.10.57 lib/fluent/registry.rb
fluentd-0.10.56 lib/fluent/registry.rb
fluentd-0.10.55 lib/fluent/registry.rb
fluentd-0.10.54 lib/fluent/registry.rb
fluentd-0.10.53 lib/fluent/registry.rb
fluentd-0.10.52 lib/fluent/registry.rb
fluentd-0.10.51 lib/fluent/registry.rb
fluentd-0.10.50 lib/fluent/registry.rb
fluentd-0.10.49 lib/fluent/registry.rb
fluentd-0.10.48 lib/fluent/registry.rb
fluentd-0.10.47 lib/fluent/registry.rb
fluentd-0.10.46 lib/fluent/registry.rb