use Mojolicious::Plugin::AssetPack::Util qw(diag load_module DEBUG);
has app => 'jpegoptim';
has app_args => sub {
my $self = shift;
return [DEBUG ? ('-v') : ('-q'), qw(-f --stdin --stdout)] if $self->app eq 'jpegoptim';
return [];
};
sub process {
my ($self, $assets) = @_;
my $store = $self->assetpack->store;
my $file;
return $assets->each(
sub {
my ($asset, $index) = @_;
my $attrs = $asset->TO_JSON;
$attrs->{key} = sprintf '%s-min', $self->app;
$attrs->{minified} = 1;
return if $asset->format !~ /^jpe?g$/ or $asset->minified;
return unless $self->assetpack->minify;
return $asset->content($file)->minified(1) if $file = $store->load($attrs);
diag 'Process "%s", with checksum %s.', $asset->url, $attrs->{checksum} if DEBUG;
$asset->content($store->save($self->_run_app($asset), $attrs))->FROM_JSON($attrs);
}
);
}
sub _install_jpegoptim {
my $self = shift;
my $class = ref $self;
die "$class requires https://github.com/tjko/jpegoptim";
}
1;
=encoding utf8
=head1 NAME
Mojolicious::Plugin::AssetPack::Pipe::Jpeg - Crush JPEG image files
=head1 DESCRIPTION
L<Mojolicious::Plugin::AssetPack::Pipe::Jpeg> can be used to crush "jpeg" image
files.
This pipe is EXPERIMENTAL. Feedback wanted.
=head1 ATTRIBUTES
=head2 app
$str = $self->app;
$self = $self->app("jpegoptim");
Can be used to set a custom application instead of "jpegoptim".
=head2 app_args
$array = $self->app_args;
$self = $self->app_args([qw(-f --stdin --stdout)]);
Can be used to set custom L</app> arguments. The special C<$input> string in
the argument list will be replaced with the path to a temp file holding the
image data.
If no C<$input> element is found in the L</app_args> list, then STDIN and
STDOUT will be used instead.
=head1 METHODS
=head2 process
See L<Mojolicious::Plugin::AssetPack::Pipe/process>.
=head1 SEE ALSO
L<Mojolicious::Plugin::AssetPack>.
=cut