package Feed;
use Moose;
use namespace::autoclean;
use 5.016;
use MooseX::Types::URI 'Uri';
with 'MooseX::Traits';
use XML::Feed;
use Log::Log4perl;
sub log {
my ($self) = @_;
my $caller = caller();
return Log::Log4perl->get_logger($caller)
}
has '+_trait_namespace' => ( default => __PACKAGE__ );
has uri => (
is => 'ro',
isa => Uri,
coerce => 1,
required => 1,
);
has feed => (
is => 'ro',
isa => 'XML::Feed',
lazy_build => 1,
builder => 'get_feed',
);
has _entries => (
is => 'ro',
isa => 'ArrayRef[XML::Feed::Entry]',
traits => [ 'Array' ],
lazy_build => 1,
builder => 'extract_entries',
handles => {
entries => 'elements',
count_entries => 'count',
},
);
sub process {
my ($self) = @_;
$self->log->trace('process - begin');
for my $entry ($self->entries) {
$self->process_entry($entry);
}
$self->log->trace('process - end');
return;
}
sub get_feed {
my ($self) = @_;
$self->log->trace('get_feed');
return XML::Feed->parse($self->uri)
or die XML::Feed->errstr;
}
sub extract_entries {
my ($self) = @_;
$self->log->trace('extract_entries');
return [$self->feed->entries];
}
sub process_entry {
my ($self) = @_;
$self->log->trace('process_entry - stub');
}
__PACKAGE__->meta->make_immutable;
1;