Ark
    
    
  
  
  
view release on metacpan or search on metacpan
lib/Ark/Context.pm view on Meta::CPAN
    my $self = shift;
    my $match = $self->request->match;
    if ($match) {
        $self->dispatch_private_action('begin')
            and $self->dispatch_auto_action
                and $match->dispatch($self);
        $self->detached(0);
        $self->dispatch_private_action('end')
            unless $self->res->is_deferred or $self->res->is_streaming;
    }
    else {
        $self->log( error => 'no action found' );
    }
}
sub dispatch_action {
    my ($self, $name) = @_;
    my $action = ($self->router->get_actions($name, $self->req->action->namespace))[-1]
lib/Ark/Response.pm view on Meta::CPAN
has status => (
    is      => 'rw',
    default => 200,
);
has binary => (
    is      => 'rw',
    default => 0,
);
has streaming => (
    is        => 'rw',
    isa       => 'CodeRef',
    predicate => 'is_streaming',
);
has deferred => (
    is        => 'rw',
    isa       => 'CodeRef',
    predicate => 'is_deferred',
);
has deferred_response => (
    is  => 'rw',
    isa => 'CodeRef',
);
no Mouse;
sub finalize {
    my $self = shift;
    if (!$self->is_deferred && !$self->is_streaming) {
        return $self->SUPER::finalize;
    }
    my $headers = $self->headers->clone;
    $self->_finalize_cookies($headers);
    if ($self->is_deferred) {
        if (my $cb = $self->deferred_response) {
            my $body = $self->_body;
lib/Ark/Response.pm view on Meta::CPAN
        else {
            my $r = sub {
                my $respond = shift;
                $self->deferred_response($respond);
                $self->deferred->($respond);
            };
            Scalar::Util::weaken($self);
            return $r;
        }
    }
    else { # streaming
        my $response = [
            $self->status,
            +[
                map {
                    my $k = $_;
                    # steal from Plack::Response
                    map {
                        my $v = $_;
                        $v =~ s/\015\012[\040|\011]+/chr(32)/ge; # replace LWS with a single SP
                        $v =~ s/\015|\012//g; # remove CR and LF since the char is invalid here
lib/Ark/Response.pm view on Meta::CPAN
                        ( $k => $v )
                    } $headers->header($_);
                } $headers->header_field_names
            ],
        ];
        return sub {
            my $respond = shift;
            my $writer  = $respond->($response);
            $self->streaming->($writer);
        };
    }
}
__PACKAGE__->meta->make_immutable;
( run in 0.389 second using v1.01-cache-2.11-cpan-5dc5da66d9d )