Class: KuberKit::Core::Dependencies::AbstractDependencyResolver
- Inherits:
-
Object
- Object
- KuberKit::Core::Dependencies::AbstractDependencyResolver
show all
- Defined in:
- lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb
Constant Summary
collapse
- CircularDependencyError =
Class.new(KuberKit::Error)
- DependencyNotFoundError =
Class.new(KuberKit::NotFoundError)
Instance Method Summary
collapse
Instance Method Details
#dependency_batch_size ⇒ Object
79
80
81
|
# File 'lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb', line 79
def dependency_batch_size
raise "This method should be overriden"
end
|
#each_with_deps(item_names, &block) ⇒ Object
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb', line 8
def each_with_deps(item_names, &block)
resolved_dependencies = []
next_dependencies = get_next(item_names, limit: dependency_batch_size)
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) ⇒ Object
48
49
50
51
|
# 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_all_deps(item_names) ⇒ Object
55
56
57
58
|
# File 'lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb', line 55
def get_all_deps(item_names)
deps = Array(item_names).map { |i| get_recursive_deps(i) }.flatten
deps.uniq
end
|
#get_deps(item_name) ⇒ Object
75
76
77
|
# File 'lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb', line 75
def get_deps(item_name)
raise "This method should be overriden"
end
|
#get_next(item_names, resolved: [], limit: nil) ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# 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
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: []) ⇒ Object
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb', line 60
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
|