2 use lib '/Users/stevan/CPAN/Class-MOP/Class-MOP/lib';
11 use Scalar::Util 'blessed', 'reftype';
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 if ($options{is} eq 'ro') {
52 $options{reader} = $name;
54 elsif ($options{is} eq 'rw') {
55 $options{accessor} = $name;
58 if (exists $options{isa}) {
59 if (reftype($options{isa}) && reftype($options{isa}) eq 'CODE') {
60 $options{type_constraint} = $options{isa};
63 $options{type_constraint} = Moose::Util::TypeConstraints::subtype(
64 Object => Moose::Util::TypeConstraints::where { $_->isa($options{isa}) }
68 $meta->add_attribute($name, %options)
71 # handle method modifers
72 $meta->alias_method('before' => subname 'Moose::before' => sub {
74 $meta->add_before_method_modifier($_, $code) for @_;
76 $meta->alias_method('after' => subname 'Moose::after' => sub {
78 $meta->add_after_method_modifier($_, $code) for @_;
80 $meta->alias_method('around' => subname 'Moose::around' => sub {
82 $meta->add_around_method_modifier($_, $code) for @_;
85 # make sure they inherit from Moose::Object
86 $meta->superclasses('Moose::Object')
87 unless $meta->superclasses();
89 # we recommend using these things
90 # so export them for them
91 $meta->alias_method('confess' => \&confess);
92 $meta->alias_method('blessed' => \&blessed);
111 Makes Other Object Systems Envious
113 Most Other Objects Suck Eggs
115 Makes Object Orientation So Easy
117 Metacircular Object Oriented Systems Environment
121 All complex software has bugs lurking in it, and this module is no
122 exception. If you find a bug please either email me, or add the bug
127 I use L<Devel::Cover> to test the code coverage of my tests, below is the
128 L<Devel::Cover> report on this module's test suite.
130 =head1 ACKNOWLEDGEMENTS
134 Stevan Little E<lt>stevan@iinteractive.comE<gt>
136 =head1 COPYRIGHT AND LICENSE
138 Copyright 2006 by Infinity Interactive, Inc.
140 L<http://www.iinteractive.com>
142 This library is free software; you can redistribute it and/or modify
143 it under the same terms as Perl itself.