Parent

Class/Module Index [+]

Quicksearch

Fluent::Registry

Attributes

kind[R]

Public Class Methods

new(kind, search_prefix) click to toggle source
# File lib/fluent/registry.rb, line 21
def initialize(kind, search_prefix)
  @kind = kind
  @search_prefix = search_prefix
  @map = {}
end

Public Instance Methods

lookup(type) click to toggle source
# File lib/fluent/registry.rb, line 34
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
register(type, value) click to toggle source
# File lib/fluent/registry.rb, line 29
def register(type, value)
  type = type.to_sym
  @map[type] = value
end
search(type) click to toggle source
# File lib/fluent/registry.rb, line 46
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

[Validate]

Generated with the Darkfish Rdoc Generator 2.