module Ark::Text

Methods for manipulating text

Public Class Methods

wrap(text, width: 78, indent: 0, indent_after: false) click to toggle source

Wrap a string to a given width, with an optional indent. Indented text will fall within the specified width.

text

The text to be wrapped

width

The number of columns to wrap within

indent

Indent each wrapped line of text by this number of columns

# File lib/ark/utility.rb, line 123
def self.wrap(text, width: 78, indent: 0, indent_after: false)
  if text.is_a?(Array)
    text = text.flatten.join(' ')
  end
  text = text.split(' ')
  self.wrap_segments(text, width: width, indent: indent, indent_after: indent_after)
end
wrap_segments(segments, width: 78, indent: 0, indent_after: false) click to toggle source
# File lib/ark/utility.rb, line 94
def self.wrap_segments(segments, width: 78, indent: 0, indent_after: false)
  segments = segments.flatten.map(&:to_s)
  lines = []
  line = ''
  current_indent = indent
  segments.each do |seg|
    if lines.empty? && indent_after
      current_indent = 0
    else
      current_indent = indent
    end
    if line.size + seg.size >= width
      lines << line
      line = (' ' * indent) + seg
    elsif line.empty?
      line = (' ' * current_indent) + seg
    else
      line << ' ' << seg
    end
  end
  lines << line if line
  return lines.join("\n")
end