Class: JsDuck::Format::Shortener

Inherits:
Object
  • Object
show all
Defined in:
lib/jsduck/format/shortener.rb

Overview

Little helper for shortening text

Instance Method Summary collapse

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.strip_tags(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.

Returns:

  • (Boolean)


45
46
47
48
49
50
# File 'lib/jsduck/format/shortener.rb', line 45

def too_long?(input)
  stripped = Util::HTML.strip_tags(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