diff --git a/lib/annotate/annotate_models.rb b/lib/annotate/annotate_models.rb index dc2901a3..2aceb639 100644 --- a/lib/annotate/annotate_models.rb +++ b/lib/annotate/annotate_models.rb @@ -469,7 +469,8 @@ def annotate_one_file(file_name, info_block, position, options = {}) space_match = old_annotation.match(/\A(?\s*).*?\n(?\s*)\z/m) new_annotation = space_match[:start] + wrapped_info_block + space_match[:end] - new_content = old_content.sub(annotate_pattern(options), new_annotation) + # use the block version of sub to avoid interpreting special characters + new_content = old_content.sub(annotate_pattern(options)) { |_match| new_annotation } end File.open(file_name, 'wb') { |f| f.puts new_content } diff --git a/spec/lib/annotate/annotate_models_spec.rb b/spec/lib/annotate/annotate_models_spec.rb index aa069f29..a8b391e9 100644 --- a/spec/lib/annotate/annotate_models_spec.rb +++ b/spec/lib/annotate/annotate_models_spec.rb @@ -2932,8 +2932,8 @@ def annotate_one_file(options = {}) mock_column(:foreign_thing_id, :integer) ], [ - mock_index('index_rails_02e851e3b7', columns: ['id']), - mock_index('index_rails_02e851e3b8', columns: ['foreign_thing_id']) + mock_index('index_rails_02e851e3b7', columns: ['id']), + mock_index('index_rails_02e851e3b8', columns: ['foreign_thing_id']) ]) @schema_info = AnnotateModels.get_schema_info(klass, '== Schema Info', show_indexes: true) annotate_one_file @@ -2948,12 +2948,11 @@ def annotate_one_file(options = {}) mock_column(:another_column, :integer) ], [ - mock_index('index_rails_02e851e3b7', columns: ['id']), - mock_index('index_rails_02e851e3b8', columns: ['foreign_thing_id']), - mock_index('index_rails_02e851e3b9', - columns: ['another_column'], - where: "another_column IS NOT NULL" - ) + mock_index('index_rails_02e851e3b7', columns: ['id']), + mock_index('index_rails_02e851e3b8', columns: ['foreign_thing_id']), + mock_index('index_rails_02e851e3b9', + columns: ['another_column'], + where: "another_column IS NOT NULL") ]) @schema_info = AnnotateModels.get_schema_info(klass, '== Schema Info', show_indexes: true) annotate_one_file @@ -2969,12 +2968,11 @@ def annotate_one_file(options = {}) mock_column(:another_column, :text) ], [ - mock_index('index_rails_02e851e3b7', columns: ['id']), - mock_index('index_rails_02e851e3b8', columns: ['foreign_thing_id']), - mock_index('index_rails_02e851e3b9', - columns: ['another_column'], - where: "another_column LIKE '\\\\%'" - ) + mock_index('index_rails_02e851e3b7', columns: ['id']), + mock_index('index_rails_02e851e3b8', columns: ['foreign_thing_id']), + mock_index('index_rails_02e851e3b9', + columns: ['another_column'], + where: "another_column LIKE '\\\\%'") ]) @schema_info = AnnotateModels.get_schema_info(klass, '== Schema Info', show_indexes: true) annotate_one_file