class Omgcnb::ResolveDependencies

Public Class Methods

new(buildpacks) click to toggle source
# File lib/omgcnb/resolve_dependencies.rb, line 5
def initialize(buildpacks)
  @order = []
  @unsolved = buildpacks.select(&:needs_release?)
  @solved = buildpacks - @unsolved
  @buildpacks = buildpacks

  given_buildpacks = buildpacks.flat_map {|b| b.name }
  @buildpacks.each do |buildpack|
    depends_diff = buildpack.depends_on - given_buildpacks
    raise "Cannot satisfy '#{buildpack.name}' missing: #{depends_diff}" unless depends_diff.empty?
  end
end

Public Instance Methods

call() click to toggle source
# File lib/omgcnb/resolve_dependencies.rb, line 18
def call
  while @unsolved.any?
    found = @unsolved.select { |buildpack|
      (buildpack.depends_on - @solved.map(&:name)).empty?
    }
    @order.concat(found)
    @solved.concat(found)
    @unsolved -=found
  end
end
solution() click to toggle source
# File lib/omgcnb/resolve_dependencies.rb, line 29
def solution
  call
  @order
end