/usr/share/perl5/MooseX/NonMoose.pm is in libmoosex-nonmoose-perl 0.26-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | package MooseX::NonMoose;
BEGIN {
$MooseX::NonMoose::AUTHORITY = 'cpan:DOY';
}
{
$MooseX::NonMoose::VERSION = '0.26';
}
use Moose::Exporter;
use Moose::Util;
# ABSTRACT: easy subclassing of non-Moose classes
my ($import, $unimport, $init_meta) = Moose::Exporter->build_import_methods(
class_metaroles => {
class => ['MooseX::NonMoose::Meta::Role::Class'],
constructor => ['MooseX::NonMoose::Meta::Role::Constructor'],
},
install => [qw(import unimport)],
);
sub init_meta {
my $package = shift;
my %options = @_;
my $meta = Moose::Util::find_meta($options{for_class});
Carp::cluck('Roles have no use for MooseX::NonMoose')
if $meta && $meta->isa('Moose::Meta::Role');
$package->$init_meta(@_);
}
1;
__END__
=pod
=head1 NAME
MooseX::NonMoose - easy subclassing of non-Moose classes
=head1 VERSION
version 0.26
=head1 SYNOPSIS
package Term::VT102::NBased;
use Moose;
use MooseX::NonMoose;
extends 'Term::VT102';
has [qw/x_base y_base/] => (
is => 'ro',
isa => 'Int',
default => 1,
);
around x => sub {
my $orig = shift;
my $self = shift;
$self->$orig(@_) + $self->x_base - 1;
};
# ... (wrap other methods)
no Moose;
# no need to fiddle with inline_constructor here
__PACKAGE__->meta->make_immutable;
my $vt = Term::VT102::NBased->new(x_base => 0, y_base => 0);
=head1 DESCRIPTION
C<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 L<Moose::Object> and installing (and inlining, at
C<make_immutable> time) a constructor that makes sure things like C<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
L<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.
There are several ways to use this module. The most straightforward is to just
C<use MooseX::NonMoose;> in your class; this should set up everything necessary
for extending non-Moose modules. L<MooseX::NonMoose::Meta::Role::Class> and
L<MooseX::NonMoose::Meta::Role::Constructor> can also be applied to your
metaclasses manually, either by passing a C<-traits> option to your C<use
Moose;> line, or by applying them using L<Moose::Util::MetaRole> in a
L<Moose::Exporter>-based package. L<MooseX::NonMoose::Meta::Role::Class> is the
part that provides the main functionality of this module; if you don't care
about inlining, this is all you need to worry about. Applying
L<MooseX::NonMoose::Meta::Role::Constructor> as well will provide an inlined
constructor when you immutabilize your class.
C<MooseX::NonMoose> allows you to manipulate the argument list that gets passed
to the superclass constructor by defining a C<FOREIGNBUILDARGS> method. This is
called with the same argument list as the C<BUILDARGS> method, but should
return a list of arguments to pass to the superclass constructor. This allows
C<MooseX::NonMoose> to support superclasses whose constructors would get
confused by the extra arguments that Moose requires (for attributes, etc.)
Not all non-Moose classes use C<new> as the name of their constructor. This
module allows you to extend these classes by explicitly stating which method is
the constructor, during the call to C<extends>. The syntax looks like this:
extends 'Foo' => { -constructor_name => 'create' };
similar to how you can already pass C<-version> in the C<extends> call in a
similar way.
=head1 BUGS/CAVEATS
=over 4
=item * The reference that the non-Moose class uses as its instance type
B<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. L<MooseX::InsideOut> is the most general solution - it should work with
any class. For globref-based classes in particular, L<MooseX::GlobRef> will
also allow Moose to work. For more information, see the C<032-moosex-insideout>
and C<033-moosex-globref> tests bundled with this dist.
=item * Modifying your class' C<@ISA> after an initial C<extends> call will potentially
cause problems if any of those new entries in the C<@ISA> override the constructor.
C<MooseX::NonMoose> wraps the nearest C<new()> method at the time C<extends>
is called and will not see any other C<new()> methods in the @ISA hierarchy.
=item * Completely overriding the constructor in a class using
C<MooseX::NonMoose> (i.e. using C<sub new { ... }>) currently doesn't work,
although using method modifiers on the constructor should work identically to
normal Moose classes.
=back
Please report any bugs to GitHub Issues at
L<https://github.com/doy/moosex-nonmoose/issues>.
=head1 SEE ALSO
=over 4
=item * L<Moose::Manual::FAQ/How do I make non-Moose constructors work with Moose?>
=item * L<MooseX::Alien>
serves the same purpose, but with a radically different (and far more hackish)
implementation.
=back
=head1 SUPPORT
You can find this documentation for this module with the perldoc command.
perldoc MooseX::NonMoose
You can also look for information at:
=over 4
=item * MetaCPAN
L<https://metacpan.org/release/MooseX-NonMoose>
=item * Github
L<https://github.com/doy/moosex-nonmoose>
=item * RT: CPAN's request tracker
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=MooseX-NonMoose>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MooseX-NonMoose>
=back
=for Pod::Coverage init_meta
=head1 AUTHOR
Jesse Luehrs <doy@tozt.net>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Jesse Luehrs.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|