diff --git a/lib/annotate/annotate_models.rb b/lib/annotate/annotate_models.rb index fc503839..340495b4 100644 --- a/lib/annotate/annotate_models.rb +++ b/lib/annotate/annotate_models.rb @@ -375,7 +375,7 @@ def annotate_one_file(file_name, info_block, position, options = {}) old_header = old_content.match(header_pattern).to_s new_header = info_block.match(header_pattern).to_s - column_pattern = /^#[\t ]+[\w\*\.`]+[\t ]+.+$/ + column_pattern = /^#[\t ]+[\w\*\.`]+(?:\([\p{Letter}\p{Number}]*\))?[\t ]+.+$/ old_columns = old_header && old_header.scan(column_pattern).sort new_columns = new_header && new_header.scan(column_pattern).sort diff --git a/spec/lib/annotate/annotate_models_spec.rb b/spec/lib/annotate/annotate_models_spec.rb index c813139a..1e4520d0 100644 --- a/spec/lib/annotate/annotate_models_spec.rb +++ b/spec/lib/annotate/annotate_models_spec.rb @@ -68,7 +68,8 @@ def mock_column(name, type, options = {}) limit: nil, null: false, default: nil, - sql_type: type + sql_type: type, + comment: nil } stubs = default_options.dup @@ -2602,6 +2603,34 @@ def annotate_one_file(options = {}) expect(File.read(@model_file_name)).to eq("#{@schema_info}#{@file_content}") end end + + context 'of unicode comment' do + before do + @klass = mock_class(:users, + :id, + [ + mock_column(:id, :integer), + mock_column(:name, :string, limit: 50, comment: '名前1') + ]) + @schema_info = AnnotateModels.get_schema_info(@klass, '== Schema Info', with_comment: true) + Annotate::Helpers.reset_options(Annotate::Constants::ALL_ANNOTATE_OPTIONS) + + annotate_one_file + end + + it 'should update' do + klass = mock_class(:users, + :id, + [ + mock_column(:id, :integer), + mock_column(:name, :string, null: true, comment: '名前1') + ]) + @schema_info = AnnotateModels.get_schema_info(klass, '== Schema Info', with_comment: true) + annotate_one_file + + expect(File.read(@model_file_name)).to eq("#{@schema_info}#{@file_content}") + end + end end describe 'with existing annotation => :before' do