Sha256: 3e98dc186f5996e43dbfad2a1d950499eeb34f96aabb3e5b82abeba3b513e7d2

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

module AAMVA
  class Decoder
    attr_reader :standard, :barcode

    def initialize(standard, barcode)
      @standard = standard
      @barcode = barcode
    end

    def data
      @data ||= Data.new(
        header: header,
        subfile_designators: subfile_designators,
        subfiles: subfiles
      )
    end

    private

    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

    def header_match
      @barcode.match(standard["header_regexp"])
    end

    def header
      @header ||= Header.new(
        number_of_entries: number_of_entries,
        jurisdiction_version_number: jurisdiction_version_number,
        issuer_identification_number: issuer_identification_number
      )
    end

    def subfiles
      subfile_designators.map do |subfile_designator|
        Subfile.new(
          type: subfile_designator.type,
          data_elements: data_elements(subfile_designator)
        )
      end
    end

    def subfile_designators
      @barcode
        .scan(@standard["subfile_designator_regexp"])
        .map do |_, type, offset, length|
          SubfileDesignator.new(
            type: type,
            offset: offset,
            length: length
          )
      end
    end

    def issuer_identification_number
      header_match&.[]("issuer_identification_number")
    end

    def jurisdiction_version_number
      header_match&.[]("jurisdiction_version_number")
    end

    def number_of_entries
      header_match&.[]("number_of_entries")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aamva-0.2.0 lib/aamva/decoder.rb