CPAN-Testers-Metabase-Feed
view release on metacpan or search on metacpan
lib/CPAN/Testers/Metabase/Feed.pm view on Meta::CPAN
#
# This file is part of CPAN-Testers-Metabase-Feed
#
# This software is Copyright (c) 2010 by David Golden.
#
# This is free software, licensed under:
#
# The Apache License, Version 2.0, January 2004
#
use 5.008001;
use strict;
use warnings;
use utf8;
use autodie 2.00;
package CPAN::Testers::Metabase::Feed;
BEGIN {
$CPAN::Testers::Metabase::Feed::VERSION = '0.001';
}
# ABSTRACT: Generate Atom feed for CPAN Testers Reports
use Moose;
use MooseX::Types::ISO8601 qw/ ISO8601DateTimeStr /;
use Data::GUID;
use DateTime;
use DateTime::Format::ISO8601;
use File::Slurp qw/write_file/;
use JSON;
use Metabase::Librarian 0.013; # bug fixes on extraction
use XML::Feed;
use namespace::autoclean;
has 'ct_metabase' => (
is => 'ro',
does => 'Metabase::Gateway',
required => 1,
);
has 'since' => (
is => 'ro',
isa => ISO8601DateTimeStr,
lazy => 1,
builder => '_build_since',
);
has '_feed' => (
is => 'ro',
isa => 'XML::Feed',
lazy => 1,
builder => '_build__feed',
);
sub _build_since {
my $dt = DateTime->now;
$dt->subtract( hours => 1 );
return $dt->iso8601 . "Z";
}
sub _build__feed {
my $self = shift;
local $XML::Atom::DefaultVersion = "1.0";
my $mb = $self->ct_metabase;
my $librarian = $mb->public_librarian;
my $json = JSON->new->pretty;
my $since = $self->since;
$since =~ s/Z?$/Z/;
my $guids = $librarian->search(
'core.type' => 'CPAN-Testers-Fact-TestSummary',
'core.update_time' => { ">", $since },
-desc => 'core.update_time',
);
my $feed = XML::Feed->new('Atom');
$feed->title('CPAN Testers 2.0 Recent Submissions');
$feed->link('http://metabase.cpantesters.org/');
$feed->self_link('http://metabase.cpantesters.org/tail/recent.xml');
$feed->modified( DateTime->now() );
$feed->id( "urn:uuid:" . lc Data::GUID->new->as_string );
for my $g ( @$guids ) {
my $fact = $librarian->extract($g);
if ($fact) {
my $content = $fact->content;
my $resource = $fact->resource;
my $ts = $fact->update_time;
my $fn = $self->_creator_name( $fact->creator );
my $df = $resource->dist_file;
( run in 1.232 second using v1.01-cache-2.11-cpan-524268b4103 )