Sha256: 13992ff0fd9a2f3dc5e916534d2371d4457fb650751094e2e26a96eee6a95314

Contents?: true

Size: 1.9 KB

Versions: 22

Compression:

Stored size: 1.9 KB

Contents

#
# Fluentd
#
#    Licensed under the Apache License, Version 2.0 (the "License");
#    you may not use this file except in compliance with the License.
#    You may obtain a copy of the License at
#
#        http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#

require 'fluent/config/error'

module Fluent
  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 fluent-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

      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
    end
  end
end

Version data entries

22 entries across 22 versions & 2 rubygems

Version Path
fluentd-0.12.43 lib/fluent/registry.rb
fluentd-0.12.42 lib/fluent/registry.rb
fluentd-0.12.41 lib/fluent/registry.rb
fluentd-0.12.40 lib/fluent/registry.rb
fluentd-0.12.39 lib/fluent/registry.rb
fluentd-0.12.38 lib/fluent/registry.rb
fluentd-0.12.37 lib/fluent/registry.rb
fluentd-0.12.36 lib/fluent/registry.rb
fluent-plugin-detect-memb-exceptions-0.0.2 vendor/bundle/ruby/2.0.0/gems/fluentd-0.12.35/lib/fluent/registry.rb
fluent-plugin-detect-memb-exceptions-0.0.1 vendor/bundle/ruby/2.0.0/gems/fluentd-0.12.35/lib/fluent/registry.rb
fluentd-0.12.35 lib/fluent/registry.rb
fluentd-0.12.34 lib/fluent/registry.rb
fluentd-0.12.33 lib/fluent/registry.rb
fluentd-0.12.32 lib/fluent/registry.rb
fluentd-0.12.31 lib/fluent/registry.rb
fluentd-0.12.30 lib/fluent/registry.rb
fluentd-0.12.29 lib/fluent/registry.rb
fluentd-0.12.28 lib/fluent/registry.rb
fluentd-0.12.27 lib/fluent/registry.rb
fluentd-0.12.26 lib/fluent/registry.rb