Class: Erd::ErdController

Inherits:
ApplicationController show all
Defined in:
app/controllers/erd/erd_controller.rb

Constant Summary collapse

POSITIONS_JSON_FILE =
Rails.root.join('db/erd_positions.json').freeze
OLD_POSITIONS_JSON_FILE =

for compatibility

Rails.root.join('db/erd_positions.json').freeze

Instance Method Summary collapse

Instance Method Details

#editObject



15
16
17
18
# File 'app/controllers/erd/erd_controller.rb', line 15

def edit
  @erd = render_plain generate_plain, saved_positions, true
  @migrations = Erd::Migrator.status
end

#indexObject



11
12
13
# File 'app/controllers/erd/erd_controller.rb', line 11

def index
  @erd = render_plain generate_plain, saved_positions
end

#migrateObject



75
76
77
78
# File 'app/controllers/erd/erd_controller.rb', line 75

def migrate
  Erd::Migrator.run_migrations :up => params[:up], :down => params[:down]
  redirect_to erd.root_path, :flash => {:executed_migrations => params.slice(:up, :down)}
end

#updateObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/controllers/erd/erd_controller.rb', line 20

def update
  if params[:position_changes].present?
    position_changes = ActiveSupport::JSON.decode(params[:position_changes])
    positions = saved_positions
    positions.merge! position_changes.transform_keys(&:tableize)
    POSITIONS_JSON_FILE.open('w') {|f| f.write positions.to_json }
  end

  changes = params[:changes].present? ? ActiveSupport::JSON.decode(params[:changes]) : []
  executed_migrations, failed_migrations = [], []
  changes.each do |row|
    begin
      action, model, column, from, to = row['action'], row['model'], row['column'], row['from'], row['to']

      case action
      when 'create_model'
        columns = column.split(' ').compact
        generated_migration_file = Erd::GenaratorRunner.execute_generate_model model, columns
      when 'remove_model'
        model = model.tableize
        generated_migration_file = Erd::GenaratorRunner.execute_generate_migration "drop_#{model}"
        gsub_file generated_migration_file, /def (up|change).*  end/m, "def change\n    drop_table :#{model}\n  end"
      when 'rename_model'
        _model, from, to = from.tableize, to.tableize, model.tableize
        generated_migration_file = Erd::GenaratorRunner.execute_generate_migration "rename_#{from}_to_#{to}"
        gsub_file generated_migration_file, /def (up|change).*  end/m, "def change\n    rename_table :#{from}, :#{to}\n  end"
      when 'add_column'
        model = model.tableize
        name_and_type = column.scan(/(.*)\((.*?)\)/).first
        name, type = name_and_type[0], name_and_type[1]
        generated_migration_file = Erd::GenaratorRunner.execute_generate_migration "add_#{name}_to_#{model}", ["#{name}:#{type}"]
      when 'rename_column'
        model = model.tableize
        generated_migration_file = Erd::GenaratorRunner.execute_generate_migration "rename_#{model}_#{from}_to_#{to}"
        gsub_file generated_migration_file, /def (up|change).*  end/m, "def change\n    rename_column :#{model}, :#{from}, :#{to}\n  end"
      when 'alter_column'
        model = model.tableize
        generated_migration_file = Erd::GenaratorRunner.execute_generate_migration "change_#{model}_#{column}_type_to_#{to}"
        gsub_file generated_migration_file, /def (up|change).*  end/m, "def change\n    change_column :#{model}, :#{column}, :#{to}\n  end"
      when 'move'
        # do nothing
      else
        raise "unexpected action: #{action}"
      end

      Erd::Migrator.run_migrations :up => generated_migration_file
      executed_migrations << generated_migration_file
    rescue ::Erd::MigrationError => e
      failed_migrations << e.message
    end
  end

  redirect_to erd.root_path, :flash => {:executed_migrations => {:up => executed_migrations}, :failed_migrations => failed_migrations}
end