X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FInflateColumn%2FDateTime.pm;h=df92390e763010e3a67a8f254c8785867c0128a9;hb=f011970e615a6a365688593c851a61d0a1fa1a31;hp=72c88447f68e75f97734b13ddb321df813255538;hpb=445e5e31324c54ce3ffe96199e4e308efaa0823e;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/InflateColumn/DateTime.pm b/lib/DBIx/Class/InflateColumn/DateTime.pm index 72c8844..df92390 100644 --- a/lib/DBIx/Class/InflateColumn/DateTime.pm +++ b/lib/DBIx/Class/InflateColumn/DateTime.pm @@ -4,24 +4,69 @@ use strict; use warnings; use base qw/DBIx::Class/; +=head1 NAME + +DBIx::Class::InflateColumn::DateTime - Auto-create DateTime objects from date and datetime columns. + +=head1 SYNOPSIS + +Load this component and then declare one or more +columns to be of the datetime, timestamp or date datatype. + + package Event; + __PACKAGE__->load_components(qw/InflateColumn::DateTime Core/); + __PACKAGE__->add_columns( + starts_when => { data_type => 'datetime' } + ); + +Then you can treat the specified column as a L object. + + print "This event starts the month of ". + $event->starts_when->month_name(); + +=head1 DESCRIPTION + +This module figures out the type of DateTime::Format::* class to +inflate/deflate with based on the type of DBIx::Class::Storage::DBI::* +that you are using. If you switch from one database to a different +one your code should continue to work without modification (though note +that this feature is new as of 0.07, so it may not be perfect yet - bug +reports to the list very much welcome). + +For more help with using components, see L. + +=cut + __PACKAGE__->load_components(qw/InflateColumn/); __PACKAGE__->mk_group_accessors('simple' => '__datetime_parser'); +=head2 register_column + +Chains with the L method, and sets +up datetime columns appropriately. This would not normally be +directly called by end users. + +=cut + sub register_column { my ($self, $column, $info, @rest) = @_; $self->next::method($column, $info, @rest); - if ($info->{data_type} =~ /^datetime$/i) { + return unless defined($info->{data_type}); + my $type = lc($info->{data_type}); + $type = 'datetime' if ($type =~ /^timestamp/); + if ($type eq 'datetime' || $type eq 'date') { + my ($parse, $format) = ("parse_${type}", "format_${type}"); $self->inflate_column( $column => { inflate => sub { my ($value, $obj) = @_; - $obj->_datetime_parser->parse_datetime($value); + $obj->_datetime_parser->$parse($value); }, deflate => sub { my ($value, $obj) = @_; - $obj->_datetime_parser->format_datetime($value); + $obj->_datetime_parser->$format($value); }, } ); @@ -38,3 +83,26 @@ sub _datetime_parser { } 1; +__END__ + +=head1 SEE ALSO + +=over 4 + +=item More information about the add_columns method, and column metadata, + can be found in the documentation for L. + +=back + +=head1 AUTHOR + +Matt S. Trout + +=head1 CONTRIBUTORS + +Aran Deltac + +=head1 LICENSE + +You may distribute this code under the same terms as Perl itself. +