The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Buffer::Transactional - A transactional buffer for writing data

SYNOPSIS

  use IO::File;
  use Try::Tiny;
  use Buffer::Transactional;

  my $b = Buffer::Transactional->new( out => IO::File->new('my_novel.txt', 'w') );
  try {
      $b->begin_work;
      $b->print('It was the best of times, it was the worst of times ...');
      # ...
      die "Whoops!";
      # ...
      $b->commit;
  } catch {
      $b->rollback;
      warn "Transaction aborted because : $_";
  };

DESCRIPTION

Allow me to take you on a journey, into the distant past ...

So a year or so ago I got really into the O'Caml language and in exploring the available libraries I stumbled onto OCamlnet. Ocamlnet is basically an all things internet related module for O'Caml. Of particular interest to me was their CGI module and one nice feature jumped out at me, which was the fact they used a transactional buffer to print the output of the CGI. Now, in a Modern Perl world few people probably call print inside a CGI script anymore, but instead use templating systems and the like. However I still thought that a nice transactional buffer would be useful for other things such as in the internals of such a templating system or the bowels of a web framework.

Fast forward to 2009 ... and here you have it! We support several different kind of buffer types as well as nested transactions. As this is the first release, no doubt there is much room for improvement so feel free to suggest away.

Use only as directed, be sure to check with your doctor to make sure your healthy enough for transactional activity. If your transaction lasts for more then 4 hours, consult a physician immediately.

ATTRIBUTES

out

This is an object which responds to the method print, most often it will be some kind of IO::File, IO::String or IO::Scalar varient. This attribute is required.

buffer_class

This is a class name for the buffer subclass you wish to use, it currently defaults to Buffer::Transactional::Buffer::String.

METHODS

begin_work

Declares the start of a transaction.

commit

Commits the current transaction.

rollback

Rollsback the current transaction.

Print to the current buffer.

txn_do ( \&body )

This is a convience wrapper around the begin_work and commit methods. It takes a CODE ref and will execute it within the context of a transaction. It does not attempt to handle exceptions, rollbacks or anything of the like, it simply wraps the transaction.

SEE ALSO

OCamlnet - http://projects.camlcity.org/projects/ocamlnet.html

BUGS

All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT.

AUTHOR

Stevan Little <stevan.little@iinteractive.com>

COPYRIGHT AND LICENSE

Copyright 2009, 2010 Infinity Interactive, Inc.

http://www.iinteractive.com

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.