Practical Ruby

An Integrated Development Enrivonment  for Ruby


Last updates:

Content

Overview
Requirement
Licensing
Download
About version numbering
Compiling Project Ruby
Project Ruby Internal
Questions, comments and bugs reports

Overview

    Practical Ruby aims to be a fast evolving IDE for Ruby development. To provide fast evolution, most of Practical Ruby is itself written in Ruby.

    The source editor is build around Scintilla Edit Control , a very flexible source edit control. While the GUI core is written using MFC, most of the tasks are delegated to Ruby scripts. The Scintilla Edit Control has been made accessible from Ruby, with an interface making the control much easier to use than in C++.

    Commands (menu entry selection, toolbar button and keyboard shortcut) processing is also delegated to Ruby.

    Here are some screenshots showing some features: [~20Ko per image]
Bookmarks , Opposite brace highlighting , Brace mismatch , Folding , Unit test failure , Unit test sucess .

    Here is a list of the current features of  the IDE:
    While at the current, Practical Ruby still have a long way to go to be called an IDE, here is a list of future I'd like to see integrated:

Requirement

To run Practical Ruby

To compile Practical Ruby from the sources

Licensing

Practical Ruby is covered by the Gnu Public License .

Download

    To use Practical Ruby , you only need to download the binary. This documentation is included in source and binary distribution.

    The binary zip includes the executable and this documentation.
    The source zip includes Practical Ruby sources, this documentation, Scintilla Edit Control headers, documentation and precompiled DLL.

MFC DLL [~610Ko] : put them in the same directory as PracticalRuby.exe (or your system directory).

Practical Ruby 0.3.3 binary [~625Ko]
Practical Ruby 0.3.3 source code [~685Ko]

Practical Ruby 0.2.2 binary [~435Ko]
Practical Ruby 0.2.2 source code [~350Ko]

Practical Ruby 0.2.1 binary [~425Ko]
Practical Ruby 0.2.1 source code [~350Ko]

Practical Ruby 0.1.0 binary [~400Ko]
Practical Ruby 0.1.0 source code [~320Ko]

About version numbering

    The version number format is xx.yy.zz , where a change of :
    xx indicates a major architecture change,
    yy indicates that some functionnalities have been added, and
    zz indicates that some bugs have been fixed.

Compiling Practical Ruby

    To compile the 'Debug' configuration, you need to compile ruby library with the Multithreaded Debug Dll runtime library. See ReadMe.txt notes which explains how to do that.

Practical Ruby Internal

In this section, Project Ruby internal are explained very shortly. Main components are: Ruby C++ wrapper, Ruby helpers, Scintilla ruby extensions, TraceDebug ruby extensions, GUI/Scintilla ruby integration, GUI/Commands ruby integration.

Ruby C++ Wrapper

Ruby Helpers

Scintilla ruby extension

    Ruby script related to Scintilla are in script/scintilla . ScGenerator.rb generates the scripts ScConstant.rb and ScEditControl.rb using Scintilla interface definition Scintilla.iface . The script ScEditControlBase.rb is also used to detect specific function implementation. See comments in ScGenerator.rb for further details.

    ScEditControlBase implements a ruby extension method to send the message to the actual Scintilla window.

    ScEditControl implements Observable and can notify any number of listener of about Scintilla Edit Control events.

TraceDebug ruby extension

GUI/Scintilla Edit Control integration

    When EditorView is created, it automatically creates a ruby ScEditControl (script/scintilla/ScEditControl.rb ) object. Notification are forwarded to this object. SourceDocument and Console are the objects that actually use ScEditControl : it sets up style colors, lexer mode, and implements a simple 'smart indent'...

GUI/Commands integration

    Updating the user UI items is done in 'pool' mode: the MFC frameworks ask the application to update the state of a specific commands items. The MFC main frame checks if a specific command is handled by the ruby MainFrame and delegate the updates if it is the case. A similar technique is used to handle command execution.

Questions, comments and bugs reports

    Questions, comments, grammar/spelling mistakes and bugs reports are more than welcome. You can reach me at the following address: gaiacrtn@free.fr
Copyright ©2000-2002, Baptiste Lepilleur . http://gaiacrtn.free.fr/index.html