Class: Spider::Model::Sorter
- Includes:
- TSort
- Defined in:
- lib/spiderfw/model/model.rb
Overview
Helper class from sorting models using TSort
Instance Method Summary collapse
- #collect_dependencies(model) ⇒ Object
-
#initialize(models, options = {}) ⇒ Sorter
constructor
A new instance of Sorter.
- #length ⇒ Object
- #sort ⇒ Object
- #tsort_each_child(node, &block) ⇒ Object
- #tsort_each_node(&block) ⇒ Object
Constructor Details
#initialize(models, options = {}) ⇒ Sorter
Returns a new instance of Sorter.
393 394 395 396 397 398 399 400 |
# File 'lib/spiderfw/model/model.rb', line 393 def initialize(models, ={}) @model_tasks = {} @processed_deps = {} @processed = {} @models = models = @models.each{ |m| collect_dependencies(m) } end |
Instance Method Details
#collect_dependencies(model) ⇒ Object
410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 |
# File 'lib/spiderfw/model/model.rb', line 410 def collect_dependencies(model) return if model.subclass_of?(Spider::Model::InlineModel) @processed_deps[model] = true @model_tasks[model] ||= SortTask.new(model) if @models.include?(model.superclass) @model_tasks[model.superclass] ||= SortTask.new(model.superclass) @model_tasks[model] << @model_tasks[model.superclass] end if [:association_dependencies] model.elements.each do |name, element| if element.model? && !element.attributes[:added_reverse] && @models.include?(element.type) @model_tasks[element.type] ||= SortTask.new(element.type) @model_tasks[model] << @model_tasks[element.type] end end end end |
#length ⇒ Object
435 436 437 |
# File 'lib/spiderfw/model/model.rb', line 435 def length @model_tasks.keys.length end |
#sort ⇒ Object
429 430 431 432 |
# File 'lib/spiderfw/model/model.rb', line 429 def sort tasks = tsort tasks.map{ |t| t.model } end |
#tsort_each_child(node, &block) ⇒ Object
406 407 408 |
# File 'lib/spiderfw/model/model.rb', line 406 def tsort_each_child(node, &block) node.dependencies.each(&block) end |
#tsort_each_node(&block) ⇒ Object
402 403 404 |
# File 'lib/spiderfw/model/model.rb', line 402 def tsort_each_node(&block) @model_tasks.each_value(&block) end |