Ronin "big-push" 0.3.0 released

ANSI, color, datamapper, gemcutter, http, output, proxy, ronin, ruby, server, tcp, test, thor, udp, yard

The long wait is over. Ronin 0.3.0, code-named "big-push", has finally been released.

DataMapper 0.10.0

Ronin was probably one of the first big Ruby apps to upgrade to DataMapper 0.10.0. As a result of this, we had to postpone the release of Ronin 0.3.0, until DataMapper 0.10.0 had finished it's rigorous two month Q/A cycle.

Once DataMapper 0.10.0 had been released, the two months of Q/A and almost a complete rewrite of the code-base really showed itself. I think @dkubb, @dbussink, @snusnu, @xshay, @myabc, @rsim, @namelessjon, @knowtheory and everyone else who helped with 0.10.0 deserves applause for their hard work and dedication.


As of 0.3.0, Ronin has successfully moved to YARD based documentation. The new Ronin API docs can be found in the usual location. YARD really helped improve the detail of the Ronin API docs, allowing developers to specify method arguments, accepted object-types, yield arguments, possible exceptions and return-types.

Additionally, YARD handlers were added to Ronin that parsed and regenerated documentation for DataMapper properties/relations. These additional YARD handlers helped improve documentation coverage for Ronin models, such as Ronin::Arch or Ronin::Exploits::Exploit.


Ronin::UI::CommandLine was almost entirely refactored in 0.3.0. Ronin::UI::CommandLine::Command was rewritten to use Thor. Switching to Thor greatly simplified the ronin commands, making it easier to write new commands. A good example of this, is the source-code for the install command from before and after 0.3.0.

Another benefit to using Thor, albeit cosmetic, was being able to use Thor's ANSI color-output. Normal output will now appear in green, warnings in yellow and error messages in red.

New convenience methods were also added to Ronin::UI::CommandLine::Command to help format and print various data: indent, print_title, print_array and print_hash.


As of 0.3.0, Ronin::UI::Diagnostics and Ronin::UI::Verbose were replaced with the brand new Ronin::UI::Output module. Ronin::UI::Output is designed to delegate how output is handled. By default all output is sent to Ronin::UI::Output::Handler, which prints the output to the terminal. One can override the default output handler by using Ronin::UI::Output.handler=, to specify the new handler module; which must define print_info, print_debug, print_warning and print_error methods.

Ronin::UI::Output also provides the Helpers module, which can be included into any class and adds the print_info, print_debug, print_warning and print_error methods.

New Convenience Methods

New TCP and UDP networking methods were added to 0.3.0. Now one can easily create TCP/UDP servers using, Net.tcp_server, Net.tcp_server_session, Net.tcp_single_server, Net.udp_server and Net.udp_server_session.

Ronin::Network::HTTP::Proxy was also added to 0.3.0. The Ronin::Network::HTTP::Proxy helps parse and represent HTTP proxy addresses, and is now used by Ronin::Network::HTTP.proxy and all :proxy options.

proxy = Network::HTTP::Proxy.parse('')
# => #<Ronin::Network::HTTP::Proxy:>

The Proxy class can also be used to test a proxy.

# => true
# => 0.003881


The overlay.xsl file got a make-over in 0.3.0. overlay.xsl is a XML StyleSheet, which helps render ronin.xml files from Overlays into proper XHTML when they are viewed in a web-browser. Now ronin.xml files should appear more like a standard "About" web-page.

Reloading Overlays/Extensions while ronin is running became possible with the addition of Ronin::Platform.reload!. Now if an Extension is modified, one can simply call Platform.reload! and get the updated version.

Ronin Extensions gained convenience methods for defining reader/writer methods to instance variables: attr_reader, attr_writer and attr_accessor. They can be used in Ronin Extensions, just as one would use them in a class.

ronin_extension do

  attr_accessor :var
  attr_reader :result

  setup do
    @var = 5
    @result = nil

Ronin Extensions also gained their own on-demand temp directory. When Ronin::Platform::Extension#tmp_dir is called, a temp directory specifically for the extension will be created within ~/.ronin/tmp/, and the path of the new temp directory will be returned.


As always, the rubygem files for Ronin 0.3.0 are available on rubyforge.org. One can update Ronin using rubygems by simplying running:

$ gem update ronin

Likewise, one can also install Ronin using rubygems:

$ gem install ronin

Also, as of Ronin 0.3.0 all releases of Ronin will also be made available on gemcutter.org.