Sha256: bfee3d8ad0a591ad5fdb2a39793fed7f5f43101b260503b04b96f9ffcfe2f11f

Contents?: true

Size: 1.79 KB

Versions: 4

Compression:

Stored size: 1.79 KB

Contents

require 'gherkin/parser'
require 'gherkin/pickles/compiler'

module Gherkin
  module Stream
    class GherkinEvents
      def initialize(options)
        @options = options
        @parser = Gherkin::Parser.new
        @compiler = Gherkin::Pickles::Compiler.new
      end

      def enum(source_event)
        Enumerator.new do |y|
          uri = source_event['uri']
          source = source_event['data']
          begin
            gherkin_document = @parser.parse(source)

            if (@options[:print_source])
              y.yield source_event
            end
            if (@options[:print_ast])
              y.yield({
                type: 'gherkin-document',
                uri: uri,
                document: gherkin_document
              })
            end
            if (@options[:print_pickles])
              pickles = @compiler.compile(gherkin_document)
              pickles.each do |pickle|
                y.yield({
                  type: 'pickle',
                  uri: uri,
                  pickle: pickle
                })
              end
            end
          rescue Gherkin::CompositeParserException => e
            yield_errors(y, e.errors, uri)
          rescue Gherkin::ParserError => e
            yield_errors(y, [e], uri)
          end
        end
      end

      def yield_errors(y, errors, uri)
        errors.each do |error|
          y.yield({
            type: 'attachment',
            source: {
              uri: uri,
              start: {
                line: error.location[:line],
                column: error.location[:column]
              }
            },
            data: error.message,
            media: {
              encoding: 'utf-8',
              type: 'text/vnd.cucumber.stacktrace+plain'
            }
          })
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gherkin-4.1.3 lib/gherkin/stream/gherkin_events.rb
gherkin-4.1.2 lib/gherkin/stream/gherkin_events.rb
gherkin-4.1.1 lib/gherkin/stream/gherkin_events.rb
gherkin-4.1.0 lib/gherkin/stream/gherkin_events.rb