Class: Spider::Model::Sync

Inherits:
Object show all
Includes:
TSort
Defined in:
lib/spiderfw/model/sync.rb

Defined Under Namespace

Classes: SyncTask

Instance Method Summary collapse

Constructor Details

#initializeSync

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

#eachObject



26
27
28
29
30
# File 'lib/spiderfw/model/sync.rb', line 26

def each
    sorted.each do |model|
        yield model
    end
end

#lengthObject



32
33
34
# File 'lib/spiderfw/model/sync.rb', line 32

def length
  @model_tasks.keys.length
end

#sortedObject



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