-
-
Notifications
You must be signed in to change notification settings - Fork 51
/
parser.rb
52 lines (46 loc) · 1.46 KB
/
parser.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# frozen_string_literal: true
require 'gherkin'
module Cucumber
module Core
module Gherkin
ParseError = Class.new(StandardError)
class Parser
attr_reader :receiver, :event_bus, :gherkin_query
private :receiver, :event_bus, :gherkin_query
def initialize(receiver, event_bus, gherkin_query)
@receiver = receiver
@event_bus = event_bus
@gherkin_query = gherkin_query
end
def document(document)
messages = ::Gherkin.from_source(document.uri, document.body, gherkin_options(document))
messages.each do |message|
event_bus.envelope(message)
gherkin_query.update(message)
if !message.gherkin_document.nil?
event_bus.gherkin_source_parsed(message.gherkin_document)
elsif !message.pickle.nil?
receiver.pickle(message.pickle)
elsif message.parse_error
raise Core::Gherkin::ParseError.new("#{document.uri}: #{message.parse_error.message}")
else
raise "Unknown message: #{message.to_hash}"
end
end
end
def gherkin_options(document)
{
default_dialect: document.language,
include_source: false,
include_gherkin_document: true,
include_pickles: true
}
end
def done
receiver.done
self
end
end
end
end
end