Class: Spider::Model::Sorter
- Includes:
- TSort
- Defined in:
- lib/spiderfw/model/model.rb
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.
300 301 302 303 304 305 306 307 |
# File 'lib/spiderfw/model/model.rb', line 300 def initialize(models, ={}) @model_tasks = {} @processed_deps = {} @processed = {} @models = models @options = @models.each{ |m| collect_dependencies(m) } end |
Instance Method Details
#collect_dependencies(model) ⇒ Object
317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 |
# File 'lib/spiderfw/model/model.rb', line 317 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 @options[: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
342 343 344 |
# File 'lib/spiderfw/model/model.rb', line 342 def length @model_tasks.keys.length end |
#sort ⇒ Object
336 337 338 339 |
# File 'lib/spiderfw/model/model.rb', line 336 def sort tasks = tsort tasks.map{ |t| t.model } end |
#tsort_each_child(node, &block) ⇒ Object
313 314 315 |
# File 'lib/spiderfw/model/model.rb', line 313 def tsort_each_child(node, &block) node.dependencies.each(&block) end |
#tsort_each_node(&block) ⇒ Object
309 310 311 |
# File 'lib/spiderfw/model/model.rb', line 309 def tsort_each_node(&block) @model_tasks.each_value(&block) end |