Fix RTL detection on Ruby side (#3867)

This fixes below bugs:

* pipe characters being counted as RTL character
* only first word being checked
th-downstream
unarist 7 years ago committed by Eugen Rochko
parent 3c355ed26b
commit 55376105f5

@ -53,11 +53,11 @@ module StreamEntriesHelper
def rtl?(text) def rtl?(text)
text = simplified_text(text) text = simplified_text(text)
rtl_characters = /[\p{Hebrew}|\p{Arabic}|\p{Syriac}|\p{Thaana}|\p{Nko}]+/m.match(text) rtl_words = text.scan(/[\p{Hebrew}\p{Arabic}\p{Syriac}\p{Thaana}\p{Nko}]+/m)
if rtl_characters.present? if rtl_words.present?
total_size = text.size.to_f total_size = text.size.to_f
rtl_size(rtl_characters.to_a) / total_size > 0.3 rtl_size(rtl_words) / total_size > 0.3
else else
false false
end end
@ -77,8 +77,8 @@ module StreamEntriesHelper
end end
end end
def rtl_size(characters) def rtl_size(words)
characters.reduce(0) { |acc, elem| acc + elem.size }.to_f words.reduce(0) { |acc, elem| acc + elem.size }.to_f
end end
def embedded_view? def embedded_view?

@ -217,7 +217,7 @@ RSpec.describe StreamEntriesHelper, type: :helper do
end end
it 'is true if right to left characters are greater than 1/3 of total text' do it 'is true if right to left characters are greater than 1/3 of total text' do
expect(helper).to be_rtl 'aaݟ' expect(helper).to be_rtl 'aaݟaaݟ'
end end
end end
end end

Loading…
Cancel
Save