package Album::Role::Storage; {
use Moose::Role;
use Perl6::Junction qw(any);
requires 'asset_info_from_path', 'items_in_source';
has source => (
is => 'ro',
required => 1,
);
has allowed_types => (
is => 'ro',
isa => 'ArrayRef[Str]',
required => 1,
auto_deref => 1,
);
sub available_assets {
my ($self) = @_;
my @assets;
foreach my $path ($self->items_in_source) {
if(my $info = $self->asset_info_from_path($path)) {
if($self->is_type_allowed($info->{mime_type})) {
push @assets, $info;
}
}
}
return @assets;
}
sub is_type_allowed {
my ($self, $type) = @_;
return any($self->allowed_types) eq $type ? 1:0;
}
}
1;