class IOStreams::Tabular::Parser::Fixed::Column
Constants
- TYPES
Attributes
decimals[R]
key[R]
size[R]
type[R]
Public Class Methods
new(size:, key: nil, type: :string, decimals: 2)
click to toggle source
# File lib/io_streams/tabular/parser/fixed.rb, line 149 def initialize(size:, key: nil, type: :string, decimals: 2) @key = key @size = (size == :remainder || size == "remainder") ? -1 : size.to_i @type = type.to_sym @decimals = decimals unless @size.positive? || (@size == -1) raise(Errors::InvalidLayout, "Size #{size.inspect} must be positive or :remainder") end raise(Errors::InvalidLayout, "Unknown type: #{type.inspect}") unless TYPES.include?(@type) end
Public Instance Methods
parse(value)
click to toggle source
# File lib/io_streams/tabular/parser/fixed.rb, line 161 def parse(value) return if value.nil? stripped_value = value.to_s.strip case type when :string stripped_value when :integer stripped_value.length.zero? ? nil : value.to_i when :float stripped_value.length.zero? ? nil : value.to_f else raise(Errors::InvalidLayout, "Unsupported type: #{type.inspect}") end end
render(value, truncate)
click to toggle source
# File lib/io_streams/tabular/parser/fixed.rb, line 178 def render(value, truncate) formatted = case type when :string value = value.to_s return value if size == -1 format(truncate ? "%-#{size}.#{size}s" : "%-#{size}s", value) when :integer return value.to_i.to_s if size == -1 truncate = false format("%0#{size}d", value.to_i) when :float return value.to_f.to_s if size == -1 truncate = false format("%0#{size}.#{decimals}f", value.to_f) else raise(Errors::InvalidLayout, "Unsupported type: #{type.inspect}") end if !truncate && formatted.length > size raise(Errors::ValueTooLong, "Value: #{value} is too large to fit into column:#{key} of size:#{size}") end formatted end