Class: Plines::DependencyGraph
- Inherits:
-
Object
- Object
- Plines::DependencyGraph
- Defined in:
- lib/plines/dependency_graph.rb
Overview
Represents a dependency graph of Plines steps. This graph contains Jobs (i.e. Step classes paired with data). The graph takes care of preventing duplicate step instances.
Defined Under Namespace
Classes: CircularDependencyError
Instance Attribute Summary collapse
-
#steps ⇒ Object
readonly
FYI, steps is not ordered according to dependencies.
Instance Method Summary collapse
-
#initialize(pipeline, batch_data) ⇒ DependencyGraph
constructor
A new instance of DependencyGraph.
- #ordered_steps ⇒ Object
Constructor Details
#initialize(pipeline, batch_data) ⇒ DependencyGraph
Returns a new instance of DependencyGraph.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/plines/dependency_graph.rb', line 13 def initialize(pipeline, batch_data) step_classes = pipeline.step_classes @steps = Job.accumulate_instances do step_classes.each do |step_klass| step_klass.jobs_for(batch_data).each do |job| job.add_dependencies_for(batch_data) end end @terminal_jobs = pipeline.terminal_step.jobs_for(batch_data) end cleanup_and_validate_dependencies! end |
Instance Attribute Details
#steps ⇒ Object (readonly)
FYI, steps is not ordered according to dependencies
8 9 10 |
# File 'lib/plines/dependency_graph.rb', line 8 def steps @steps end |
Instance Method Details
#ordered_steps ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/plines/dependency_graph.rb', line 28 def ordered_steps visited = Set.new Enumerator.new do |yielder| steps.each do |step| yield_next_ordered_step_for(step, visited, yielder) end end end |