Fancy-Middleware

 view release on metacpan or  search on metacpan

lib/Fancy/Middleware.pm  view on Meta::CPAN

package Fancy::Middleware;
BEGIN {
  $Fancy::Middleware::VERSION = '1.101680';
}
use MooseX::Declare;

#ABSTRACT: Provides alternate implementation of Plack::Middleware in a Moose Role




role Fancy::Middleware
{
    use POEx::Types::PSGIServer(':all');
    use MooseX::Types::Moose(':all');


    has app => (is => 'ro', isa => CodeRef, required => 1);


    has response => (is => 'ro', isa => PSGIResponse, writer => 'set_response');

    
    has env => (is => 'ro', isa => HashRef, writer => 'set_env');


    method wrap(ClassName $class: CodeRef $app, @args)
    {
        my $self = $class->new(app => $app, @args);
        return $self->to_app;
    }


    method call(HashRef $env)
    {
        $self->set_env($env);
        $self->preinvoke();
        $self->invoke();
        $self->postinvoke();
        return $self->response;
    }


    method preinvoke()
    {
        return;
    }


    method invoke()
    {
        $self->set_response(($self->app)->($self->env));
    }


    method postinvoke()
    {
        return;
    }


    method to_app()
    {   
        return sub { $self->call(@_) };
    }
}

1;


=pod

=head1 NAME

Fancy::Middleware - Provides alternate implementation of Plack::Middleware in a Moose Role

=head1 VERSION

version 1.101680

=head1 SYNOPSIS

    use MooseX::Declare;
    



( run in 1.635 second using v1.01-cache-2.11-cpan-39bf76dae61 )