class Cucumber::Gherkin::StepsParser

Public Class Methods

new(builder, language) click to toggle source
# File lib/cucumber/gherkin/steps_parser.rb, line 9
def initialize(builder, language)
  @builder = builder
  @language = language
end

Public Instance Methods

parse(text) click to toggle source
# File lib/cucumber/gherkin/steps_parser.rb, line 13
def parse(text)
  ast_builder = ::Gherkin3::AstBuilder.new
  token_matcher = ::Gherkin3::TokenMatcher.new
  token_matcher.send(:change_dialect, @language, nil) unless @language == 'en'
  context = ::Gherkin3::ParserContext.new(
    ::Gherkin3::TokenScanner.new(text),
    token_matcher,
    [],
    []
    )
  parser = ::Gherkin3::Parser.new(ast_builder)

  parser.start_rule(context, :ScenarioDefinition)
  parser.start_rule(context, :Scenario)
  scenario = ast_builder.current_node
  state = 12
  token = nil
  begin
    token = parser.read_token(context)
    state = parser.match_token(state, token, context)
  end until(token.eof?)

  raise CompositeParserException.new(context.errors) if context.errors.any?

  @builder.steps(ast_builder.get_steps(scenario))
end