Class: String
- Inherits:
-
Object
- Object
- String
- Defined in:
- lib/wavefront-cli/stdlib/string.rb,
lib/wavefront-cli/output/hcl/stdlib/string.rb
Overview
Extensions to stdlib String
Instance Method Summary collapse
- #braced(indent = 0) ⇒ Object
-
#cmd_fold(twidth = TW, indent = 10) ⇒ Object
Fold long command lines.
-
#fold(twidth = TW, indent = 10, prefix = '') ⇒ String
Fold long lines with a hanging indent.
-
#opt_fold(twidth = TW, indent = 10) ⇒ String
Wrapper around #fold().
-
#restored ⇒ Object
We use a carat as a temporary whitespace character to avoid undesirable line breaking.
-
#scan_line(width) ⇒ Array
Original string chunked into an array width elements whose length < width.
- #to_seconds ⇒ Object
-
#to_snake ⇒ String
Make a camelCase string be snake_case.
-
#unit_factor(unit) ⇒ Integer
How many seconds in the given unit.
-
#value_fold(indent = 0, twidth = TW) ⇒ Object
Fold long value lines in two-column output.
Instance Method Details
#braced(indent = 0) ⇒ Object
7 8 9 10 |
# File 'lib/wavefront-cli/output/hcl/stdlib/string.rb', line 7 def braced(indent = 0) pad = ' ' * indent "\n#{pad}{#{self}\n#{pad}}" end |
#cmd_fold(twidth = TW, indent = 10) ⇒ Object
Fold long command lines. We can’t break on a space after an option or it confuses docopt.
12 13 14 15 |
# File 'lib/wavefront-cli/stdlib/string.rb', line 12 def cmd_fold(twidth = TW, indent = 10) gsub(/(-\w) /, '\\1^').scan_line(twidth - 12).join("\n#{' ' * indent}") .restored end |
#fold(twidth = TW, indent = 10, prefix = '') ⇒ String
Fold long lines with a hanging indent. Originally a special case for option folding, now addded the prefix parameter to make it more general. Don’t line-break default values, because it also breaks docopt.
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/wavefront-cli/stdlib/string.rb', line 37 def fold(twidth = TW, indent = 10, prefix = '') chunks = gsub('default: ', 'default:^').scan_line(twidth - 8) first_line = format("%<padding>s%<text>s\n", padding: prefix, text: chunks.shift) return first_line.restored if chunks.empty? rest = indent_folded_lines(chunks, twidth, indent, prefix) (first_line + rest.join("\n")).restored end |
#opt_fold(twidth = TW, indent = 10) ⇒ String
Wrapper around #fold()
23 24 25 |
# File 'lib/wavefront-cli/stdlib/string.rb', line 23 def opt_fold(twidth = TW, indent = 10) fold(twidth, indent, ' ') end |
#restored ⇒ Object
We use a carat as a temporary whitespace character to avoid undesirable line breaking. This puts it back
52 53 54 |
# File 'lib/wavefront-cli/stdlib/string.rb', line 52 def restored tr('^', ' ').chomp end |
#scan_line(width) ⇒ Array
Returns original string chunked into an array width elements whose length < width.
69 70 71 |
# File 'lib/wavefront-cli/stdlib/string.rb', line 69 def scan_line(width) scan(/\S.{0,#{width}}\S(?=\s|$)|\S+/) end |
#to_seconds ⇒ Object
73 74 75 76 77 78 79 80 81 |
# File 'lib/wavefront-cli/stdlib/string.rb', line 73 def to_seconds begin number, unit = match(/^(\d+)([smhdw])$/).captures rescue NoMethodError raise ArgumentError end number.to_i * unit_factor(unit.to_sym) end |
#to_snake ⇒ String
Make a camelCase string be snake_case
95 96 97 98 99 |
# File 'lib/wavefront-cli/stdlib/string.rb', line 95 def to_snake gsub(/(.)([A-Z])/) do "#{Regexp.last_match[1]}_#{Regexp.last_match[2].downcase}" end end |
#unit_factor(unit) ⇒ Integer
How many seconds in the given unit
87 88 89 90 |
# File 'lib/wavefront-cli/stdlib/string.rb', line 87 def unit_factor(unit) factors = { s: 1, m: 60, h: 3600, d: 86_400, w: 604_800 } factors[unit] || 1 end |
#value_fold(indent = 0, twidth = TW) ⇒ Object
Fold long value lines in two-column output. The returned string is appended to a key, so the first line is not indented.
59 60 61 62 |
# File 'lib/wavefront-cli/stdlib/string.rb', line 59 def value_fold(indent = 0, twidth = TW) max_line_length = twidth - indent - 4 scan_line(max_line_length).join("\n#{' ' * indent}") end |