class CnabRb::Layouts::Layout

Attributes

fields[RW]

Public Class Methods

new() click to toggle source
# File lib/cnab_rb/layouts/layout.rb, line 5
def initialize
  @fields = {}
  init_fields
end

Public Instance Methods

clean(range) click to toggle source
# File lib/cnab_rb/layouts/layout.rb, line 18
def clean(range)
  @fields.reject! do |key, field|
    range.cover?(field.range.begin) || field.range.cover?(range.begin)
  end
end
field(name, params) click to toggle source
# File lib/cnab_rb/layouts/layout.rb, line 13
def field(name, params)
  clean(params[:pos])
  @fields[name] = CnabRb::Format::Field.new(params)
end
init_fields() click to toggle source
# File lib/cnab_rb/layouts/layout.rb, line 10
def init_fields
end
ordered_fields() click to toggle source
# File lib/cnab_rb/layouts/layout.rb, line 36
def ordered_fields
  @fields.sort_by {|key, field| field.pos_start}
end
validate!() click to toggle source
# File lib/cnab_rb/layouts/layout.rb, line 24
def validate!
  expected_line_length = ordered_fields.last[1].pos_end
  actual_line_length = @fields.sum do |key, field|
    field.validate!
    field.length
  end

  if expected_line_length != actual_line_length
    raise CnabRb::Error.new("Invalid layout length, expected #{expected_line_length}, actual #{actual_line_length}, layout: #{self.class}")
  end
end