class P15ID::Segment

Constants

LIST
MEASURE
PATINFO
SD_FD_SEP
SEGMENT_END

Attributes

fields[R]
segment[R]

Public Class Methods

new(segment:) click to toggle source
# File lib/p15id/segment.rb, line 13
def initialize(segment:)
  raise "Invalid Segment '#{segment}'" unless LIST.include?(segment)

  @segment = segment
  @fields = []
end

Public Instance Methods

add_field(field) click to toggle source
# File lib/p15id/segment.rb, line 20
def add_field(field)
  return if @fields.any? { |f| f.field == field.field }

  if (MEASURE.include?(@segment) && !Field::MEASURE_LIST.include?(field.field)) ||
      (PATINFO.include?(@segment) && !Field::PATINFO_LIST.include?(field.field))
    raise("Field '#{field.field}' not compatible with Segment '#{@segment}'")
  end

  @fields << field
end
to_bytes() click to toggle source
# File lib/p15id/segment.rb, line 36
def to_bytes
  fields = @fields.map(&:to_bytes).join
  to_s(fields: fields, segment_end: SEGMENT_END, sd_fd_sep: SD_FD_SEP)
end
to_s(fields: nil, segment_end: "$", sd_fd_sep: ":") click to toggle source
# File lib/p15id/segment.rb, line 31
def to_s(fields: nil, segment_end: "$", sd_fd_sep: ":")
  fields ||= @fields.map(&:to_s).join
  "#{@segment}#{sd_fd_sep}#{fields}#{segment_end}"
end