Module: UD::Formatting
- Defined in:
- lib/ud/formatting.rb
Class Method Summary collapse
-
.fit(txt, width = 79) ⇒ Object
Fit a text in a given width (number of chars).
-
.tab(txt, width = 4) ⇒ Object
Add a tab at the beginning of a text.
-
.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.
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 |