From 73955dd901bcc008b22315bc327bf0fa7787394e Mon Sep 17 00:00:00 2001 From: dakkar Date: Sun, 9 Dec 2012 12:53:10 +0000 Subject: fix datetime --- feeder.pl | 2 +- lib/Feed.pm | 2 ++ lib/Feed/FixDateTime.pm | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 lib/Feed/FixDateTime.pm diff --git a/feeder.pl b/feeder.pl index 61f73be..0b4dd72 100644 --- a/feeder.pl +++ b/feeder.pl @@ -4,7 +4,7 @@ use warnings; use 5.016; use Feed; -my $feed_class = Feed->with_traits('Feed::Printer'); +my $feed_class = Feed->with_traits('FixDateTime','Printer'); sub feed { my (%args) = @_; my $feed = $feed_class->new(%args); diff --git a/lib/Feed.pm b/lib/Feed.pm index d8c67a8..d1bb7df 100644 --- a/lib/Feed.pm +++ b/lib/Feed.pm @@ -6,6 +6,8 @@ use MooseX::Types::URI 'Uri'; with 'MooseX::Traits'; use XML::Feed; +has '+_trait_namespace' => ( default => __PACKAGE__ ); + has uri => ( is => 'ro', isa => Uri, diff --git a/lib/Feed/FixDateTime.pm b/lib/Feed/FixDateTime.pm new file mode 100644 index 0000000..f9ebe73 --- /dev/null +++ b/lib/Feed/FixDateTime.pm @@ -0,0 +1,25 @@ +package Feed::FixDateTime; +use Moose::Role; +use 5.016; +use namespace::autoclean; +use DateTime; + +requires 'process_entry'; + +before process_entry => sub { + my ($self,$entry) = @_; + + for my $f ('issued','modified') { + my $date = $entry->$f; + if (!$date) { + $date = DateTime->from_epoch(epoch=>0); + } + if ($date && $date->time_zone->is_floating) { + $date->set_time_zone('UTC'); + } + + $entry->$f($date); + } +}; + +1; -- cgit v1.2.3