class KuberKit::Core::Dependencies::AbstractDependencyResolver
Constants
- CircularDependencyError
- DependencyNotFoundError
Public Instance Methods
dependency_batch_size()
click to toggle source
# File lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb, line 72 def dependency_batch_size raise "This method should be overriden" end
each_with_deps(item_names, &block)
click to toggle source
# File lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb, line 8 def each_with_deps(item_names, &block) resolved_dependencies = [] # Get first list of dependencies ready to resolve next_dependencies = get_next(item_names, limit: dependency_batch_size) # Call the block for each list of dependencies ready to resolve, then calculate the next list while (next_dependencies - resolved_dependencies).any? block.call(next_dependencies) resolved_dependencies += next_dependencies next_dependencies = get_next(item_names, resolved: resolved_dependencies, limit: dependency_batch_size) end (item_names - resolved_dependencies).each_slice(dependency_batch_size) do |group| block.call(group) end end
get_all(item_names)
click to toggle source
# File lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb, line 48 def get_all(item_names) deps = Array(item_names).map { |i| get_recursive_deps(i) }.flatten (deps + item_names).uniq end
get_deps(item_name)
click to toggle source
# File lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb, line 68 def get_deps(item_name) raise "This method should be overriden" end
get_next(item_names, resolved: [], limit: nil)
click to toggle source
# File lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb, line 32 def get_next(item_names, resolved: [], limit: nil) deps = Array(item_names).map { |i| get_recursive_deps(i) }.flatten.uniq # Find out which dependencies are ready to resolve, # they should not have unresolved personal dependencies ready_to_resolve = deps.select do |dep_name| unresolved_deps = get_deps(dep_name) - resolved unresolved_deps.empty? end unresolved_deps = ready_to_resolve - resolved unresolved_deps = unresolved_deps.take(limit) if limit unresolved_deps end
get_recursive_deps(item_name, dependency_tree: [])
click to toggle source
# File lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb, line 53 def get_recursive_deps(item_name, dependency_tree: []) deps = get_deps(item_name) if dependency_tree.include?(item_name) raise CircularDependencyError, "Circular dependency found for #{item_name}. Dependency tree: #{dependency_tree.inspect}" end child_deps = [] deps.each do |i| child_deps += get_recursive_deps(i, dependency_tree: dependency_tree + [item_name]) end (deps + child_deps).uniq end