Method: String#margin
- Defined in:
- lib/core/facets/string/margin.rb
#margin(num = nil, opts = {}) ⇒ Object
Preserve relative tabbing such that the line with the least amount of white space ends up with the given number of spaces before non-space and all other lines move relative to it.
Because of the nature of this method, leading tab characters (‘t`) must be converted to spaces. The size of a tab can be set via the `:tab` option. The default size is 2.
If the ‘:lead` option is set, then the relative margin is determined by the first non-blank line, instead of the minimum white-space for all lines.
Arguments
num - The size of the desired margin. [Integer]
opts - Margin options. [Hash]
Options
:tab - Size of tab character in spaces. [Integer]
:lead - Use first non-blank line as relative marker. [Boolean]
Returns a new String with adjusted margin. [String]
Author: Gavin Sinclair Author: Trans
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/core/facets/string/margin.rb', line 32 def margin(num=nil, opts={}) # TODO: temporary to help people transition raise ArgumentError, "String#margin has been renamed to #trim." unless num tab = opts[:tab] || 2 str = gsub("\t", " " * tab) # TODO: only leading tabs ? if opts[:lead] if self =~ /^( *)\S/ indent(num - $1.length) else self end else min = [] str.each_line do |line| next if line.strip.empty? min << line.index(/\S/) end min = min.min str.indent(num - min) end end |