class Spinach::Parser::Visitor
The Spinach
Visitor
traverses the output AST from the GherkinRuby parser and populates its Feature
with all the scenarios, tags, steps, etc.
@example
ast = GherkinRuby.parse(File.read('some.feature')) visitor = Spinach::Parser::Visitor.new feature = visitor.visit(ast)
Attributes
feature[R]
Public Class Methods
new()
click to toggle source
@param [Feature] feature
The feature to populate,
@api public
# File lib/spinach/parser/visitor.rb, line 19 def initialize @feature = Feature.new end
Public Instance Methods
visit(ast)
click to toggle source
@param [GherkinRuby::AST::Feature] ast
The AST root node to visit.
@api public
# File lib/spinach/parser/visitor.rb, line 27 def visit(ast) ast.accept(self) @feature end
visit_Background(node)
click to toggle source
Iterates over the steps.
@param [GherkinRuby::AST::Scenario] node
The scenario to visit.
@api public
# File lib/spinach/parser/visitor.rb, line 58 def visit_Background(node) background = Background.new(@feature) background.line = node.line @current_step_set = background node.steps.each { |step| step.accept(self) } @current_step_set = nil @feature.background = background end
visit_Feature(node)
click to toggle source
Sets the feature name and iterates over the feature scenarios.
@param [GherkinRuby::AST::Feature] feature
The feature to visit.
@api public
# File lib/spinach/parser/visitor.rb, line 39 def visit_Feature(node) @feature.name = node.name @feature.description = node.description node.background.accept(self) if node.background @current_tag_set = @feature node.tags.each { |tag| tag.accept(self) } @current_tag_set = nil node.scenarios.each { |scenario| scenario.accept(self) } end
visit_Scenario(node)
click to toggle source
Sets the scenario name and iterates over the steps.
@param [GherkinRuby::AST::Scenario] node
The scenario to visit.
@api public
# File lib/spinach/parser/visitor.rb, line 75 def visit_Scenario(node) scenario = Scenario.new(@feature) scenario.name = node.name scenario.lines = [ node.line, *node.steps.map(&:line) ].uniq.sort @current_tag_set = scenario node.tags.each { |tag| tag.accept(self) } @current_tag_set = nil @current_step_set = scenario node.steps.each { |step| step.accept(self) } @current_step_set = nil @feature.scenarios << scenario end
visit_Step(node)
click to toggle source
Adds the step to the current scenario.
@param [GherkinRuby::AST::Step] step
The step to add.
@api public
# File lib/spinach/parser/visitor.rb, line 110 def visit_Step(node) step = Step.new(@current_step_set) step.name = node.name step.line = node.line step.keyword = node.keyword @current_step_set.steps << step end
visit_Tag(node)
click to toggle source
Adds the tag to the current scenario.
@param [GherkinRuby::AST::Tag] node
The tag to add.
@api public
# File lib/spinach/parser/visitor.rb, line 100 def visit_Tag(node) @current_tag_set.tags << node.name end