== Version 0.16.0

A snapshot of the latest developments. Many, many subtle improvements,
new features and a major cleanup of the source code. 

Most notable attitions:

* Aspect Oriented Programming support. This new system
	is used to reimplement features such as Controller filters,
	Og callbacks and Og observers. By using this unified
	system you can now add Observers to controllers and use
	a metalanguage for wraping Og object callbacks:

	class Controller
 		pre :force_login, :where => :prepend
 		wrap Benchmark, :on => :index
 		post :taraa, :on => login
	end
 
	module Timestamped
 		pre :on => :og_insert { |this| this.create_time = Time.now }
		pre :on => :og_update { |this| this.update_time = Time.now }
		pre :on => [:og_insert, :og_update] { |this| this.create_time = Time.now }
	end

	This feature will be used extensivelly  in future versions
	to improve logging, the shaders and more.

* Major cleanup of the source. Converted the N namespace to
	Nitro. 

* Add Og Timestamped mixin.

* Og improvements.

* Improved the Gem installation process.

* Fixed all reported bugs.


== Version 0.15.0 was released on 04/04/2005.

A great release. Many cool new features and tons of subtle 
improvements. We also welcome a new core developer, Anastastios 
Koutoumanos, who started contributing with a new SqlServer adapter.

Most notable additions:

* NestedSets mixin:

  class Comment
		include NestedSets
	end

	or

	class Comment
		include Hierarchical, :method => :nested_sets
	end

	c.add_comment(child_comment)
	c.full_children
	c.direct_children
	c.children
 
	this is a reimplementation of the SqlTraversable mixin
	available in older versions.
 
* New implementation of Orderable mixin:

  class Comment
    property :body, String
		belongs_to :article, Article
    include Orderable, :scope => article
  end

  c.move_higher

  The Orderable mixin uses the :scope parameter to dynamically alter
  the methods appended to the Comment class. 
 
* New SqlServer adapter.

== Version 0.14.0 was released on 18/03/2005.

Many many important fixes, and many small additions
and improvements. Og mixins are introduced with
an experimental List mixin implementation.

Most notable additions:

* Support for objects that participate in list
 (ordering/removal etc)

* Add useful new enchant methods.

* Fixed all user reported bugs.


== Version 0.13.0 was released on 17/03/2005.

A maintenance release. 

Most notable additions:

* Better separated from Nitro.

* Database related validations (validate_unique) etc.

* Emmit warnings on implicit graph changes.

* Many bugfixes.


== Version 0.12.0 was released on 07/03/2005.

A careful blend of new features and subtle improvements
to the existing infrastructure. Some important bugs where
fixed aswell.

Most notable additions:

* Og automatically generates finders for all properties, for
	even easier (and portable) querying:

	class Article
		property :title, :body, String
		property :hits, Fixnum
		property :create_time, Time
	end

	you get the finders:

	Article.find_by_title
	Article.find_by_body
	Article.find_by_hits
	Article.find_by_create_time

	The finders take into account the unique constrain, to return
	an array or just an object as needed.

* Og introduces lifecycle observers to avoid 'poluting' the model
	objects with excess functionality. You can use every object
	as observer (duck typing) or extend from an AR style Observer
	class. The observer callbacks are precompiled in the lifecycle
	methods only if defined, so the perfomance is not affected
	in the general case.

* Fixed Og bug: multiple many_to_many relations with the
	same target class.

* further code cleanup, improved examples and more.


== Version 0.11.0 was released on 28/02/2005.

The platform continues to evolve and now supports the 
the Oracle database out of the box. This version features 
improved documentation, important bug fixes  and many subtle 
improvements to make programming even more enjoyable. Many 
thanks to Matt Bowen for his help with this release.

Most notable additions:
	
* Documentation (doc/og_tutorial.txt, doc/og_config.txt)

* Og Oracle adapter.

* Og provides advanced metadata for the managed objects

	class Article
		property :title, String
		property :body, String
		has_many :comments, Comment
	end

	par = Article.properties_and_relations
	=> [Property(:title), Property(:body), Og::HasMany(:comments)]

	par[2].klass
	=> Comment

	par[2].meta[:linkback]
	=> :article_oid

* Og Typemacros, here is an example:

	def VarChar(size)
		return String, :sql => "NOT NULL VARCHAR(#{size})"
	end

	property :title, VarChar(30)

* Option for faster startup, skip schema check.

* Many small Og improvements and fixes.

WARNING: If you used an earlier version of Og you
may need to drop your database and let Og recreated it
automatically.


== Version 0.10.0 was released on 15/02/2005.

An important release.

Most notable additions:

* Improved Og implementation (cleaner code) and new Og 
  adapter subsystem.

* New SQLite3 Og adapter, improvements in MySQL and PostgreSQL 
	adapters (needs version 1.1.0 of Sqlite3-Ruby).

* Better GemSpec for easier installation by RubyGems.

* Og supports optional typechecking by using property metadata.

* and many more smaller fixes.

WARNING: If you used an earlier version of Og you
may need to drop your database and let Og recreated it
automatically.


== Version 0.9.3 was released on 01/02/2005.

A maintenance release.

Most notable additions:

* Og metalanguage relations insert metadata into 
	the target class, useful for advanced scaffolders.

* Og refer_to meta-language command. 

* Correct handling of booleans.

* Auto-include metalanguage on prop.

* Many bug fixes.


== Version 0.8 was released on 12/01/2005.

A snapshot of the latest code. Cool new features,
many fixes and improvements in older features. Many thanks
to Michael Neumann for giving intelligent suggestions
and finding small bugs.

Most notable additions:

* New automatic validation system:

	class User
		prop_accessor :name, :password, String
		validate_confirmation :password
		validate_length :name, :range => 2..12
	end

	u = User.new(...)
	unless u.valid?
		p u.errors.on(:name)
		p u.errors[:password]
	end

* No global variables in Og. 

* Recoded Og to allow for future support of multiple databases 
	(even on different RDBMS systems) on a single application.

* cleaned up backend code.

* More unit tests.

* Supports Ruby 1.8.2
	

== Version 0.7 was released on 27/12/2004.

A snapshot of the latest code. Many fixes and new features result
in a more mature product. Many thanks to the ruby hackers that sent
suggestions and patches used in this release!

Most notable additions:

* Totaly recoded prop_accessor mechanism, avoids polution of the Module
  class.
* prop_accessors for Modules, allows synthesizing of managed objects
	from Mixins.
* new automatically generated methods in Og.
* MockDatabase leverages the FlexMock object for easier unit testing.


== Version 0.6 was released on 13/12/2004.

This is a preview release, the api for the new features is not 
finalized. This early release gives other developers to offer suggestions
on the final form of those features.

Most notable additions:

* Og many_to_many relations with auto generation of the join table.
* Og has_one relation.


== Version 0.5.0 was released on 21/11/2004.

New standalone version. SQL indices can be defined again.


== Version 0.5.0 was released on 01/11/2004.

Renamed to Og (ObjectGraph) Og combines the best features of Active
Record and NDB. A fully working MySQL adapter is also provided.
Moreover the code base is further cleaned up. Small improvements 
to the application configuration system. This version is integrated
in Nitro.


== Version 0.2 was released on 07-10-2004. 

The sofware is actually usable but not tested in a production environment. 
Comments from the Ruby community are critical in order to fix possible 
bugs and improve the API. Suggestions for missing features are also 
welcome. This version only supports the Postgres Database.


