Module Gem::Text
In: lib/rubygems/text.rb

A collection of text-wrangling methods

Methods

Public Instance methods

Remove any non-printable characters and make the text suitable for printing.

[Source]

    # File lib/rubygems/text.rb, line 11
11:   def clean_text(text)
12:     text.gsub(/[\000-\b\v-\f\016-\037\177]/, ".".freeze)
13:   end

Wraps text to wrap characters and optionally indents by indent characters

[Source]

    # File lib/rubygems/text.rb, line 25
25:   def format_text(text, wrap, indent=0)
26:     result = []
27:     work = clean_text(text)
28: 
29:     while work.length > wrap do
30:       if work =~ /^(.{0,#{wrap}})[ \n]/ then
31:         result << $1.rstrip
32:         work.slice!(0, $&.length)
33:       else
34:         result << work.slice!(0, wrap)
35:       end
36:     end
37: 
38:     result << work if work.length.nonzero?
39:     result.join("\n").gsub(/^/, " " * indent)
40:   end

This code is based directly on the Text gem implementation Returns a value representing the "cost" of transforming str1 into str2

[Source]

    # File lib/rubygems/text.rb, line 44
44:   def levenshtein_distance str1, str2
45:     s = str1
46:     t = str2
47:     n = s.length
48:     m = t.length
49:     max = n/2
50: 
51:     return m if (0 == n)
52:     return n if (0 == m)
53:     return n if (n - m).abs > max
54: 
55:     d = (0..m).to_a
56:     x = nil
57: 
58:     n.times do |i|
59:       e = i+1
60: 
61:       m.times do |j|
62:         cost = (s[i] == t[j]) ? 0 : 1
63:         x = [
64:              d[j+1] + 1, # insertion
65:              e + 1,      # deletion
66:              d[j] + cost # substitution
67:             ].min
68:         d[j] = e
69:         e = x
70:       end
71: 
72:       d[m] = x
73:     end
74: 
75:     return x
76:   end

[Source]

    # File lib/rubygems/text.rb, line 15
15:   def truncate_text(text, description, max_length = 100_000)
16:     raise ArgumentError, "max_length must be positive" unless max_length > 0
17:     return text if text.size <= max_length
18:     "Truncating #{description} to #{max_length.to_s.reverse.gsub(/...(?=.)/,'\&,').reverse} characters:\n" + text[0, max_length]
19:   end

[Validate]