Class: Spider::Migrations::Replace

Inherits:
Migration show all
Defined in:
lib/spiderfw/model/migrations/replace.rb

Instance Method Summary collapse

Constructor Details

#initialize(model, element, values) ⇒ Replace

Returns a new instance of Replace.



5
6
7
8
9
10
# File 'lib/spiderfw/model/migrations/replace.rb', line 5

def initialize(model, element, values)
    @models = model
    @models = [@models] unless @models.is_a?(Enumerable)
    @element = element
    @values = values
end

Instance Method Details

#runObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/spiderfw/model/migrations/replace.rb', line 12

def run
    @models.each do |model|
        field = model.mapper.schema.field(model.get_element(@element).name)
        table = model.mapper.schema.table
        raise "Table #{table} does not have a field #{field}" unless field
        @values.each do |from, to|
            save = {
                :table => table, 
                :values => {field => to},
                :condition => {:values => [[field, '=', from]]}
            }
            sql, bind_vars = model.storage.sql_update(save)
            model.storage.execute(sql, *bind_vars)                
        end
    end
end

#undoObject



29
30
31
32
33
# File 'lib/spiderfw/model/migrations/replace.rb', line 29

def undo
    @models.each do |model|
        Replace.new(model, @element, @values.invert).run
    end
end