class TextUtils::Truncate < TextUtils::Processor
def initialize processor, length
super processor
@length = length
end
def call data, env
data ||= ""
# strip from HTML tags
data = data.gsub("
html elements
doc = Nokogiri::XML("
#{data}
")
data = doc.css('.root').first.content
# remove clear space
data = data.gsub(/\s+/, ' ')
# truncate with no broken words
data = if data.length >= @length
shortened = data[0, @length]
splitted = shortened.split(/\s/)
words = splitted.length
splitted[0, words-1].join(" ") + ' ...'
else
data
end
call_next data, env
end
end