package App::ArchLinux::PackagerTools::Cache; use strictures; use autodie; use Function::Parameters; use Log::Any qw($log); use CHI; use App::ArchLinux::PackagerTools::Config; =head1 NAME App::ArchLinux::PackagerTools::Cache - Caching functions =head1 SYNOPSIS use App::ArchLinux::PackagerTools::Cache; =head1 DESCRIPTION # longer description... =head1 METHODS =head2 new my $cache = App::ArchLinux::PackagerTools::Cache->new(); Returns a new instance. =cut method new($class: $context, $deps = {}) { $deps->{config} //= App::ArchLinux::PackagerTools::Config->new($context); return $class->new_no_defaults($context, $deps); } method new_no_defaults($class: $context, $deps = {}) { return $context->{$class} if defined $context->{$class}; my $self = {}; bless $self, $class; $self->{deps} = $deps; my $config = $deps->{config}->get_config(); $self->{CHI} = CHI->new( driver => 'File', root_dir => $config->{cache}->{root_dir}, ); $context->{$class} = $self; return $self; } =head2 Public Methods =cut =head3 compute my $value = $cache->compute($key, $timeout, $sub); If a value exists for the cache key $key, it is returned. Otherwise, $sub is executed to compute the value and it is stored in the cache with the specified timeout. =cut method compute($key, $timeout, $sub) { return $self->{CHI}->compute($key, $timeout, $sub); } 1; __END__