Commit | Line | Data |
2243a22b |
1 | |
2 | package Class::MOP::Module; |
3 | |
4 | use strict; |
5 | use warnings; |
6 | |
4edd0667 |
7 | use Carp 'confess'; |
2243a22b |
8 | use Scalar::Util 'blessed'; |
9 | |
b4bd10ec |
10 | our $VERSION = '0.77'; |
d519662a |
11 | $VERSION = eval $VERSION; |
f0480c45 |
12 | our $AUTHORITY = 'cpan:STEVAN'; |
2243a22b |
13 | |
14 | use base 'Class::MOP::Package'; |
15 | |
7f436b8c |
16 | sub version { |
17 | my $self = shift; |
8b49a472 |
18 | ${$self->get_package_symbol({ sigil => '$', type => 'SCALAR', name => 'VERSION' })}; |
7f436b8c |
19 | } |
20 | |
f0480c45 |
21 | sub authority { |
22 | my $self = shift; |
8b49a472 |
23 | ${$self->get_package_symbol({ sigil => '$', type => 'SCALAR', name => 'AUTHORITY' })}; |
f0480c45 |
24 | } |
9d6dce77 |
25 | |
f0480c45 |
26 | sub identifier { |
27 | my $self = shift; |
28 | join '-' => ( |
29 | $self->name, |
30 | ($self->version || ()), |
31 | ($self->authority || ()), |
32 | ); |
33 | } |
9d6dce77 |
34 | |
4edd0667 |
35 | sub create { |
36 | my ( $class, %options ) = @_; |
37 | |
38 | my $package_name = $options{package}; |
39 | |
40 | (defined $package_name && $package_name) |
41 | || confess "You must pass a package name"; |
42 | |
43 | my $code = "package $package_name;"; |
44 | $code .= "\$$package_name\:\:VERSION = '" . $options{version} . "';" |
45 | if exists $options{version}; |
46 | $code .= "\$$package_name\:\:AUTHORITY = '" . $options{authority} . "';" |
47 | if exists $options{authority}; |
48 | |
49 | eval $code; |
50 | confess "creation of $package_name failed : $@" if $@; |
51 | |
52 | return; # XXX: should this return some kind of meta object? ~sartak |
53 | } |
54 | |
2243a22b |
55 | 1; |
56 | |
57 | __END__ |
58 | |
59 | =pod |
60 | |
61 | =head1 NAME |
62 | |
63 | Class::MOP::Module - Module Meta Object |
64 | |
2243a22b |
65 | =head1 DESCRIPTION |
66 | |
127d39a7 |
67 | This is an abstraction of a Perl 5 module, it is a superclass of |
68 | L<Class::MOP::Class>. A module essentially a package with metadata, |
69 | in our case the version and authority. |
70 | |
121991f6 |
71 | =head1 INHERITANCE |
72 | |
73 | B<Class::MOP::Module> is a subclass of L<Class::MOP::Package> |
74 | |
2243a22b |
75 | =head1 METHODS |
76 | |
77 | =over 4 |
78 | |
79 | =item B<meta> |
80 | |
127d39a7 |
81 | Returns a metaclass for this package. |
82 | |
83 | =item B<initialize ($package_name)> |
84 | |
85 | This will initialize a Class::MOP::Module instance which represents |
86 | the module of C<$package_name>. |
87 | |
7f436b8c |
88 | =item B<version> |
89 | |
b9d9fc0b |
90 | This is a read-only attribute which returns the C<$VERSION> of the |
91 | package for the given instance. |
92 | |
f0480c45 |
93 | =item B<authority> |
94 | |
b9d9fc0b |
95 | This is a read-only attribute which returns the C<$AUTHORITY> of the |
96 | package for the given instance. |
97 | |
f0480c45 |
98 | =item B<identifier> |
99 | |
96e38ba6 |
100 | This constructs a string of the name, version and authority. |
b9d9fc0b |
101 | |
4edd0667 |
102 | =item B<create> |
103 | |
104 | This creates the module; it does not return a useful result. |
105 | |
2243a22b |
106 | =back |
107 | |
1a09d9cc |
108 | =head1 AUTHORS |
2243a22b |
109 | |
110 | Stevan Little E<lt>stevan@iinteractive.comE<gt> |
111 | |
112 | =head1 COPYRIGHT AND LICENSE |
113 | |
69e3ab0a |
114 | Copyright 2006-2008 by Infinity Interactive, Inc. |
2243a22b |
115 | |
116 | L<http://www.iinteractive.com> |
117 | |
118 | This library is free software; you can redistribute it and/or modify |
119 | it under the same terms as Perl itself. |
120 | |
ebce5539 |
121 | =cut |