NAME

Mojolicious::Plugin::AssetPack::Pipe - Base class for a pipe

SYNOPSIS

Write a custom pipe

sub process {
my ($self, $assets) = @_;
# Normally a Mojolicious::Plugin::AssetPack::Store object
my $store = $self->assetpack->store;
# Loop over Mojolicious::Plugin::AssetPack::Asset objects
$assets->each(
sub {
my ($asset, $index) = @_;
# Skip every file that is not css
return if $asset->format ne "css";
# Change $attr if this pipe will modify $asset attributes
my $attr = $asset->TO_JSON;
my $content = $asset->content;
# Private name to load/save meta data under
$attr->{key} = "coolpipe";
# Return asset if already processed
if ($content !~ /white/ and $file = $store->load($attr)) {
return $asset->content($file);
}
# Process asset content
diag q(Replace white with red in "%s".), $asset->url if DEBUG;
$content =~ s!white!red!g;
$asset->content($store->save(\$content, $attr))->minified(1);
}
);
}

Use the custom pipe

plugin AssetPack => {pipes => [qw(MyApp::MyCoolPipe Css)]};

Note that the above will not load the other default pipes, such as Mojolicious::Plugin::AssetPack::Pipe::JavaScript.

DESCRIPTION

This is the base class for all pipe classes.

ATTRIBUTES

assetpack

$obj = $self->assetpack;

Holds a Mojolicious::Plugin::AssetPack object.

topic

$str = $self->topic;
$self = $self->topic("app.css");

Returns the name of the current asset topic.

METHODS

after_process

$self->after_process(Mojo::Collection->new);

"process" in Mojolicious::Plugin::AssetPack will call this method before any of the pipe "process" method is called.

Note that this method is not defined in Mojolicious::Plugin::AssetPack::Pipe!

app

$obh = $self->app;

Returns the Mojolicious application object.

before_process

$self->before_process(Mojo::Collection->new);

"process" in Mojolicious::Plugin::AssetPack will call this method after all of the pipes "process" method is called.

Note that this method is not defined in Mojolicious::Plugin::AssetPack::Pipe!

process

$self->process(Mojo::Collection->new);

A method used to process the assets. Each of the element in the collection will be a Mojolicious::Plugin::AssetPack::Asset object or an object with the same API.

This method need to be defined in the subclass.

run

$self->run([som_app => @args], \$stdin, \$stdout, ...);

See "run3" in IPC::Run3 for details about the arguments. This method will try to call _install_some_app() unless "som_app" was found in PATH. This method could then try to install the application and must return the path to the installed application.

SEE ALSO