Please find this module at 
http://github.com/jhallock/MooseX-DBI/tree/master#<http://github.com/jhallock/MooseX-DBI/tree/master>
 (for now).
I'm just looking for some feedback before I send this off to CPAN.

It is a module that works with DBI to store and retrieve objects from a 
database.  When storing objects have objects that implement MooseX::DBI as 
attributes - the value is stored is the primary key of the object. When 
restoring objects from the database - the opposite is true, MooseX::DBI will 
load the object data from the database and instantiate it.

It is also possible to specify custom inflators and deflators for other kinds 
of objects and data types.

subtype 'My.Date'
      => from 'DateTime';

inflate 'My.Date'
      => via { DateTime::Format::SQLite->parse($_) };

deflate 'My.Date'
      => via { $_->ymd };

has 'date_attribute' (
      is  => 'rw',
      isa => 'My.Date'
);



I'm not stuck on the inflate and deflate methods as the sugar to perform the 
flattening/instantiation.  It's seems appropriate to change them to something 
else, to keep the inflate and deflate words open for use in a serialization 
module - where inflate would create an object from a stored format, and deflate 
would turn an object into a particular format.

Originally when I started making this module - It was an extension on to 
MoooseX::Storage which is a serialization package. I then moved to making it 
part of a new serialization package MooseX::Serialize because of some 
limitations in the MooseX::Storage design (namely, I wanted to be able to use 
multiple engines at once - what if someone wanted to primarily serialize to a 
DBI, but would also like to create XML files to send out).

So once I had MooseX::Serialize and MooseX::Serialize::DBI in the works inflate 
and deflate came into play - and their role was to serialize/restore a data 
structure/object from a specified format, where to be used more like this:

inflate 'My.Date'
      => via { date_obect_from_xml_string($_) }
      => from 'XML';

inflate 'My.Date'
      => via { DateTime::Format::SQLite->parse($_) }
      => from 'DBI';

deflate 'My.Date'
      => via { date_object_to_xml_string($_) }
      => from 'XML';

deflate 'My.Date'
      => via { $_->ymd }
      => from 'DBI';

So, then I abandoned the idea of creating another serialization package for a 
couple of reasons:
1.       One already existed
2.       It was beyond the scope of what I really wanted to do, which is a 
package to serialize/to from a DBI object
3.       By using MooseX::DBI and MooseX::Storage - one can serialize the same 
object to a database and another format
4.
So that is where inflate and deflate come from - should I change them, if so, 
what to?


Also, please feel from to comment on any part of the module - I would like to 
hear some feedback and make any significant changes before the first release on 
CPAN - I don't want to be stuck with something later because it wasn't thought 
through now. Please feel free to write test cases as well as suggest features.


Thank you fellow Moosers!

-Jeffrey Hallock

Reply via email to