Dear devs,
The Nitro Development Team is proud to announce new versions of Nitro and Og
homepage: http://www.nitroproject.org
install: gem install nitro
download: http://rubyforge.org/projects/nitro/
trac: http://devlab.oree.ch/trac/nitrohq
irc: irc.freenode.net #nitro
faq: http://oxyliquit.manveru.net
mailing list: http://rubyforge.org/pipermail/nitro-general/
Another pragmatic release. The Nitro development team worked over
the submitted tickets and provided many bug fixes. More over, there
are many small improvements along the codebase and as always
we could not resist adding some cool new features.
Special thanks fly to Bryan Sotto for making this release
possible!
Most notable chages:
* Nitro allows fine grained customization of the compiler
tranformation pipeline per controller or even per action.
Here come some examples:
class MyController
ann :self, :transformation_pipeline => [MyTransformer, AnotherXForm]
...
def my_action
...
end
ann :my_action, :transformation_pipeline =>
Compiler.transformation_pipeline.dup.shift(CustomXForm)
...
end
* Nitro automates integration testing by means of the new
session VCR feature that allows for easy proxy based
functional testing. A typicall session goes like this:
Start your app with:
ruby run.rb --record myfile
Then use your web browser to 'perform' your testing session.
You can used multiple browsers, concurrent users and hit all
the pages in your app. At the end, just stop the server.
In order to perform regression testing against this recorded
session just restart the server in playback mode:
ruby run.rb --playback myfile
Nitro automatically plays back the recorded session and logs
any errors or Exceptions.
* Better Global variable implementation works better with
distributed stores (Drb, Memcached). Notice the new
Global.init and Global[:key].update { |v| } methods.
* Improved the Router implementation. One notable addition
is support for global router initialization:
Router.rules = [
{ :match => /~(.*)/, :controller => IdController, :action =>
:view, :params => [:name] }
]
* Cleaned up glue by removing files duplicating functionality
allready available in Facets. Moreover, we moved several
generally useful files and methods from Glue to Facets.
* Replaced the old RSSHelper with the new FeedHelper. The new
implementation provides support for RSS, Atom, OPML. The
FeedHelper is backwards compatible with the old helper but
provides even more features.
class MyController
helper :feed
end
* Added Og query by example support. Query the database for an
entity that matches the example. The example is a hash
populated with the property values to search for.
The provided property values are joined with AND to build
the actual query.
Article.query_by_example :title => 'IBM%', :hits => 2
Article.find_with_properties :title => 'IBM%', :hits => 2
* Added type casting support for Og aggregations and
calculations.
* Greatly improved the configuration system. One noteable
(and extremely useful) new feature is that you can now
customize classes before they are even defined:
Configuration.User.crypt_salt = 'HELLO'
require 'users'
in users.rb:
class User
setting :crypt_salt, :default => 'DF', :doc => 'The crypt salt'
end
* Calculate rendering level in actions to allow for conditional
rendering in top level actions or sub-actions. Some helpers
are also provided:
def myaction
if request.is_top_level?
...
end
end
* Introduced an alternative more sophisticated (yet intuitive)
form builder. While this new helper is still under construction,
it is already very useful. Here come some examples:
<!-- entity backed form -->
<div id="myform">
#{form :object => @owner, :action => :save_profile do |f|
f.property :name, :editable => false
f.property :password
f.br
f.submit 'Update'
end}
</div>
<!-- form with virtual method (:multipart),
special controls (:select_file) -->
<div id="myform">
#{form :method => :multipart do |f|
f.p {
f.label 'Select the new icon filename'
f.select_file :file, :label => 'Select icon'
}
f.p {
f.submit 'Change'
}
end}
</div>
* More flexible Script generator, the developer can use most of
its features without a Client subclass.
* Reimplemented session garbage collection.
* Added many more RDoc comments to the source code.
* Many, many bug fixes.
* Updated to latest Facets, Scriptaculous, Prototype.
Nitro provides everything you need to develop professional Web
applications using Ruby and Javascript. Nitro redefines Rapid
Application Development by providing a clean, yet efficient API,
a layer of domain specific languages implemented on top of
Ruby and the most powerful and elegant object relational
mapping solution available everywhere.
Please note that the project home page has been moved to:
http://www.nitroproject.org
have fun,
Nitro Development Team