Nitro + Og 0.30.0: VCR mode, Og QBE, Feeds, Fixes


#1

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:

    #{form :object => @owner, :action => :save_profile do |f| f.property :name, :editable => false f.property :password f.br f.submit 'Update' end}
    #{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}
  • 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


#2

On Friday 05 May 2006 12:58 pm, George M. wrote:

Nitro automatically plays back the recorded session and logs
any errors or Exceptions.

Now THAT is a great idea. Imitation is the sincerest form of flattery
and
all. I will definitely be borrowing that idea for IOWA.

Kirk H.


#3

Hi,

George, you have a bad link there, please update your bookmarks.
(On nitroproject as well)

faq: http://www.oxyliquit.de

Please use that one.

Everyone else: enjoy the new shiny Nitro :slight_smile:

Kashia


#4

session just restart the server in playback mode:

ruby run.rb --playback myfile

Yikes, now that’s awesome. Hopefully someone will port it to Rails too
:slight_smile:


#5

Nitro automatically plays back the recorded session and logs
any errors or Exceptions.

Now THAT is a great idea. Imitation is the sincerest form of flattery and
all. I will definitely be borrowing that idea for IOWA.

Glad you like it :wink:

have fun,
George.


#6

Wow… sounds like a ton of excellent features.

I’ve done a Google search to find a comparison of Nitro and Rails, but
didn’t see much other than a couple of blog posts.

Do you guys have a comparision or any other sugggestions about how to
understand the approaches and benefits to different development
communities
of Rails and Nitro?