SPOPSx::Tool::DateTime - SPOPS extension for arbitrarily formatted DateTime fields


SPOPSx-Tool-DateTime documentation Contained in the SPOPSx-Tool-DateTime distribution.

Index


Code Index:

NAME

Top

SPOPSx::Tool::DateTime - SPOPS extension for arbitrarily formatted DateTime fields

SYNOPSIS

Top

  %conf = (
      table_alias => {
          # ...
          datetime_format => {
              atime => 'DateTime::Format::MySQL',
              mtime => 'DateTime::Format::Baby',
              ctime => DateTime::Format::Strptime->new(pattern => '%D %T'),
          },
          # ...
      }
  );

DESCRIPTION

Top

This module allows for DateTime objects to be stored to and loaded from a database field. This module differs from the SPOPS::Tool::DateConvert tool that is distributed with SPOPS in that it allows for the use of arbitrary DateTime format objects. (See http://datetime.perl.org/ for details on DateTime and formatting.)

INSTALLATION

Top

Typical:

  perl Build.PL
  ./Build
  ./Build test
  ./Build install

or:

  perl Makefile.PL
  make
  make test
  make install

SEE ALSO

Top

SPOPS, DateTime, http://datetime.perl.org/, SPOPS::Tool::DateConvert

AUTHOR

Top

Andrew Sterling Hanenkamp, <hanenkamp@users.sourceforge.net>

COPYRIGHT AND LICENSE

Top


SPOPSx-Tool-DateTime documentation Contained in the SPOPSx-Tool-DateTime distribution.
package SPOPSx::Tool::DateTime;

use strict;
use warnings;

use Log::Log4perl;
my $log = Log::Log4perl->get_logger(__PACKAGE__);

our $VERSION = '0.02';

sub ruleset_factory {
	my ($class, $rstab) = @_;
	push @{ $rstab->{post_fetch_action} }, \&convert_to_date;
	push @{ $rstab->{pre_save_action} }, \&convert_to_string;
	push @{ $rstab->{post_save_action} }, \&convert_to_date;
	$log->is_info &&
		$log->info("DateTime ruleset added post_fetch, pre/post_save rules to [$class]");
	return __PACKAGE__;
}

sub _require_format {
	my $class = shift;
	my $format = shift;
	$format =~ /^[\w:]+$/ 
		or die "Bad format package $format for $class.";
	eval "require $format";
	warn "Possible error including $format: $@" if $@;
	$log->is_info &&
		$log->info("DateTime ruleset required $format.");
}

sub convert_to_date {
	my $self = shift;
	my $config = $self->CONFIG;

	while (my ($field, $format) = each %{ $config->{datetime_format} }) {
		defined $self->{$field} or next;

		$log->debug("Converting $self->{$field} to datetime.");

		unless (ref $format) {
			_require_format($config->{class}, $format);
			$config->{datetime_format}{$field} = $format = $format->new;
		}
		
		$self->{$field} = $format->parse_datetime($self->{$field});
	}

	return __PACKAGE__;
}

sub convert_to_string {
	my $self = shift;
	my $config = $self->CONFIG;

	while (my ($field, $format) = each %{ $config->{datetime_format} }) {
		defined $self->{$field} or next;

		$log->debug("Converting $self->{$field} to string.");

		unless (ref $format) {
			_require_format($config->{class}, $format);
			$config->{datetime_format}{$field} = $format = $format->new;
		}
	
		$self->{$field} = $format->format_datetime($self->{$field});
	}

	return __PACKAGE__;
}

1