class CnabRb::Format::Field

Attributes

date_format[RW]
default[RW]
picture[RW]
pos_end[RW]
pos_start[RW]

Public Class Methods

new(params) click to toggle source
# File lib/cnab_rb/format/field.rb, line 7
def initialize(params)
  @pos_start = params[:pos].begin
  @pos_end = params[:pos].end
  @picture = Picture.new(params[:picture])
  @default = params[:default]
  @date_format = params[:date_format]
end

Public Instance Methods

decode(value) click to toggle source
# File lib/cnab_rb/format/field.rb, line 36
def decode(value)
  decoded = @picture.decode(value)

  unless @date_format.nil? || decoded == 0
    DateTime.strptime(decoded.to_s.rjust(length, '0'), @date_format)
  else
    decoded
  end
end
encode(value) click to toggle source
# File lib/cnab_rb/format/field.rb, line 29
def encode(value)
  if @date_format && value.respond_to?('strftime')
    value = value.strftime(@date_format)
  end
  @picture.encode(value)
end
length() click to toggle source
# File lib/cnab_rb/format/field.rb, line 19
def length
  @pos_end - @pos_start + 1
end
range() click to toggle source
# File lib/cnab_rb/format/field.rb, line 15
def range
  @pos_start..@pos_end
end
validate!() click to toggle source
# File lib/cnab_rb/format/field.rb, line 23
def validate!
  if length != @picture.length
    raise CnabRb::Error.new("Invalid picture length between #{@pos_start} and #{@pos_end}")
  end
end