From f665c33e0066e6cfb9eba03d49b33c503b71dc7f Mon Sep 17 00:00:00 2001 From: Konstantin Lazarev Date: Thu, 12 Nov 2015 12:11:49 +0500 Subject: [PATCH] =?UTF-8?q?feature:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2=20=D0=BE?= =?UTF-8?q?=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B8=20=D0=BE=D1=82=20html-?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://jira.railsc.ru/browse/CK-30 --- lib/string_tools.rb | 34 ++++++++++++++++++++++++++++++++++ spec/string_tools_spec.rb | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/lib/string_tools.rb b/lib/string_tools.rb index 9301404..f8f903e 100644 --- a/lib/string_tools.rb +++ b/lib/string_tools.rb @@ -105,6 +105,40 @@ def sanitize(text, options = {}) def clear_control_characters(string) string.tr("\u0000-\u001f", '') end + + # Public: вычищает все html тэги и пробельные символы + # + # string - String строка для очистки + # + # Examples + # + # strip_all_tags_and_entities("ссылка с пробелом

параграф с\tтабуляцией

") + # # => "ссылкаспробелом параграфстабуляцией " + # + # Returns String + def strip_all_tags_and_entities(string) + Sanitize.fragment(string.gsub(/&#([0-9]|10|11|12|13);| |\xc2\xa0|\s/, '')) + end + + # Public: вычищает html тэги кроме переносов + # + # string - String строка для очистки + # + # Examples + # + # strip_tags_leave_br("

параграф

просто перенос
") + # # => "
элемент списка

параграф
просто перенос
" + # + # Returns String + def strip_tags_leave_br(string) + sanitized = Sanitize.fragment(string, remove_contents: %w(style javascript), elements: %w(p ul li br blockquote)) + + sanitized.gsub!(/<(p|li|blockquote)[^>]*>/, '') + sanitized.gsub!(%r{<(br /|ul[^>]*|/[^>]*)>}, '
') + sanitized.gsub!(/
(\s|\302\240)+/, '
') + + sanitized + end end extend Sanitizing diff --git a/spec/string_tools_spec.rb b/spec/string_tools_spec.rb index 10b7a4d..1b737d5 100644 --- a/spec/string_tools_spec.rb +++ b/spec/string_tools_spec.rb @@ -32,4 +32,36 @@ expect(sanitized_string).to eq 'www.фермаежей.рф' end end + + describe '#strip_all_tags_and_entities' do + subject(:strip_all_tags_and_entities) { described_class.strip_all_tags_and_entities(string) } + + context 'string with html tags' do + let(:string) { 'foo
bar
' } + + it { expect(strip_all_tags_and_entities).to eq('foo bar ') } + end + + context 'string with whitespaces and tabs' do + let(:string) { "foo bar\t foo" } + + it { expect(strip_all_tags_and_entities).to eq('foobarfoo') } + end + end + + describe '#strip_tags_leave_br' do + subject(:strip_tags_leave_br) { described_class.strip_tags_leave_br(string) } + + context 'string with html list' do + let(:string) { '' } + + it { expect(strip_tags_leave_br).to eq('
foo

') } + end + + context 'string with html paragraph' do + let(:string) { '

bar

' } + + it { expect(strip_tags_leave_br).to eq('bar
') } + end + end end