package Perlanet::Trait::Cache;

use 5.10.0;
use strict;
use warnings;

use Moose::Role;
use namespace::autoclean;

=head1 NAME

Perlanet::Trait::Cache - cache feeds with CHI

=head1 SYNOPSIS

   my $perlanet = Perlanet->new_with_traits(
      traits => [ 'Perlanet::Trait::Cache' ]
   );

   $perlanet->run;

=head1 DESCRIPTION

Every time a page is fetched it is cached first through CHI. This allows you
to cache pages to a local disk for example, if the feed has not changed.

=head1 ATTRIBUTES

=head2 cache

The L<Chi> cache object

=cut

has 'cache'=> (
  is => 'ro'
);

around 'fetch_feed' => sub {
  my $orig = shift;
  my $self = shift;
  my ($url) = @_;
  return URI::Fetch->fetch(
    $url,
    UserAgent     => $self->ua,
    Cache         => $self->cache || undef,
    ForceResponse => 1,
  );
};

=head1 AUTHOR

Dave Cross, <dave@perlhacks.com>

=head1 COPYRIGHT AND LICENSE

Copyright (c) 2010 by Magnum Solutions Ltd.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.10.0 or,
at your option, any later version of Perl 5 you may have available.

=cut

1;
