package File::Assets::Bucket;
use warnings;
use strict;
use Object::Tiny qw/kind assets/;
sub new {
my $self = bless {}, shift;
$self->{kind} = my $kind = shift;
$self->{assets} = my $assets = shift;
$self->{slice} = [];
$self->{filters} = [];
return $self;
}
sub add_asset {
my $self = shift;
my $asset = shift;
push @{ $self->{slice} }, $asset;
}
sub add_filter {
my $self = shift;
my $filter = shift;
my $signature = $filter->signature;
my $filters = $self->{filters};
if (defined $signature) {
for my $entry (@$filters) {
if (defined $entry->[0] && $entry->[0] eq $signature) {
$entry->[1] = $filter;
return;
}
}
}
push @$filters, [ $signature, $filter ];
}
sub exports {
my $self = shift;
my @assets = $self->all;
my $filters = $self->{filters};
for my $entry (@$filters) {
$entry->[1]->filter(\@assets, $self, $self->assets);
}
return @assets;
}
sub clear {
my $self = shift;
$self->{slice} = [];
$self->{filters} = {};
}
sub all {
my $self = shift;
return @{ $self->{slice} };
}
1;