Class: Kettle::Family::ReleaseWaves
- Inherits:
-
Object
- Object
- Kettle::Family::ReleaseWaves
- Defined in:
- lib/kettle/family/release_waves.rb
Instance Method Summary collapse
-
#initialize(members:) ⇒ ReleaseWaves
constructor
A new instance of ReleaseWaves.
- #waves ⇒ Object
Constructor Details
#initialize(members:) ⇒ ReleaseWaves
Returns a new instance of ReleaseWaves.
6 7 8 |
# File 'lib/kettle/family/release_waves.rb', line 6 def initialize(members:) @members = members end |
Instance Method Details
#waves ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/kettle/family/release_waves.rb', line 10 def waves by_name = members.to_h { |member| [member.name, member] } pending = by_name.keys completed = [] [].tap do |planned_waves| until pending.empty? hard_ready = pending.select do |name| selected_hard_dependencies_for(by_name.fetch(name), by_name).all? { |dependency| completed.include?(dependency) } end raise Error, "cyclic release dependency order: #{pending.join(", ")}" if hard_ready.empty? wave_names = hard_ready.select do |name| selected_dependencies_for(by_name.fetch(name), by_name).all? { |dependency| completed.include?(dependency) } end wave_names = [hard_ready.first] if wave_names.empty? planned_waves << wave_names.map { |name| by_name.fetch(name) } completed.concat(wave_names) pending -= wave_names end end end |