Skip to content

Commit 270e1c2

Browse files
vergenztctran
authored andcommitted
Do not include auto-generated foreign key names in schema dump (#408)
* add(annotate_models_spec): test coverage * change(annotate_models#get_foreign_key_info): elide auto-generated fk names Closes #404.
1 parent 2d7694e commit 270e1c2

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

lib/annotate/annotate_models.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -355,17 +355,19 @@ def get_foreign_key_info(klass, options={})
355355
foreign_keys = klass.connection.foreign_keys(klass.table_name)
356356
return '' if foreign_keys.empty?
357357

358-
max_size = foreign_keys.collect{|fk| fk.name.size}.max + 1
359-
foreign_keys.sort_by(&:name).each do |fk|
358+
format_name = ->(fk) { fk.name.gsub(/(?<=^fk_rails_)[0-9a-f]{10}$/, '...') }
359+
360+
max_size = foreign_keys.map(&format_name).map(&:size).max + 1
361+
foreign_keys.sort_by {|fk| [format_name.call(fk), fk.column]}.each do |fk|
360362
ref_info = "#{fk.column} => #{fk.to_table}.#{fk.primary_key}"
361363
constraints_info = ''
362364
constraints_info += "ON DELETE => #{fk.on_delete} " if fk.on_delete
363365
constraints_info += "ON UPDATE => #{fk.on_update} " if fk.on_update
364366
constraints_info.strip!
365367
if options[:format_markdown]
366-
fk_info << sprintf("# * `%s`%s:\n# * **`%s`**\n", fk.name, constraints_info.blank? ? '' : " (_#{constraints_info}_)", ref_info)
368+
fk_info << sprintf("# * `%s`%s:\n# * **`%s`**\n", format_name.call(fk), constraints_info.blank? ? '' : " (_#{constraints_info}_)", ref_info)
367369
else
368-
fk_info << sprintf("# %-#{max_size}.#{max_size}s %s %s", fk.name, "(#{ref_info})", constraints_info).rstrip + "\n"
370+
fk_info << sprintf("# %-#{max_size}.#{max_size}s %s %s", format_name.call(fk), "(#{ref_info})", constraints_info).rstrip + "\n"
369371
end
370372
end
371373

spec/annotate/annotate_models_spec.rb

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,19 @@ def mock_column(name, type, options={})
184184
],
185185
[
186186
mock_foreign_key(
187-
'fk_rails_02e851e3b7',
187+
'fk_rails_cf2568e89e',
188188
'foreign_thing_id',
189189
'foreign_things'
190+
),
191+
mock_foreign_key(
192+
'custom_fk_name',
193+
'other_thing_id',
194+
'other_things'
195+
),
196+
mock_foreign_key(
197+
'fk_rails_a70234b26c',
198+
'third_thing_id',
199+
'third_things'
190200
)
191201
])
192202
expect(AnnotateModels.get_schema_info(klass, "Schema Info", :show_foreign_keys => true)).to eql(<<-EOS)
@@ -199,7 +209,9 @@ def mock_column(name, type, options={})
199209
#
200210
# Foreign Keys
201211
#
202-
# fk_rails_02e851e3b7 (foreign_thing_id => foreign_things.id)
212+
# custom_fk_name (other_thing_id => other_things.id)
213+
# fk_rails_... (foreign_thing_id => foreign_things.id)
214+
# fk_rails_... (third_thing_id => third_things.id)
203215
#
204216
EOS
205217
end
@@ -229,7 +241,7 @@ def mock_column(name, type, options={})
229241
#
230242
# Foreign Keys
231243
#
232-
# fk_rails_02e851e3b7 (foreign_thing_id => foreign_things.id) ON DELETE => on_delete_value ON UPDATE => on_update_value
244+
# fk_rails_... (foreign_thing_id => foreign_things.id) ON DELETE => on_delete_value ON UPDATE => on_update_value
233245
#
234246
EOS
235247
end

0 commit comments

Comments
 (0)