class AAMVA::Decoder

Attributes

barcode[R]
standard[R]

Public Class Methods

new(standard, barcode) click to toggle source
# File lib/aamva/decoder.rb, line 7
def initialize(standard, barcode)
  @standard = standard
  @barcode = barcode
end

Public Instance Methods

data() click to toggle source
# File lib/aamva/decoder.rb, line 12
def data
  @data ||= Data.new(
    header: header,
    subfile_designators: subfile_designators,
    subfiles: subfiles
  )
end

Private Instance Methods

data_elements(subfile_designator) click to toggle source
# File lib/aamva/decoder.rb, line 22
def data_elements(subfile_designator)
  @barcode
    .byteslice(subfile_designator.offset.to_i, subfile_designator.length.to_i)
    .slice((subfile_designator.type).length..-1)
    .chomp(standard["segment_terminator"])
    .split(standard["data_element_separator"])
    .map { |r| [r[0, 3], r[3..-1]] }
end
header() click to toggle source
# File lib/aamva/decoder.rb, line 35
def header
  @header ||= Header.new(
    number_of_entries: number_of_entries,
    jurisdiction_version_number: jurisdiction_version_number,
    issuer_identification_number: issuer_identification_number
  )
end
header_match() click to toggle source
# File lib/aamva/decoder.rb, line 31
def header_match
  @barcode.match(standard["header_regexp"])
end
issuer_identification_number() click to toggle source
# File lib/aamva/decoder.rb, line 64
def issuer_identification_number
  header_match&.[]("issuer_identification_number")
end
jurisdiction_version_number() click to toggle source
# File lib/aamva/decoder.rb, line 68
def jurisdiction_version_number
  header_match&.[]("jurisdiction_version_number")
end
number_of_entries() click to toggle source
# File lib/aamva/decoder.rb, line 72
def number_of_entries
  header_match&.[]("number_of_entries")
end
subfile_designators() click to toggle source
# File lib/aamva/decoder.rb, line 52
def subfile_designators
  @barcode
    .scan(@standard["subfile_designator_regexp"])
    .map do |_, type, offset, length|
      SubfileDesignator.new(
        type: type,
        offset: offset,
        length: length
      )
  end
end
subfiles() click to toggle source
# File lib/aamva/decoder.rb, line 43
def subfiles
  subfile_designators.map do |subfile_designator|
    Subfile.new(
      type: subfile_designator.type,
      data_elements: data_elements(subfile_designator)
    )
  end
end