diff --git a/lib/slither/column.rb b/lib/slither/column.rb index 3ebe9b9..dccc016 100644 --- a/lib/slither/column.rb +++ b/lib/slither/column.rb @@ -15,6 +15,7 @@ def initialize(name, length, options = {}) @type = options[:type] || :string @padding = options[:padding] || :space @truncate = options[:truncate] || false + @default = options[:default] # Only used with floats, this determines the decimal places @precision = options[:precision] end @@ -44,7 +45,7 @@ def parse(value) end def format(value) - pad(formatter % to_s(value)) + pad(version_secure_format(value)) rescue puts "Could not format column '#{@name}' as a '#{@type}' with formatter '#{formatter}' and value of '#{value}' (formatted: '#{to_s(value)}'). #{$!}" end @@ -58,6 +59,22 @@ def formatter def aligner @alignment == :left ? '-' : '' end + + def version_secure_format(value) + if RUBY_VERSION < "1.9" && defined?(ActiveSupport) + parsed_value(value).mb_chars.send(alignment_secure_method,sizer) + else + formatter % parsed_value(value) + end + end + + def alignment_secure_method + @alignment == :left ? :ljust : :rjust; + end + + def parsed_value(value) + value.nil? && @default.present? ? to_s(@default) : to_s(value) + end def sizer (@type == :float && @precision) ? @precision : @length diff --git a/lib/slither/generator.rb b/lib/slither/generator.rb index a2a54bb..2d6afb2 100644 --- a/lib/slither/generator.rb +++ b/lib/slither/generator.rb @@ -19,8 +19,8 @@ def generate(data) raise(Slither::RequiredSectionEmptyError, "Required section '#{section.name}' was empty.") unless section.optional end end - @builder.join("\n") + @builder.join(@definition.options[:new_line] || "\n") end end -end \ No newline at end of file +end