class CC::EngineRegistry

Constants

DEFAULT_COMMAND
DEFAULT_MANIFEST_PATH
DEFAULT_MEMORY_LIMIT
EngineDetails
EngineDetailsNotFoundError

Attributes

prefix[R]
yaml[R]

Public Class Methods

new(path = DEFAULT_MANIFEST_PATH, prefix = nil) click to toggle source
# File lib/cc/engine_registry.rb, line 12
def initialize(path = DEFAULT_MANIFEST_PATH, prefix = nil)
  @yaml = YAML.safe_load(File.read(path))
  @prefix = prefix || ENV["CODECLIMATE_PREFIX"] || ""
end

Public Instance Methods

each() { |engine, engine_details| ... } click to toggle source
# File lib/cc/engine_registry.rb, line 17
def each
  yaml.each do |name, metadata|
    engine = Config::Engine.new(
      name,
      channel: metadata.fetch("channels").keys.first,
    )
    engine_details = fetch_engine_details(engine)

    yield(engine, engine_details)
  end
end
fetch_engine_details(engine, development: false) click to toggle source
# File lib/cc/engine_registry.rb, line 29
def fetch_engine_details(engine, development: false)
  if development
    EngineDetails.new("codeclimate/codeclimate-#{engine.name}", nil, "")
  else
    metadata = yaml.fetch(engine.name)
    channels = metadata.fetch("channels")

    EngineDetails.new(
      [prefix, channels.fetch(engine.channel)].join,
      metadata.fetch("command", DEFAULT_COMMAND),
      metadata.fetch("description", "(No description available)"),
      memory_limit(metadata["minimum_memory_limit"]),
      metadata.fetch("source-library", {}),
      metadata.fetch("channel-versions", {}),
      metadata.fetch("plugin", {}),
    )
  end
rescue KeyError
  raise EngineDetailsNotFoundError, not_found_message(engine, channels)
end

Private Instance Methods

default_memory_limit() click to toggle source
# File lib/cc/engine_registry.rb, line 61
def default_memory_limit
  ENV["ENGINE_MEMORY_LIMIT_BYTES"] || DEFAULT_MEMORY_LIMIT
end
memory_limit(minimum_memory_limit) click to toggle source
# File lib/cc/engine_registry.rb, line 54
def memory_limit(minimum_memory_limit)
  [
    minimum_memory_limit.to_i,
    default_memory_limit.to_i,
  ].max
end
not_found_message(engine, available_channels) click to toggle source
# File lib/cc/engine_registry.rb, line 65
def not_found_message(engine, available_channels)
  if available_channels
    # Known engine, unknown channel
    "Channel #{engine.channel} not found" \
      " for #{engine.name}," \
      " available channels: #{available_channels.keys.inspect}"
  else
    # Unknown engine
    "No engine named #{engine.name} found"
  end
end