class BeetleETL::DependencyResolver

Public Class Methods

new(items) click to toggle source
# File lib/beetle_etl/step_runner/dependency_resolver.rb, line 7
def initialize(items)
  @items = items
  check
end

Public Instance Methods

resolvables(resolved) click to toggle source
# File lib/beetle_etl/step_runner/dependency_resolver.rb, line 12
def resolvables(resolved)
  @items.select do |item|
    !resolved.include?(item.name) && all_dependencies_met?(item, resolved)
  end
end

Private Instance Methods

all_dependencies_met?(item, resolved) click to toggle source
# File lib/beetle_etl/step_runner/dependency_resolver.rb, line 31
def all_dependencies_met?(item, resolved)
  item.dependencies.empty? || item.dependencies.subset?(resolved.to_set)
end
check() click to toggle source
# File lib/beetle_etl/step_runner/dependency_resolver.rb, line 20
def check
  items = @items.dup
  resolved = []

  until items.empty?
    resolvables = items.select { |item| all_dependencies_met?(item, resolved.map(&:name)) }
    raise UnsatisfiableDependenciesError if resolvables.empty?
    resolvables.each { |r| resolved << items.delete(r) }
  end
end