So everybody probably saw my confusion with inflation from yesterday,
and while it is all working now (thanks Claco!) I have to admit I
still find the behavior counter-intuitive at best. I guess when I
was just inflating DateTime objects it made more sense, since the
inflated values were so much more complex than the representation
that was stored in the database, but when I started using
DBIx::Class::InflateColumn::Currency, it seemed odd to me that
'$10.00' would be inflated to a Data::Currency object if it came from
the database, but not if it came from the user. I've fixed this for
my immediate need by writing an HTML::FormFu::Inflator subclass that
parallels DBIx::Class::InflateColumn::Currency, but going forward I'd
like to avoid repeating so much code, so I've come up with an idea to
extend DBIx::Class::InflateColumn to allow user-provided values to be
inflated the same way that database values are.
My initial idea is to simply add another key to the inflate_column
method that would provide a method for determining if the supplied
value could be inflated or not, something along these lines:
__PACKAGE__->inflate_column(
'cost',
inflate => sub {
my ( $value, $obj ) = @_;
return Data::Currency->new( $value, 'USD' );
},
deflate => sub {
my ( $obj ) = @_;
return $obj->value;
},
check => sub {
my ( $value ) = @_;
if ( $value =~ /^\s*\$/ || $value =~ / USD$/ ) { return 1 }
return 0;
},
);
Then when you do something like this:
$obj->cost( '$10.00' );
The check method would be run to determine if the value supplied
should be inflated or not, and the inflator then run as needed on the
value.
I haven't written any code to do this yet, although I have a pretty
good idea where to start, I wanted to see what people thought about
the concept first...
--
Jason Kohles
[EMAIL PROTECTED]
http://www.jasonkohles.com/
"A witty saying proves nothing." -- Voltaire
_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/