From 72dce79a74ebcca5f6c74ed1b6204cdf06931fbe Mon Sep 17 00:00:00 2001 From: doy Date: Tue, 7 Apr 2009 22:01:13 -0500 Subject: initial implementation --- lib/MooseX/NonMoose.pm | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 lib/MooseX/NonMoose.pm (limited to 'lib/MooseX/NonMoose.pm') 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; -- cgit v1.2.3-54-g00ecf