diff options
author | doy <doy@tozt.net> | 2009-04-07 22:01:13 -0500 |
---|---|---|
committer | doy <doy@tozt.net> | 2009-04-07 22:01:13 -0500 |
commit | 72dce79a74ebcca5f6c74ed1b6204cdf06931fbe (patch) | |
tree | af0b4c1515b64b4547d8d23225772c222b9d7739 /lib/MooseX/NonMoose.pm | |
download | moosex-nonmoose-72dce79a74ebcca5f6c74ed1b6204cdf06931fbe.tar.gz moosex-nonmoose-72dce79a74ebcca5f6c74ed1b6204cdf06931fbe.zip |
initial implementation
Diffstat (limited to 'lib/MooseX/NonMoose.pm')
-rw-r--r-- | lib/MooseX/NonMoose.pm | 26 |
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; |