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]/

Reply via email to