Sha256: bacbbed18d818a14774691d0c5df1e34657564380528a7b243421cfef2934a39

Contents?: true

Size: 1.04 KB

Versions: 2

Compression:

Stored size: 1.04 KB

Contents

module GS1
  module Barcode
    # Class for parsing barcodes. Uses {Segment} for splitting up the individual
    # parts.
    #
    class Tokenizer
      attr_reader :data, :separator, :params

      def initialize(data, separator: GS1.configuration.barcode_separator)
        @data = data
        @separator = separator
        @params = []
      end

      def to_params
        @to_params ||= segment_to_params(data)
      end

      def to_params!
        @to_params ||= segment_to_params(data, true)
      end

      private

      def segment_to_params(input, bang = false)
        segment_from_input(input, bang) do |segment|
          next if segment.to_params.empty?

          params << segment.to_params

          next if segment.rest.empty?

          segment_to_params(segment.rest, bang)
        end

        params
      end

      def segment_from_input(input, bang)
        Segment.new(input, separator: separator).tap do |segment|
          segment.validate! if bang
          yield segment if block_given?
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
gs1-1.1.0 lib/gs1/barcode/tokenizer.rb
gs1-1.0.0 lib/gs1/barcode/tokenizer.rb