NAME
DBIx::Class::InflateColumn::Math::Currency - Inflate and Deflate "decimal" columns into Math::Currency Objects
SYNOPSIS
package HorseTrack::Database::Schema::Result::Bet;
use base 'DBIx::Class::Core';
use strict;
use warnings;
__PACKAGE__->load_components("InflateColumn::Math::Currency");
__PACKAGE__->add_columns(
id => { data_type => 'integer' },
gambler_id => { data_type => 'integer' },
amount => { data_type => 'decimal', size => [9,2], is_currency => 1 },
);
DESCRIPTION
This module can be used to automagically inflate database columns of data type "decimal" that are flagged with "is_currency" into Math::Currency objects. It is used similiar to other InflateColumn DBIx modules.
Once your Result is properly defined you can now pass Math::Currency objects (and regular integers and floats for that matter, they need not be Math::Currency objects) into columns of data_type decimal and retrieve Math::Currency objects from these columns as well.
In the event anything other than a Math::Currency object, an integer, or a float, is provided this module will croak, stating as such.
Inflation
Inflation occurs whenever the data is being taken FROM the database. In this case the database is storing the value with data_type of decimal, upon inflation a Math::Currency object is returned from the resultset.
package HorseTrack::Bet;
use strict;
use warnings;
use Moose;
use namespace::autoclean;
use Math::Currency;
has 'id' => ( is => 'rw', isa => 'Int' );
has 'gamber_id => ( is => 'rw', isa => 'Int' );
has 'amount' => ( is => 'rw', isa => 'Math::Currency', is_currency => 1 );
sub retrieve {
my $self = shift;
my $result = $schema->resultset('...')->search({ id => 1 })->single;
my $bet = $self->new({
id => $result->id,
gamber_id => $result->gamber_id,
amount => $result->amount,
});
return $bet;
}
__PACKAGE__->meta->make_immutable();
1;
Deflation
Deflation occurs whenever the data is being taken TO the database. In this case an object of type Math::Currency is being stored into the a database columns with a data_type of "decimal". Using the same object from the Inflation example:
$schema->resultset('...')->create({
id => $self->id,
gamber_id => $self->gambler_id,
amount => $self->amount,
});
METHODS
Strictly speaking, you don't actually call any of these methods yourself. DBIx handles the magic provided you have included the InflateColumn::Math::Currency component in your Result.
Therefore, there are no public methods to be consumed.
AUTHORS
Robert Stone <drzigman AT cpan DOT org >
COPYRIGHT & LICENSE
Copyright 2013 Robert Stone
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU Lesser General Public License as published by the Free Software Foundation; or any compatible license.
See http://dev.perl.org/licenses/ for more information.