class Coach::Cli::ProviderFinder

Public Class Methods

new(middleware_name, value_name) click to toggle source
# File lib/coach/cli/provider_finder.rb, line 9
def initialize(middleware_name, value_name)
  @middleware_name = middleware_name
  @value_name = value_name
end

Public Instance Methods

find_chain() click to toggle source
# File lib/coach/cli/provider_finder.rb, line 32
def find_chain
  enforce_middleware_exists!
  middleware = Module.const_get(@middleware_name)

  enforce_middleware_requires_value!(middleware)

  provider_chain = build_provider_chain(middleware, Hash.new { Set.new }, [])

  if provider_chain.key?(@value_name.to_sym)
    chains = provider_chain[@value_name.to_sym]
  else
    err = Errors::ValueNotProvidedError.new(@middleware_name, @value_name)
    raise err
  end

  chains.map { |chain| chain.map(&:to_s).reverse }.to_set
end
find_provider() click to toggle source
# File lib/coach/cli/provider_finder.rb, line 14
def find_provider
  enforce_middleware_exists!
  middleware = Module.const_get(@middleware_name)

  enforce_middleware_requires_value!(middleware)

  provider_mapping = build_provider_mapping(middleware, Hash.new { Set.new })

  if provider_mapping.key?(@value_name.to_sym)
    providers = provider_mapping[@value_name.to_sym]
  else
    err = Errors::ValueNotProvidedError.new(@middleware_name, @value_name)
    raise err
  end

  providers.to_a.map(&:to_s)
end

Private Instance Methods

build_provider_chain(middleware, mapping, chain) click to toggle source
# File lib/coach/cli/provider_finder.rb, line 78
def build_provider_chain(middleware, mapping, chain)
  new_chain = chain + [middleware]

  middleware.provided.each do |p|
    mapping[p] = mapping[p].add(new_chain)
  end

  middleware.middleware_dependencies.each do |dep|
    build_provider_chain(dep.middleware, mapping, new_chain)
  end

  mapping
end
build_provider_mapping(middleware, mapping) click to toggle source
# File lib/coach/cli/provider_finder.rb, line 66
def build_provider_mapping(middleware, mapping)
  middleware.provided.each do |p|
    mapping[p] = mapping[p].add(middleware)
  end

  middleware.middleware_dependencies.each do |dep|
    build_provider_mapping(dep.middleware, mapping)
  end

  mapping
end
enforce_middleware_exists!() click to toggle source
# File lib/coach/cli/provider_finder.rb, line 52
def enforce_middleware_exists!
  unless Module.const_defined?(@middleware_name)
    err = Errors::MiddlewareNotFoundError.new(@middleware_name)
    raise err
  end
end
enforce_middleware_requires_value!(middleware) click to toggle source
# File lib/coach/cli/provider_finder.rb, line 59
def enforce_middleware_requires_value!(middleware)
  unless middleware.requires?(@value_name.to_sym)
    err = Errors::ValueNotRequiredError.new(@middleware_name, @value_name)
    raise err
  end
end