0.08
No release in over 3 years
Low commit activity in last 3 years
Gherkin-ruby is a Gherkin parser in pure Ruby using Rexical and Racc
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

 Project Readme

gherkin-ruby Build Status Dependency Status

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