The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Plack::ResponseHelper::Attachment;
use strict;
use warnings;

use Plack::Response;


sub helper {
    my $init = shift;
    my $content_type = $init && $init->{content_type} || 'application/octet-stream';

    return sub {
        my $r = shift;

        my $response = Plack::Response->new(200);
        $response->headers(
            [
                'Content-Type' => $content_type,
                'Content-Disposition' => qq[attachment; filename="$r->{filename}"],
            ],
        );
        $response->body($r->{data});
        return $response;
    };
}

1;

__END__

=head1 NAME

Plack::ResponseHelper::Attachment

=head1 SYNOPSIS

    use Plack::ResponseHelper pdf => [Attachment => {content_type => 'application/pdf'}];
    respond pdf => {filename => 'report.pdf', data => $report};

=head1 SEE ALSO

Plack::ResponseHelper

=cut