various tweaks, and refactor _instantiate_module not to use eval STRING
[gitmo/Class-MOP.git] / lib / Class / MOP / Module.pm
CommitLineData
2243a22b 1
2package Class::MOP::Module;
3
4use strict;
5use warnings;
6
4edd0667 7use Carp 'confess';
2243a22b 8use Scalar::Util 'blessed';
9
074ec38f 10our $VERSION = '0.89';
d519662a 11$VERSION = eval $VERSION;
f0480c45 12our $AUTHORITY = 'cpan:STEVAN';
2243a22b 13
14use base 'Class::MOP::Package';
15
ec9e38e5 16sub _new{
17 my $class = shift;
18 return Class::MOP::Class->initialize($class)->new_object(@_)
19 if $class ne __PACKAGE__;
20
21 my $params = @_ == 1 ? $_[0] : {@_};
22 return bless {
23 # from Class::MOP::Package
24 package => $params->{package},
25 namespace => \undef,
26
27 # attributes
28 version => \undef,
29 authority => \undef
30 } => $class;
31}
32
7f436b8c 33sub version {
34 my $self = shift;
8b49a472 35 ${$self->get_package_symbol({ sigil => '$', type => 'SCALAR', name => 'VERSION' })};
7f436b8c 36}
37
f0480c45 38sub authority {
39 my $self = shift;
8b49a472 40 ${$self->get_package_symbol({ sigil => '$', type => 'SCALAR', name => 'AUTHORITY' })};
f0480c45 41}
9d6dce77 42
f0480c45 43sub identifier {
44 my $self = shift;
45 join '-' => (
46 $self->name,
47 ($self->version || ()),
48 ($self->authority || ()),
49 );
50}
9d6dce77 51
4edd0667 52sub create {
89f66023 53 confess "The Class::MOP::Module->create method has been made a private object method.\n";
54}
4edd0667 55
89f66023 56sub _instantiate_module {
dc9c4fde 57 my($self, $version, $authority) = @_;
89f66023 58 my $package_name = $self->name;
4edd0667 59
dc9c4fde 60 Class::MOP::_is_valid_class_name($package_name)
61 || confess "creation of $package_name failed: invalid package name";
89f66023 62
dc9c4fde 63 no strict 'refs';
64 scalar %{$package_name . '::'}; # touch the stash
65 ${$package_name . '::VERSION'} = $version if defined $version;
66 ${$package_name . '::AUTHORITY'} = $authority if defined $authority;
4edd0667 67
dc9c4fde 68 return;
4edd0667 69}
70
2243a22b 711;
72
73__END__
74
75=pod
76
77=head1 NAME
78
79Class::MOP::Module - Module Meta Object
80
2243a22b 81=head1 DESCRIPTION
82
1f44239e 83A module is essentially a L<Class::MOP::Package> with metadata, in our
84case the version and authority.
127d39a7 85
121991f6 86=head1 INHERITANCE
87
1f44239e 88B<Class::MOP::Module> is a subclass of L<Class::MOP::Package>.
121991f6 89
2243a22b 90=head1 METHODS
91
92=over 4
93
1f44239e 94=item B<< $metamodule->version >>
2243a22b 95
1f44239e 96This is a read-only attribute which returns the C<$VERSION> of the
97package, if one exists.
127d39a7 98
1f44239e 99=item B<< $metamodule->authority >>
127d39a7 100
1f44239e 101This is a read-only attribute which returns the C<$AUTHORITY> of the
102package, if one exists.
127d39a7 103
1f44239e 104=item B<< $metamodule->identifier >>
7f436b8c 105
1f44239e 106This constructs a string which combines the name, version and
107authority.
b9d9fc0b 108
929e9565 109=item B<< Class::MOP::Module->meta >>
f0480c45 110
1f44239e 111This will return a L<Class::MOP::Class> instance for this class.
4edd0667 112
2243a22b 113=back
114
1a09d9cc 115=head1 AUTHORS
2243a22b 116
117Stevan Little E<lt>stevan@iinteractive.comE<gt>
118
119=head1 COPYRIGHT AND LICENSE
120
070bb6c9 121Copyright 2006-2009 by Infinity Interactive, Inc.
2243a22b 122
123L<http://www.iinteractive.com>
124
125This library is free software; you can redistribute it and/or modify
126it under the same terms as Perl itself.
127
ebce5539 128=cut