Ruby Q.E.D.

    homepage: http://proutils.rubyforge.org/qed
mailing list: http://groups.google.com/group/tigerops-community
 development: http://github.com/proutils/qed/tree/master

Introduction

Q.E.D. is an abbreviation for the well known Latin phrase “Quod Erat Demonstrandum”, literally “which was to be demonstrated”, which is oft written in its abbreviated form at the end of a mathematical proof or philosophical argument to signify the successful completion of a proof.

And so it for Ruby Q.E.D., which might also be taken to stand for Quality Ensured Documentation.

Q.E.D. is in fact both a test framwork and a documentation system for Ruby developers. QED sits somehwere between lower-level testing tools like Test::Unit and grand requirement specifications tools like Cucumber. In pratice it works best addressing API-Driven Development, which is especially useful when designing reusable libraries.

Features

  • Demos can be RDoc, Markdown or any other conforming text format.

  • Uses the excellent Assertive Expressive library for assertion system.

  • Helpers are easily loaded relative to running document.

  • Table macro allows large sets of data to be run by the same code.

  • Documentation tool provides nice output with jQuery-based TOC.

Synopsis

Assertion Syntax

QED uses AE (Assertive Expressive) library to provide an elegant means to express behaviors. To give a quick overview, you can use code such as:

4.assert == 5

In this example, because 4 != 5, this expression will raise an Assertion exception. QED’s Runner class is thus just a means of running and capturing code block containing these assertions.

You can learn more about AE at proutils.github.com/ae.

Document Structure

QED documents are simply text files –thus a practice of literate programming. For example:

= Example

Shows that the number 5 does not equal 4.

    5.assert! == 4

But in fact equals 5.

    5.assert == 5

As you can see, we used RDoc for this document. Almost any text format can be used. The only necessary distinction is that description text align to the left margin and all code be indented. However QED recognizes RDoc and Markdown single-line style headers, so any format that supports this style (which covers many markup formats in use today) will work a bit better. While strictly speaking QED does not need to recognize headers, it does improve console output.

Give this design some thought. It should become clear that this approach is especially fruitful in that it allows documentation and specification to seamlessly merge into a unified demonstration.

Running Demonstrations

If we were to run the above document through QED in verbatim mode the output would be identical (assuming we did not make a typo and the assertions passed). If there were errors or failures, we would see information detailing each.

To run a document through QED, simply use the qed command.

$ qed -v demo/01_example.rdoc

The -v option specifies verbatim mode, which outputs the entire document.

Notice we placed the QED document in the demo directory, this is one of two conical place that has been designated for them (the other is test/demos), though you can put them elsewhere in your project if you prefer. Also notice the 01_ in front of the name. While this is not necessary, it helps order the documents properly with generating QED documentation (QEDocs).

To generate documentation from QED documents, use the qedoc command.

$ qedoc --output doc/qedoc --title "Example" demo/*.rdoc

When documenting QED recognizes the format by the file extension and treats it accordingly. An extension of .qed is treated the same as .rdoc.

Use the --help options on each command to get more information on the use of these commands.

Requirements

QED depends on the following external libraries:

* AE     - Assertions Framework
* ANSI   - ANSI Color Codes
* Facets - Core Extensions

These will be automatically installed when installing QED via RubyGems, if they are not already installed.

Copyright and License

Q.E.D.

Copyright © 2007,2009 Thomas Sawyer

Unless otherwise permitted by the author, QED is distributed under the terms of the GPL version 3 or greater. See COPYING file for details.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA