Module: UD::Formatting

Defined in:
lib/ud/formatting.rb

Class Method Summary collapse

Class Method Details

.fit(txt, width = 79) ⇒ Object

Fit a text in a given width (number of chars). It returns a list of lines of text.



9
10
11
12
13
14
15
# File 'lib/ud/formatting.rb', line 9

def self.fit(txt, width=79)
  return [] if width < 1

  # from http://stackoverflow.com/a/7567210/735926
  r = /(.{1,#{width}})(?:\s|$)/m
  txt.split("\n").map { |l| l.scan(r) }.flatten
end

.tab(txt, width = 4) ⇒ Object

Add a tab at the beginning of a text. If it’s a list, add a tab at the beginning of each element.

txt

The text to tab, may be a string or a list of strings

width

The width (number of spaces) of a tab



21
22
23
24
25
26
27
28
29
# File 'lib/ud/formatting.rb', line 21

def self.tab(txt, width=4)
  width = 0 if width < 0

  tab = ' ' * width

  return tab + txt if txt.is_a?(String)

  txt.map { |l| tab + l }
end

.text(results, color = true) ⇒ Object

Format results for text output (e.g. in the terminal)

results

this must be an array of results, as returned by UD.query.



33
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
61
62
# File 'lib/ud/formatting.rb', line 33

def self.text(results, color=true)
  require 'colored' if color

  results.map do |r|

    word  = r[:word]
    upvotes = r[:upvotes]
    downvotes = r[:downvotes]

    if (color)
      word      = word.bold
      upvotes   = upvotes.to_s.green
      downvotes = downvotes.to_s.red
    end

    votes = "#{upvotes}/#{downvotes}"
    definition = tab(fit(r[:definition], 75)).join("\n")
    example    = tab(fit(r[:example], 75)).join("\n")

    s = ''

    s << "* #{word} (#{votes}):\n"
    s << "\n"
    s << definition
    s << "\n\n Example:\n"
    s << example
    s << "\n\n"

  end.join("\n")
end