Sha256: 336abf1a147aa4c470e950dc115b191e869707279f7b7ecd1a57848e3c6ef159

Contents?: true

Size: 1.22 KB

Versions: 2

Compression:

Stored size: 1.22 KB

Contents

require 'usps_intelligent_barcode/character_position'

# @!group Internal

module Imb

  # Maps intelligent barcode "characters" to codes that indicate what
  # type of bar to print at each given position.

  class BarMap

    def initialize
      @mapping = load_mapping
    end

    # Given an array of intelligent barcode "characters", return an
    # the symbols for each position.
    # @param [[Integer]] characters array of characters
    # @return [[BarSymbol]] array of symbols

    def symbols(characters)
      @mapping.map do |bar_position|
        bar_position.map(characters)
      end
    end

    private

    def load_mapping
      convert_mapping_data(load_mapping_data)
    end

    def convert_mapping_data(mapping_data)
      mapping_data.map do |descender, ascender|
        descender_character_position = CharacterPosition.new(*descender)
        ascender_character_position = CharacterPosition.new(*ascender)
        BarPosition.new(descender_character_position,
                        ascender_character_position)
      end
    end

    def load_mapping_data
      YAML.load_file(mapping_path)
    end

    def mapping_path
      File.expand_path('bar_to_character_mapping.yml', File.dirname(__FILE__))
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
usps_intelligent_barcode-0.3.1 lib/usps_intelligent_barcode/bar_map.rb
usps_intelligent_barcode-0.3.0 lib/usps_intelligent_barcode/bar_map.rb