diff --git a/app/models/concerns/tags_substitution_concern.rb b/app/models/concerns/tags_substitution_concern.rb index 19dd437d5..972882f5b 100644 --- a/app/models/concerns/tags_substitution_concern.rb +++ b/app/models/concerns/tags_substitution_concern.rb @@ -41,11 +41,11 @@ module TagsSubstitutionConcern end define_combinator :tag_text_first_char do - any_char.that_fail(lit('-') | tag_delimiter) + any_char.that_fail(lit('-') | tag_delimiter | eol) end define_combinator :tag_text_char do - any_char.that_fail(tag_delimiter) + any_char.that_fail(tag_delimiter | eol) end define_combinator :tag_text do @@ -53,6 +53,10 @@ module TagsSubstitutionConcern str.force_encoding('utf-8').encode.gsub(/[[:space:]]/, ' ') end end + + define_combinator :eol do + lit("\r\n") | lit("\n") + end end DOSSIER_TAGS = [ diff --git a/spec/models/concern/tags_substitution_concern_spec.rb b/spec/models/concern/tags_substitution_concern_spec.rb index 23cdf4ccb..421af6cdd 100644 --- a/spec/models/concern/tags_substitution_concern_spec.rb +++ b/spec/models/concern/tags_substitution_concern_spec.rb @@ -516,7 +516,7 @@ describe TagsSubstitutionConcern, type: :model do describe 'parser' do it do - tokens = TagsSubstitutionConcern::TagsParser.parse("hello world --public--, --numéro du dossier--, un test--yolo-- encore du text\n---\n encore du text") + tokens = TagsSubstitutionConcern::TagsParser.parse("hello world --public--, --numéro du dossier--, un test--yolo-- encore du text\n---\n encore du text --- et encore du text\n--tag--") expect(tokens).to eq([ { text: "hello world " }, { tag: "public" }, @@ -524,14 +524,15 @@ describe TagsSubstitutionConcern, type: :model do { tag: "numéro du dossier" }, { text: ", un test" }, { tag: "yolo" }, - { text: " encore du text\n" + "---\n" + " encore du text" } + { text: " encore du text\n" + "---\n" + " encore du text --- et encore du text\n" }, + { tag: "tag" } ]) end it 'allow for - before tag' do - tokens = TagsSubstitutionConcern::TagsParser.parse("hello --yolo-- -- before-- --after -- -- around -- world ---numéro-du - dossier--") + tokens = TagsSubstitutionConcern::TagsParser.parse("-----------------\nhello --yolo-- -- before-- --after -- -- around -- world ---numéro-du - dossier--") expect(tokens).to eq([ - { text: "hello " }, + { text: "-----------------\nhello " }, { tag: "yolo" }, { text: " " }, { tag: "before" },