From: "Oliver M. Bolzer" Date: 2003-11-20T00:56:39+09:00 Subject: [ANN] Vapor 0.80, now supports object versioning Hi! I'm happy to announce the release of Vapor 0.80. This release fixes lots of nasy bugs and adds support for object versioning. On each transaction commit, a new version of each modified object is created and the old version kept for later audit or recovery. Additionally, all transactions are logged with a committer, commit message and a list of objects modified in the transaction. As for now, versioning is unconditionally on for all classes, but in the next release, the user will be able to choose if he wants versioning or not per-class. A 1.0 release is getting closer, but this is still beta-software. Some refactoring and clean ups are still neccersary and the on-disk format will likely change again. Nevertheless, I really want this release to be tested by as many interested developers as possible. Feed back and suggestions regarding the semantics and API are most welcome. Below are excerpts from the CHANGES and TODO files. For details and code snippets of the new features see Vapor's webpage at http://vapor.rubyforge.org/ Version 0.80 (tagged 19 Nov 2003, revision 275) Features: * transaction logging, record information about time, committer and log message as well as list of objects modified per transaction * basic versioning support, retrieval of historic object states * vaporadmin: removal of classes and all their instances using the * "remove" command * vaporadmin: modification of class' metadata using the "update" * command * new operator (~) for wildcard searches on Strings Bug Fixes: * allow SQL keywords as names of persistent attributes * fix bug where camelCase variables would not be correctly set on * object loading * correctly transfer newly persistent objects back to transient state * during rollback(). This bug caused incomprehensible ObjectDeletedErrors when manually or automatically rolling back. * check REXML::Version instead of REXML::VERSION_MAJOR, which does not * exist in the REXML version that is included in Ruby 1.8 * minimize number of warnings issued when using `ruby -w', including * those from Ruby 1.8.x, that are issued regardless of -w Incompatible Repository Changes: (Repository needs to be recreated from scratch) * repository schema version 3 * add fields and tables for versioning TODO: ===== 0.90 User Visible: - make versioning optinal, specified for each class individually - literals in search queries - case insensitive searchs / regular expressions ? - improve documentation by writing a proper user's guide - prefix all methods of Persistable with vapor_ ? keep current names as alias ? Internal: - refactor object being passed from TupleManager to PersistenceManager to use a custom class instead of a Hash with special keys - create new class for metadata and store it as a Persistable instead of special treatment - use Test::Unit::Mock istead of Mock 1.00 - do some benchmarking and profiling, simple improvements - maybe: use Ruby 1.8 features, drop support for Ruby 1.6 - get tested by as many people as possible - documentation, examples, documentation, documentation and documentation post-1.0 - backends for other databases like MySQL and Oracle - support for long-transactions in form of versioning-branches - maintain backwards-compatibility for database schema or provide migration path -- Oliver M. Bolzer oliver@gol.com GPG (PGP) Fingerprint = 621B 52F6 2AC1 36DB 8761 018F 8786 87AD EF50 D1FF