Module: Cri::CoreExtensions::String
- Included in:
- String
- Defined in:
- lib/cri/core_ext/string.rb
Instance Method Summary (collapse)
-
- (Array<String>) to_paragraphs
Extracts individual paragraphs (separated by two newlines).
-
- (String) wrap_and_indent(width, indentation)
Word-wraps and indents the string.
Instance Method Details
- (Array<String>) to_paragraphs
Extracts individual paragraphs (separated by two newlines).
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/cri/core_ext/string.rb', line 10 def to_paragraphs lines = self.scan(/([^\n]+\n|[^\n]*$)/).map { |s| s[0].strip } paragraphs = [ [] ] lines.each do |line| if line.empty? paragraphs << [] else paragraphs.last << line end end paragraphs.reject { |p| p.empty? }.map { |p| p.join(' ') } end |
- (String) wrap_and_indent(width, indentation)
Word-wraps and indents the string.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/cri/core_ext/string.rb', line 34 def wrap_and_indent(width, indentation) # Split into paragraphs paragraphs = self.to_paragraphs # Wrap and indent each paragraph paragraphs.map do |paragraph| # Initialize lines = [] line = '' # Split into words paragraph.split(/\s/).each do |word| # Begin new line if it's too long if (line + ' ' + word).length >= width lines << line line = '' end # Add word to line line += (line == '' ? '' : ' ' ) + word end lines << line # Join lines lines.map { |l| ' '*indentation + l }.join("\n") end.join("\n\n") end |