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 )