class Verifly::DependentCallbacks::CallbackGroup::TSortService
Implements topoplogy sorting of callbacks. As far as CallbackGroup
is designed to store Callbacks, it is unable to link them into graph immediately . Service
can do it, because if some callbacks are missing on compilation stage, there should be an error @see ruby-doc.org/stdlib-2.3.4/libdoc/tsort/rdoc/TSort.html @attr dependencies [{ Callback
=> Callback
}] dependency graph
Attributes
dependencies[RW]
Public Class Methods
call(callback_group)
click to toggle source
@param callback_group [CallbackGroup] group to be tsorted @return [[Callback]] tsorted callbacks array (aka sequence)
# File lib/verifly/dependent_callbacks/callback_group.rb, line 25 def self.call(callback_group) new(callback_group).tsort end
new(callback_group)
click to toggle source
@param callback_group [CallbackGroup] group to be tsorted
# File lib/verifly/dependent_callbacks/callback_group.rb, line 30 def initialize(callback_group) self.dependencies = Hash.new { |h, k| h[k] = Set[] } callback_group.list.each do |callback| dependencies[callback] ||= [] callback.before.each do |key| dependencies[callback_group.index.fetch(key)] << callback end callback.after.each do |key| dependencies[callback] << callback_group.index.fetch(key) end end end
Private Instance Methods
tsort_each_child(node, &block)
click to toggle source
@api stdlib @see TSort
# File lib/verifly/dependent_callbacks/callback_group.rb, line 56 def tsort_each_child(node, &block) dependencies[node].each(&block) end
tsort_each_node(&block)
click to toggle source
@api stdlib @see TSort
# File lib/verifly/dependent_callbacks/callback_group.rb, line 50 def tsort_each_node(&block) dependencies.keys.each(&block) end