DESCRIPTION

MooseX::NonMoose allows for easily subclassing non-Moose classes with Moose, taking care of the annoying details connected with doing this, such as setting up proper inheritance from Moose::Object and installing (and inlining, at make_immutable time) a constructor that makes sure things like BUILD methods are called. It tries to be as non-intrusive as possible - when this module is used, inheriting from non-Moose classes and inheriting from Moose classes should work identically, aside from the few caveats mentioned below. One of the goals of this module is that including it in a Moose::Exporter-based package used across an entire application should be possible, without interfering with classes that only inherit from Moose modules, or even classes that don't inherit from anything at all.

MooseX::NonMoose allows you to manipulate the argument list that gets passed to the superclass constructor by defining a FOREIGNBUILDARGS method. This is called with the same argument list as the BUILDARGS method, but should return a list of arguments to pass to the superclass constructor. This allows MooseX::NonMoose to support superclasses whose constructors would get confused by the extra arguments that Moose requires (for attributes, etc.)

TODO

Allow for constructors with names other than new.

BUGS/CAVEATS

The reference that the non-Moose class uses as its instance type must match the instance type that Moose is using. Moose's default instance type is a hashref, but other modules exist to make Moose use other instance types. MooseX::InsideOut is the most general solution - it should work with any class. For globref-based classes in particular, MooseX::GlobRef will also allow Moose to work. For more information, see the 032-moosex-insideout and 033-moosex-globref tests bundled with this dist.

Completely overriding the constructor in a class using MooseX::NonMoose (i.e. using sub new { ... }) currently doesn't work, although using method modifiers on the constructor should work identically to normal Moose classes.

MooseX::NonMoose currently assumes in several places that the superclass constructor will be called new. This may be made configurable in the future.