Sha256: 6835ea643540287feb2564b9b42f04de9590642ae62374c27a555eb1e25c614c

Contents?: true

Size: 1.19 KB

Versions: 32

Compression:

Stored size: 1.19 KB

Contents

require 'stringio'
require_relative 'token'
require_relative 'gherkin_line'

module Gherkin
  # The scanner reads a gherkin doc (typically read from a .feature file) and
  # creates a token for line. The tokens are passed to the parser, which outputs
  # an AST (Abstract Syntax Tree).
  #
  # If the scanner sees a # language header, it will reconfigure itself dynamically
  # to look for Gherkin keywords for the associated language. The keywords are defined
  # in gherkin-languages.json.
  class TokenScanner
    def initialize(source_or_io)
      @line_number = 0

      case(source_or_io)
      when String
        @io = StringIO.new(source_or_io)
      when StringIO, IO
        @io = source_or_io
      else
        fail ArgumentError, "Please a pass String, StringIO or IO. I got a #{source_or_io.class}"
      end
    end

    def read
      location = {line: @line_number += 1}
      if @io.nil? || line = @io.gets
        gherkin_line = line ? GherkinLine.new(line, location[:line]) : nil
        Token.new(gherkin_line, location)
      else
        @io.close unless @io.closed? # ARGF closes the last file after final gets
        @io = nil
        Token.new(nil, location)
      end
    end

  end
end

Version data entries

32 entries across 32 versions & 5 rubygems

Version Path
cucumber-gherkin-29.0.0 lib/gherkin/token_scanner.rb
cucumber-gherkin-28.0.0 lib/gherkin/token_scanner.rb
honeybadger-5.4.0 vendor/bundle/ruby/3.2.0/gems/cucumber-gherkin-26.2.0/lib/gherkin/token_scanner.rb
honeybadger-5.3.0 vendor/bundle/ruby/3.2.0/gems/cucumber-gherkin-26.2.0/lib/gherkin/token_scanner.rb
cucumber-gherkin-27.0.0 lib/gherkin/token_scanner.rb
rubypitaya-3.12.5 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-gherkin-23.0.1/lib/gherkin/token_scanner.rb
cucumber-gherkin-26.2.0 lib/gherkin/token_scanner.rb
cucumber-gherkin-26.1.0 lib/gherkin/token_scanner.rb
rubypitaya-3.12.4 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-gherkin-23.0.1/lib/gherkin/token_scanner.rb
rubypitaya-3.12.3 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-gherkin-23.0.1/lib/gherkin/token_scanner.rb
rubypitaya-3.12.2 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-gherkin-23.0.1/lib/gherkin/token_scanner.rb
cucumber-gherkin-26.0.3 lib/gherkin/token_scanner.rb
cucumber-gherkin-26.0.2 lib/gherkin/token_scanner.rb
cucumber-gherkin-26.0.1 lib/gherkin/token_scanner.rb
cucumber-gherkin-26.0.0 lib/gherkin/token_scanner.rb
cucumber-gherkin-25.0.2 lib/gherkin/token_scanner.rb
cucumber-gherkin-25.0.1 lib/gherkin/token_scanner.rb
cucumber-gherkin-25.0.0 lib/gherkin/token_scanner.rb
cucumber-gherkin-24.1.0 lib/gherkin/token_scanner.rb
cucumber-gherkin-24.0.0 lib/gherkin/token_scanner.rb