From: George Moschovitis Date: 2005-05-16T22:25:31+09:00 Subject: Nitro + Og 0.17.0, Og Reloaded, Elements Hello everyone, new versions of Nitro and Og were just released. Homepage + Downloads: http://nitro.rubyforge.org The biggest release yet, featuring the brand new implementation of Og. Due to the many changes this should be considered a preview release, a stabilized version is expected shortly. Bug reports and comments on the new features are especially appreciated. Many thanks to Michael Neumann, Dan Yoder and other hackers on the mailing list for ideas and suggestions that made this version possible. Most notable Og additions: * Extremely clean source code. Better names are used thorougout. Extra care was taken to make all features more orthogonal. * Brand new relation mechanism. The 'enchanting' of entities (managed classes) happens in multiple passes to be more flexible. Totaly separated graph/metadata creation and serialization code generation. The Graph metadata can be used for advanced scaffolding, testing and more. * Support for fully customizable primary keys. You are no longer forced to use xxx_oid primary keys. Appart from the extra flexibility this feature provides, this is an essential step towards the planed 'reverse engineering' mode that will allow the use of existing schemas with Og. * More elegant inspection mechanism. Example: Article.relation(:user) # => Og::BelongsTo(...) Article.relations # => [...] Article.properties # => [...] * Joins_many relation, as an alias for one way, join table relations. * Support for 'active' collections. Active collection are synchronized with the backend Store and provide a more elegant interface and the opportunity for 'session' caching: article.comments << Comment.new instead of article.add_comment(Comment.new) # this is also allowed though. p article.comments p article.comments.size # the results of the first query is cached * Eager relations. comments = Article.comments(:include => User) for comment in comments p comment.user.name end Elegantly solves the N+1 query problem by using one join query. * No need for forward references when defining relations. Now, the following code magically works: class User has_many Comment # works even though Comment is not defined! end class Comment belongs_to User end * Use inflection where possible to infer missing configuration options. For example class Article belongs_to User # infects relation name :user ... * New, lean and mean Store interface. The code needed to teach Og how to serialize objects to backend store is dramatically reduced. The new interface is SQL agnostic, so non SQL-RDBM's stores are possible. * SQL agnostic querying interface, compatible with non-sql Stores. Here is an example: Article.find( :condition => 'hits > 2 AND rate > 3', :order => 'title', :offset => 30, :limit => 10 ) * More elegant (and non-sql store compatible) way for selective updates: article.title = 'Changed' article.hits += 1 article.update(:title, :hits) * New, in-memory store that support all features. This is a pure ruby solution useful for experimentation. It will also serve as the base for the forthcoming madeleine Store implementation. * Allow for multiple stores in one application. A great example, mysql_to_psql is provided. This example uses Og's powerfull features to automatically convert a Mysql database to a PostgreSQL database. Database migration was never easier. * Uses the excellent Facets utility collection to further cleanup and minimize the code. * Managed classes or Entities should include the EntityMixin or extend the Entity class. Example: class Article < Entity .. end class Article include EntityMixin end This is done to avoid the Module module like in earlier versions of Og. However, Og is can infer the need to include the Managed mixin in typical cases: class Article property :title, String # when a property is defined Og automatically converts the # class to an Entity end class Article < AnExistingManagedEntity # also includes the mixin ... class Article include AModuleThatDefinesProperties ... * Improved support for og_delete interception. * Support for nested transactions. Check out the file test/og/tc_store.rb for a demonstration of the new features. And some Nitro additions: * Integrated the Facets library, and started donating some Glue code to this project. * Integrated the Prototype object oriented javascript library. * Included a preview implementation of the new tag library system, called Elements. This is based on an original idea by Dan Yoder. This feature is expected to change substantially in the next version. In the meantime here is an example: Here is a nice page.
This is #{variable}. hello admin
The tags and automatically instantiate objects of class Page and Box that handle the rendering. This is an alternative to the XSLT templating system and can also be used to implement some reusable components. The hierarchical structure of the elements is available to each object to facilitate advanced rendering tricks. Just like the XSLT shader the Elements transformation is preapplied to the page to avoid the overhead at runtime. * Fixed many reported bugs. I hope this software will be useful to you, and I would love to receive your suggestions, ideas and bug reports. have fun, George Moschovitis