From: Austin Ziegler Date: 2003-08-23T13:14:39+09:00 Subject: [ANN] Transaction::Simple 1.1.0 I am pleased to announce the release of Transaction::Simple 1.1.0. Transaction::Simple provides a generic way to add active transactional support to objects. The transaction methods added by this module will work with most objects, excluding those that cannot be Marshal-ed (bindings, procedure objects, IO instances, or singleton objects). The transactions supported by Transaction::Simple are not backend transaction; that is, they have nothing to do with any sort of data store. They are "live" transactions occurring in memory and in the object itself. This is to allow "test" changes to be made to an object before making the changes permanent. Transaction::Simple can handle an "infinite" number of transactional levels (limited only by memory). If I open two transactions, commit the first, but abort the second, the object will revert to the original version. The major changes from 1.0 are the addition of an explicitly thread-safe version (Transaction::Simple::ThreadSafe), and the addition of named transactions. Named transactions work in some ways similar to Ruby's catch/throw construct, allowing the commit, abort, or rewind of transactions multiple levels deep without manually acting on the intervening transactions. Named Transaction Usage ----------------------- v = "Hello, you." # => "Hello, you." v.extend(Transaction::Simple) # => "Hello, you." v.start_transaction(:first) # => ... (a Marshal string) v.transaction_open? # => true v.transaction_open?(:first) # => true v.transaction_open?(:second) # => false v.gsub!(/you/, "world") # => "Hello, world." v.start_transaction(:second) # => ... (a Marshal string) v.gsub!(/world/, "HAL") # => "Hello, HAL." v.rewind_transaction(:first) # => "Hello, you." v.transaction_open? # => true v.transaction_open?(:first) # => true v.transaction_open?(:second) # => false v.gsub!(/you/, "world") # => "Hello, world." v.start_transaction(:second) # => ... (a Marshal string) v.gsub!(/world/, "HAL") # => "Hello, HAL." v.transaction_name # => :second v.abort_transaction(:first) # => "Hello, you." v.transaction_open? # => false v.start_transaction(:first) # => ... (a Marshal string) v.gsub!(/you/, "world") # => "Hello, world." v.start_transaction(:second) # => ... (a Marshal string) v.gsub!(/world/, "HAL") # => "Hello, HAL." v.commit_transaction(:first) # => "Hello, HAL." v.transaction_open? # => false Copyright: Copyright � 2003 by Austin Ziegler Version: 1.1 Licence: MIT-Style Thanks to David Black and Mauricio Fern�ndez for their help with different aspects of this library. The MD5 hash of the archive is: Digest::MD5.new(File.read('transaction-simple-1.1.0.tar.gz')) => 4396b92176ce4fc42f7219857e270bcb -austin -- austin ziegler * austin@halostatue.ca * Toronto, ON, Canada software designer * pragmatic programmer * 2003.08.22 * 23.59.18