Project

crb

0.01
No commit activity in last 3 years
No release in over 3 years
A cucumber console that offers cucumber world enviroment on irb
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.0.0
~> 1.6.4
>= 0
 Project Readme
crb
===

  An irb console for cucumber world


Features
========

  * Can define steps interactively
  * Can execute steps interactively like debugger
  * Can share cuke world and irb context in a same object
  * Can see instance variables of step files via irb
  * Supported hooks (but only before/after without parameters)
  * Supported World methods


Usage
=====

  Use 'crb' command as same as 'cucumber' command
  % crb (... cucumber options ...)

  And then you are in cucumber world via irb


Example
=======

  % cd examples/i18n/en
  % crb
  irb(CRB:3):001:0>
         ^^^ This means a number of defined steps.

  irb(CRB:3):001:0> Given "I have entered 3"
  Undefined step: "I have entered 3"
  => #<Cucumber::Undefined: Undefined step: "I have entered 3">

  irb(CRB:3):002:0> Given "I have entered 3 into the calculator"
  => [3]

  irb(CRB:3):003:0> Given "I have entered 5 into the calculator"
  => [3, 5]

  irb(CRB:3):004:0> Then "I press add"
  => 8

  irb(CRB:3):005:0> @calc
  => #<Calculator:0x7faa0a3e5218 @args=[3, 5]>

You can operate your variables directly .

  irb(CRB:3):006:0> @calc.push 1
  => [3, 5, 1]

  irb(CRB:3):007:0> Then "I press add"
  => 9


I18N
====

  I18N keywords are also available.

  % cd examples/i18n/ja
  % crb
  irb(CRB:3):001:0> 前提 "3 を入力"
  => [3]
  irb(CRB:3):002:0> @calc
  => #<Calculator:0x7ff45ecdbc70 @args=[3]>


Custom
======

  % mkdir my-project
  % crb my-project
  irb(CRB:0):001:0> Given "ab"
  Undefined step: "ab"
  => #<Cucumber::Undefined: Undefined step: "ab">
  irb(CRB:0):002:0> Given(/^(..)$/){|i| p "Two chars for you! #{i}"}
  => "/^(..)$/ is defined"
  irb(CRB:1):003:0> Given "ab"
  "Two chars for you! ab"


World Methods
=============

  Above crb(irb) context is a same object with cuke's world.
  And there are following additional methods.

    * before : execute before hooks. returns message (String)
    * after  : execute after  hooks. returns message (String)
    * steps  : returns step definitions (Array[RbStepDefinition])
    * support: returns support code object (Runtime::SupportCode)
    * hooks  : returns hooks (Hash[type=>Array[RbHook]])
    * rb     : returns ruby language support object (RbLanguage)


Restricted
==========

  * Hooks are not called automatically because crb is free from
    scenarios. Otherwise if hooks are called in each invokes,
    we'll never succeed to "add" operation in above calculator.

  * "before", "after" methods are the manual triggers for hooks.
    And "Ctl-C" is binded as "before" filter too.

  * To implement CRB, there are many ugly codes that closely
    depend on cuke's internal structures like private methods
    and instance vars. So it'll break soon after cuke's update.


Environment
===========

  Tested on ruby-1.8.7, cucumber-1.0.0


Author
======

  maiha@wota.jp