Class: Draisine::DeltaMigrationGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/draisine/delta_migration_generator.rb

Instance Method Summary collapse

Instance Method Details

#generateObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/generators/draisine/delta_migration_generator.rb', line 29

def generate
  @model_name = model.classify.singularize
  @model_file = "app/models/#{model.underscore.singularize}.rb"
  @table_name = model.underscore.gsub("/", "_").pluralize
  @migration_title = "DeltaUpdate#{model.classify.gsub('::', '').pluralize}#{migration_uid}"
  @migration_file = existing_migration_name(@migration_title) ||
                    "db/migrate/#{migration_number}_#{@migration_title.underscore}.rb"
  @fields = (options["fields"] || []).map(&:downcase)
  @salesforce_object_name = salesforce_object_name || model.classify.demodulize
  @materialized_model = Draisine.salesforce_client.materialize(@salesforce_object_name)
  @mapper = Draisine::TypeMapper.new(@materialized_model.type_map)
  @existing_columns = ActiveRecord::Base.connection
    .columns(@table_name)
    .each_with_object({}) {|col, h| h[col.name] = Draisine::TypeMapper::ActiveRecordColumnDef.from_ar_column(col) }
  @new_ar_col_defs = @mapper.active_record_column_defs
    .reject {|col_def| @existing_columns.key?(col_def.column_name) }
    .select {|col_def| column_in_required_fields?(col_def.column_name) }
  @changed_ar_col_defs = @mapper.active_record_column_defs
    .select {|col_def| @existing_columns.key?(col_def.column_name) }
    .select {|col_def| different_column?(@existing_columns[col_def.column_name], col_def) }
    .select {|col_def| column_in_required_fields?(col_def.column_name) }
  template "delta_migration.rb", @migration_file
end