2 use lib '/Users/stevan/CPAN/Class-MOP/Class-MOP/lib';
11 use Scalar::Util 'blessed';
13 use Sub::Name 'subname';
15 use Moose::Meta::Class;
16 use Moose::Meta::Attribute;
20 require Moose::Util::TypeConstraints;
26 Moose::Util::TypeConstraints->import($pkg);
29 if ($pkg->can('meta')) {
31 (blessed($meta) && $meta->isa('Class::MOP::Class'))
32 || confess "Whoops, not møøsey enough";
35 $meta = Moose::Meta::Class->initialize($pkg => (
36 ':attribute_metaclass' => 'Moose::Meta::Attribute'
41 # &alias_method will install the method, but it
42 # will not name it with
45 $meta->alias_method('extends' => subname 'Moose::extends' => sub { $meta->superclasses(@_) });
48 $meta->alias_method('has' => subname 'Moose::has' => sub {
49 my ($name, %options) = @_;
50 if (exists $options{is}) {
51 $options{type_constraint} = $options{is};
53 elsif (exists $options{isa}) {
54 $options{type_constraint} = Moose::Util::TypeConstraints::subtype(
55 Object => Moose::Util::TypeConstraints::where { $_->isa($options{isa}) }
58 $meta->add_attribute($name, %options)
61 # handle method modifers
62 $meta->alias_method('before' => subname 'Moose::before' => sub {
64 $meta->add_before_method_modifier($_, $code) for @_;
66 $meta->alias_method('after' => subname 'Moose::after' => sub {
68 $meta->add_after_method_modifier($_, $code) for @_;
70 $meta->alias_method('around' => subname 'Moose::around' => sub {
72 $meta->add_around_method_modifier($_, $code) for @_;
75 # make sure they inherit from Moose::Object
76 $meta->superclasses('Moose::Object')
77 unless $meta->superclasses();
79 # we recommend using these things
80 # so export them for them
81 $meta->alias_method('confess' => \&confess);
82 $meta->alias_method('blessed' => \&blessed);
101 Makes Other Object Systems Envious
103 Most Other Objects Suck Eggs
105 Makes Object Orientation So Easy
107 Metacircular Object Oriented Systems Environment
111 All complex software has bugs lurking in it, and this module is no
112 exception. If you find a bug please either email me, or add the bug
117 I use L<Devel::Cover> to test the code coverage of my tests, below is the
118 L<Devel::Cover> report on this module's test suite.
120 =head1 ACKNOWLEDGEMENTS
124 Stevan Little E<lt>stevan@iinteractive.comE<gt>
126 =head1 COPYRIGHT AND LICENSE
128 Copyright 2006 by Infinity Interactive, Inc.
130 L<http://www.iinteractive.com>
132 This library is free software; you can redistribute it and/or modify
133 it under the same terms as Perl itself.