Class: Spider::Model::Sync
- Includes:
- TSort
- Defined in:
- lib/spiderfw/model/sync.rb
Defined Under Namespace
Classes: SyncTask
Instance Method Summary collapse
- #add(models) ⇒ Object
- #collect_dependencies(model) ⇒ Object
- #each ⇒ Object
-
#initialize ⇒ Sync
constructor
A new instance of Sync.
- #length ⇒ Object
- #sorted ⇒ Object
- #tsort_each_child(node, &block) ⇒ Object
-
#tsort_each_node(&block) ⇒ Object
def dump(model, model_server) collect_dependencies(model) tasks = tsort end.
Constructor Details
#initialize ⇒ Sync
Returns a new instance of Sync.
8 9 10 11 12 |
# File 'lib/spiderfw/model/sync.rb', line 8 def initialize @model_tasks = {} @processed_deps = {} @processed = {} end |
Instance Method Details
#add(models) ⇒ Object
14 15 16 17 18 19 |
# File 'lib/spiderfw/model/sync.rb', line 14 def add(models) models = [models] unless models.is_a?(Array) models.each do |model| collect_dependencies(model) end end |
#collect_dependencies(model) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/spiderfw/model/sync.rb', line 62 def collect_dependencies(model) return collect_dependencies(model.superclass) if model.attributes[:inherit_storage] return if model.subclass_of?(Spider::Model::InlineModel) @processed_deps[model] = true @model_tasks[model] ||= SyncTask.new(model) model.elements_array.select{ |el| el.model? && model.mapper.have_references?(el) }.each do |el| @model_tasks[el.model] ||= SyncTask.new(el.model) @model_tasks[model] << @model_tasks[el.model] end model.elements_array.select{ |el| el.model? }.each do |el| collect_dependencies(el.model) unless @processed_deps[el.model] end end |
#each ⇒ Object
26 27 28 29 30 |
# File 'lib/spiderfw/model/sync.rb', line 26 def each sorted.each do |model| yield model end end |
#length ⇒ Object
32 33 34 |
# File 'lib/spiderfw/model/sync.rb', line 32 def length @model_tasks.keys.length end |
#sorted ⇒ Object
21 22 23 24 |
# File 'lib/spiderfw/model/sync.rb', line 21 def sorted tasks = tsort tasks.map{ |t| t.model } end |
#tsort_each_child(node, &block) ⇒ Object
58 59 60 |
# File 'lib/spiderfw/model/sync.rb', line 58 def tsort_each_child(node, &block) node.dependencies.each(&block) end |
#tsort_each_node(&block) ⇒ Object
def dump(model, model_server)
collect_dependencies(model)
tasks = tsort
end
def fetch!(model, model_server)
model.mapper.delete_all!
collect_dependencies(model)
tasks = tsort
tasks.each do |task|
res = model_server.all(model.name)
res.each do |obj|
debugger
model.mapper.insert(obj)
end
end
end
54 55 56 |
# File 'lib/spiderfw/model/sync.rb', line 54 def tsort_each_node(&block) @model_tasks.each_value(&block) end |