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;