From: George Moschovitis Date: 2005-10-28T16:55:13+09:00 Subject: [ANN] Nitro + Og 0.24.0, Annotations, KirbyBase, SCGI, Og Evolution, Gen, Dynamic CSS... Dear devs, new versions of Nitro and Og were just released! homepage: http://www.nitrohq.com download: http://rubyforge.org/projects/nitro/ mailing list: http://rubyforge.org/pipermail/nitro-general/ -- A snapshot of the latest developments. This version features tons of big and small features and bug fixes that were implemented during the last month. Special thanks fly to Tom, Chris, Guill, Rob, Aleksi, and all others that sent patches and code. Most notable additions: * Totaly recoded annotation / property system. The property system is now based on Facet annotations and inheritors. You can now annotate every object, attribute or method in Nitro. For example you can annotate your actions with routing rules or sitemap strings etc, etc. One unified system for annotations and metadata is used throughout the whole Framework. Here is an example: class A attr_accessor :val ann :val, :klass => String ann :self, :doc => 'Self annotation' end A.ann.val.class => String A.ann.self.doc => if A.ann.val[:class] etc, etc... * Implemented one of the most requested features. An Og frontend for KirbyBase. The KirbyBase store does not yet support all features, but is really useful. For example it can power the Spark wiki example. Switching between KirbyBase, Mysql, Postgres, Sqlite, etc by changing one line of code is really cool ;-) * Better Seperation of Concerns for Og managed classes. Og can now annotate and handle classes from other libraries. Lets say you have the following class: class User attr_accessor :name attr_accessor :body end Using Ruby's open classes and Nitro's advanced annotation system you can easily prepare this class for Og management class User ann :user, :klass => String ann :body, :klass => String end or even better: class User property :user, String property :body, String end This style promotes SOC: You define your classes in one place and annotate them for Og in another place. * Introduced a simple code generation framework. Two example generators are included: * app: generates the directory structure for a new nitro application. * form: generates an xhtml form for a Ruby class. This generator leverages the annotations of the object class. * Improved scaffolding code and django style auto administration system. The new scaffolder supports all Og relation types and provides an intuitive DHTML interface for editing. * SCGI (http://python.ca/nas/scgi/protocol.txt) support. Thanks to a refactoring of Nitro's cgi code this version integrates with Zed Shaw's SCGI adapter. This provides FastCGI's performance with an easy installation. * Experimental HTTP streaming support. Here is a simple example: def index response.content_type = "text/plain" stream do 5.times do |i| print "#{i}"*10000 + "\n" sleep 1 end end end * Simple Og automatic evolution system. Lets say you have a class Article class Article property :title, String property :nbody, String property :dumy, Fixnum end lets you want to change your class to this one: class NewArticle property :ntitle, String property :nbody, String property :new, Float end First you export the database: og.export Then you import the database. Some rules are needed when renaming classes or properties. New properties or deleted properties are handled automatically. rules = { :Article => { :self => :NewArticle, # rename the class :title => :ntitle, :body => :nbody } } og.import :evolution => rules Thats all. In a future version this will be integrated into the default runner scripts. * Og helpers to create simple rdbms management scripts. Here is an example: mysql "-u root -p", <<-END drop database if exists weblog_development; create database weblog_development; grant all on weblog_development.* to #{`id -un`.strip}@localhost; END At the moment this is only available for Mysql. * Added support for dynamic CSS using Nitro's advanced templating system. Create the dynamic CSS file with an .csst extension in your template root. .page { background: #{green} padding: 5px; // or even <% 3.times do %> margin: 5px; <% end %> } .. then, add this line in run.rb: Compiler.precompile 'style.css' The CSS file will be regenerated automatically whenever the template changes... * Updated to support latest Prototype, Scriptaculous etc. * Cleaned up Og implementation. * Fixed minor Ruby 1.8.3 compatibility issues. * Even better integration with Ruby Facets. * Tons of bug fixes and small but useful features. -- 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. Nitro is Web 2.0 ready, featuring excellent support for AJAX, XML, Syndication while staying standards compliant. Og (ObjectGraph) is a powerful and elegant object-relational mapping library. Og manages the lifecycle of Ruby objects and provides transparent serialization of object graphs to stores (typically RDBM systems). -- enjoy, George Moschovitis -- http://www.nitrohq.com http://www.navel.gr