Class: Migsupo::Differ::DiffCalculator

Inherits:
Object
  • Object
show all
Defined in:
lib/migsupo/differ/diff_calculator.rb

Instance Method Summary collapse

Constructor Details

#initialize(rename_hints: {}) ⇒ DiffCalculator

Returns a new instance of DiffCalculator.



15
16
17
# File 'lib/migsupo/differ/diff_calculator.rb', line 15

def initialize(rename_hints: {})
  @rename_hints = rename_hints
end

Instance Method Details

#calculate(desired:, current:) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/migsupo/differ/diff_calculator.rb', line 19

def calculate(desired:, current:)
  operations = []

  desired_names = Set.new(desired.tables.keys)
  current_names = Set.new(current.tables.keys)

  (desired_names - current_names).each do |name|
    operations << Operations::CreateTable.new(desired.tables[name])
  end

  (current_names - desired_names).each do |name|
    operations << Operations::DropTable.new(current.tables[name])
  end

  (desired_names & current_names).each do |name|
    operations.concat(diff_table(desired.tables[name], current.tables[name]))
  end

  Diff.new(operations: operations)
end