Class: JsDuck::Format::Shortener
- Inherits:
-
Object
- Object
- JsDuck::Format::Shortener
- Defined in:
- lib/jsduck/format/shortener.rb
Overview
Little helper for shortening text
Instance Method Summary collapse
-
#first_sentence(str) ⇒ Object
Returns the first sentence inside a string.
-
#initialize(max_length = 120) ⇒ Shortener
constructor
Takes as parameter the maximum length for text that doesn’t get shortened.
-
#shorten(input) ⇒ Object
Shortens text.
-
#too_long?(input) ⇒ Boolean
Returns true when input should get shortened.
Constructor Details
#initialize(max_length = 120) ⇒ Shortener
Takes as parameter the maximum length for text that doesn’t get shortened. Used for testing purposes.
11 12 13 |
# File 'lib/jsduck/format/shortener.rb', line 11 def initialize(max_length = 120) @max_length = max_length end |
Instance Method Details
#first_sentence(str) ⇒ Object
Returns the first sentence inside a string.
40 41 42 |
# File 'lib/jsduck/format/shortener.rb', line 40 def first_sentence(str) str.sub(/\A(.+?(\.|。))\s.*\z/mu, "\\1") end |
#shorten(input) ⇒ Object
Shortens text
116 chars is also where ext-doc makes its cut, but unlike ext-doc we only make the cut when there’s more than 120 chars.
This way we don’t get stupid expansions like:
Blah blah blah some text...
expanding to:
Blah blah blah some text.
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/jsduck/format/shortener.rb', line 28 def shorten(input) sent = first_sentence(Util::HTML.(input).strip) # Use u-modifier to correctly count multi-byte characters chars = sent.scan(/./mu) if chars.length > @max_length chars[0..(@max_length-4)].join + "..." else sent + " ..." end end |
#too_long?(input) ⇒ Boolean
Returns true when input should get shortened.
45 46 47 48 49 50 |
# File 'lib/jsduck/format/shortener.rb', line 45 def too_long?(input) stripped = Util::HTML.(input).strip # for sentence v/s full - compare byte length # for full v/s max - compare char length first_sentence(stripped).length < stripped.length || stripped.scan(/./mu).length > @max_length end |