my $pid = fork;
next if $pid;
- my $handler = $self->_get_handler($file_or_uri);
+ my $handler = $self->_get_handler($options, $file_or_uri);
$handler->($file_or_uri) if $handler;
return;
}
} else {
for my $file_or_uri (@_) {
- my $handler = $self->_get_handler($file_or_uri);
+ my $handler = $self->_get_handler($options, $file_or_uri);
$handler->($file_or_uri) if $handler;
}
}
my ($groups, $handlers) = ({}, {});
for my $file_or_uri (@_) {
- my $handler = $self->_get_handler($file_or_uri);
+ my $handler = $self->_get_handler($options, $file_or_uri);
if ($handler) {
$groups->{"$handler"} //= [];
push @{ $groups->{"$handler"} }, $file_or_uri;
return if $pid;
}
- my $handler = $self->_get_handler($_[0]);
+ my $handler = $self->_get_handler($options, $_[0]);
$handler->(@_) if $handler;
}
sub _get_handler {
my $self = shift;
+ my $options = shift;
my $file_or_uri = $_[0] =~ m|^file://(.+)| ? $1 : $_[0];
my $mime_or_uri = -e $file_or_uri ? $self->{mime_query}->($file_or_uri) : $file_or_uri;
for my $pattern (@{ $target->{patterns} }) {
if ($mime_or_uri =~ /$pattern/) {
my $associations = $target->{associations};
+
+ my $context = $options->{context};
+ my $handler = $associations->{$context} if $context;
+ return $handler if defined $handler;
+
for my $context (keys %{ $associations }) {
if ($self->{contexts}->{$context}->()) {
return $associations->{$context};
use App::Fey qw(fey);
my $options = {
+ context => undef,
fork => 0,
group => 0,
single => 0
};
GetOptions(
+ 'c|context:s' => \$options->{context},
'f|fork' => \$options->{fork},
'g|group' => \$options->{group},
's|single' => \$options->{single}