Gherkin-ruby is a pure Ruby implementation of a Gherkin parser.
Tested with MRI 1.9.3, 2.0.0, head, Rubinius 2.0.0-rc1 and Rubinius head.
WARNING: Will be deprecated after Gherkin 3.0
A new rewrite of the Gherkin parser used by Cucumber is planned (for version 3.0) gherkin-ruby will not add any more features until then, and will eventually be deprecated in favor of Gherkin 3.0.
FAQ
Why this one over the official, fast, Ragel-based Gherkin parser?
- Less than 200 LOC.
- No Java/.NET crap.
- Fast enough for our purposes (using it for the Spinach project)
Why don't you support tables?
- Because we believe it's a BDD anti-pattern. Tables show the need for more unit tests.
Install
$ gem install gherkin-ruby
Or in your Gemfile:
# Gemfile
gem 'gherkin-ruby'
Usage
You can easily implement your own visitors to traverse the Abstract Syntax Tree. The following example just prints the step names to standard output:
class MyVisitor
def visit(ast)
ast.accept(self)
end
def visit_Feature(feature)
# Do something nasty with the feature
# Set whatever state you want:
# @current_feature = feature
# etc etc
# And keep visiting its children:
feature.each { |scenario| scenario.accept(self) }
end
def visit_Scenario(scenario)
# Do something nasty with the scenario
# Set whatever state you want:
# @current_scenario = scenario
# etc etc
# And keep visiting its children:
scenario.each { |step| step.accept(self) }
end
def visit_Background(background)
# Do something nasty with the background
# And keep visiting its children:
background.each { |step| step.accept(self) }
end
def visit_Tag(tag)
# Do something nasty with the tag
end
def visit_Step(step)
# Finally, print the step name.
puts "STEP: #{step.name}"
end
end
ast = Gherkin.parse(File.read('some.feature'))
visitor = MyVisitor.new
visitor.visit(ast)
Todo
- Some optimization
FAQ
License
MIT (Expat) License. Copyright 2011-2013 Codegram Technologies