[Nitro] Development version / Request for help

George Moschovitis george.moschovitis at gmail.com
Fri Oct 14 04:29:01 EDT 2005


Dear devs,

As this version of Nitro is taking a lot of time to complete, I
decided to release
a snapshot of the development version in the hope that I 'll get some help from
the community. You can find the distribution here:

http://www.joy.gr/dist.tgz

WARNING: This distribution is for experienced devs and contains bugs!

To install this, unzip the .tgz and setup the gems in the following
order:

facets,
glue
og
nitro
gen

then extract the examples/spark tarballs.

And now about helping:

- I would like to ask Chris to investigate and fix any pending bugs
  in the admin / scaffolding system.

- I would like to ask Tom to have a look at how annotations are used
  in Og so we can nail down the problems with the latest facets gem.

- If you want to try KirbyBase support, uncomment the correct line in
  the Spark example. There is one problem though: If you restart
  the application the database gets corrupted. If anyone can help me
  find the problem I would appreciate it.

- You can play with the experimental SCGI support. In the spark
  directory issue:

  lighttpd -f conf/lhttpd.conf (update the conf for your system)
  ./script/scgi_ctl start.

- If you find incompatibilities with the old version, let me know
  so I can write them down in the MIGRATION text file.

- If you find more problems, let me know.


To wet your appetite, here are some of the new additions:


* Totally 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 site map strings etc, etc. One unified
  system for annotations and meta data is used throughout
  the whole Framework.

* 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 Separation 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. The database schema and data are automatically updated
  for you. 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.

  <?r
  green = '#79b500'
  background = '#fff'
  ?>

  .page {
    background: #{green}

    <?r 10.times do ?>
      padding: 5px;
    <?r end ?>

    // 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...

* 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.



Please report any problems you have if you try to install this
development version.


thanks in advance,
George.


--
http://www.gmosx.com
http://www.navel.gr
http://www.nitrohq.com




More information about the Nitro-general mailing list