Add Catalyst::Component::ContextClosure.
Florian Ragwitz [Fri, 26 Jun 2009 17:11:08 +0000 (17:11 +0000)]
Makefile.PL
lib/Catalyst/Component/ContextClosure.pm [new file with mode: 0644]

index 71898e1..8279a91 100644 (file)
@@ -5,6 +5,7 @@ perl_version '5.008001';
 name 'Catalyst-Runtime';
 all_from 'lib/Catalyst/Runtime.pm';
 
+requires 'namespace::autoclean';
 requires 'namespace::clean';
 requires 'B::Hooks::EndOfScope' => '0.08';
 requires 'MooseX::Emulate::Class::Accessor::Fast' => '0.00801';
@@ -32,6 +33,7 @@ requires 'Time::HiRes';
 requires 'Tree::Simple' => '1.15';
 requires 'Tree::Simple::Visitor::FindByPath';
 requires 'URI' => '1.35';
+requires 'Task::Weaken';
 requires 'Text::Balanced'; # core in 5.8.x but mentioned for completeness
 requires 'MRO::Compat';
 requires 'String::RewritePrefix' => '0.004'; # Catalyst::Utils::resolve_namespace
diff --git a/lib/Catalyst/Component/ContextClosure.pm b/lib/Catalyst/Component/ContextClosure.pm
new file mode 100644 (file)
index 0000000..0aaf8bf
--- /dev/null
@@ -0,0 +1,14 @@
+package Catalyst::Component::ContextClosure;
+
+use Moose::Role;
+use Scalar::Util 'weaken';
+use namespace::autoclean;
+
+sub make_context_closure {
+    my ($self, $closure, $ctx) = @_;
+    my $weak_ctx = $ctx;
+    weaken $ctx;
+    return sub { $closure->($ctx, @_) };
+}
+
+1;