summaryrefslogtreecommitdiffstats
path: root/lib/MooseX/NonMoose.pm
diff options
context:
space:
mode:
authordoy <doy@tozt.net>2009-04-07 22:01:13 -0500
committerdoy <doy@tozt.net>2009-04-07 22:01:13 -0500
commit72dce79a74ebcca5f6c74ed1b6204cdf06931fbe (patch)
treeaf0b4c1515b64b4547d8d23225772c222b9d7739 /lib/MooseX/NonMoose.pm
downloadmoosex-nonmoose-72dce79a74ebcca5f6c74ed1b6204cdf06931fbe.tar.gz
moosex-nonmoose-72dce79a74ebcca5f6c74ed1b6204cdf06931fbe.zip
initial implementation
Diffstat (limited to 'lib/MooseX/NonMoose.pm')
-rw-r--r--lib/MooseX/NonMoose.pm26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/MooseX/NonMoose.pm b/lib/MooseX/NonMoose.pm
new file mode 100644
index 0000000..d60a996
--- /dev/null
+++ b/lib/MooseX/NonMoose.pm
@@ -0,0 +1,26 @@
+package MooseX::NonMoose;
+use Moose ();
+use Moose::Exporter;
+
+Moose::Exporter->setup_import_methods(
+ with_caller => ['extends_nonmoose'],
+);
+
+sub extends_nonmoose {
+ my $caller = shift;
+ my @superclasses = (@_, 'Moose::Object');
+ Moose::extends($caller, @superclasses);
+ Class::MOP::Class->initialize($caller)->add_method(new => sub {
+ my $class = shift;
+ my $self = $class->SUPER::new(@_);
+ my $params = $class->BUILDARGS(@_);
+ my $moose_self = Class::MOP::Class->initialize($class)->new_object(
+ __INSTANCE__ => $self,
+ %$params,
+ );
+ $moose_self->BUILDALL($params);
+ return $moose_self;
+ });
+}
+
+1;