Skip to content

Commit a4be28a

Browse files
sashabelozerovctran
authored andcommitted
[Fix #624] Correct default values for columns when ActiveRecord::Enum is used (#677)
1 parent 1df2153 commit a4be28a

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/annotate/annotate_models.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def quote(value)
211211
end
212212

213213
def schema_default(klass, column)
214-
quote(klass.column_defaults[column.name])
214+
quote(klass.columns.find { |x| x.name.to_s == column.name.to_s }.try(:default))
215215
end
216216

217217
def retrieve_indexes_from_table(klass)

spec/lib/annotate/annotate_models_spec.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,29 @@ def mock_column(name, type, options = {})
225225
EOS
226226
end
227227

228+
it 'sets correct default value for integer column when ActiveRecord::Enum is used' do
229+
klass = mock_class(:users,
230+
:id,
231+
[
232+
mock_column(:id, :integer),
233+
mock_column(:status, :integer, default: 0)
234+
])
235+
# column_defaults may be overritten when ActiveRecord::Enum is used, e.g:
236+
# class User < ActiveRecord::Base
237+
# enum status: [ :disabled, :enabled ]
238+
# end
239+
allow(klass).to receive(:column_defaults).and_return('id' => nil, 'status' => 'disabled')
240+
expect(AnnotateModels.get_schema_info(klass, 'Schema Info')).to eql(<<-EOS)
241+
# Schema Info
242+
#
243+
# Table name: users
244+
#
245+
# id :integer not null, primary key
246+
# status :integer default(0), not null
247+
#
248+
EOS
249+
end
250+
228251
it 'should get foreign key info' do
229252
klass = mock_class(:users,
230253
:id,

0 commit comments

Comments
 (0)