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
|