logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Catalyst::Component::ContextClosure - Moose Role for components which need to close over the $ctx,

Description

       A common problem with stashing a closure, that closes over the Catalyst context (often called $ctx or
       $c), is the circular reference it creates, as the closure holds onto a reference to context, and the
       context holds a reference to the closure in its stash. This creates a memory leak, unless you always
       carefully weaken the closures context reference.

       This role provides a convenience method to create closures, that closes over $ctx.

Methods

make_context_closure($closure,$ctx)
       Returns a code reference, that will invoke $closure with a weakened reference to $ctx. All other
       parameters to the returned code reference will be passed along to $closure.

Name

       Catalyst::Component::ContextClosure - Moose Role for components which need to close over the $ctx,
       without leaking

See Also

       Catalyst::Component

       Catalyst::Controller

       CatalystX::LeakChecker

Synopsis

           package MyApp::Controller::Foo;
           use Moose;
           use namespace::clean -except => 'meta';
           BEGIN {
               extends 'Catalyst::Controller';
               with 'Catalyst::Component::ContextClosure';
           }

           sub some_action : Local {
               my ($self, $ctx) = @_;
               $ctx->stash(a_closure => $self->make_context_closure(sub {
                   my ($ctx) = @_;
                   $ctx->response->body('body set from closure');
               }, $ctx));
           }

See Also