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