bump version to 0.75
[gitmo/Class-MOP.git] / lib / Class / MOP / Module.pm
1
2 package Class::MOP::Module;
3
4 use strict;
5 use warnings;
6
7 use Carp         'confess';
8 use Scalar::Util 'blessed';
9
10 our $VERSION   = '0.75';
11 $VERSION = eval $VERSION;
12 our $AUTHORITY = 'cpan:STEVAN';
13
14 use base 'Class::MOP::Package';
15
16 sub version {  
17     my $self = shift;
18     ${$self->get_package_symbol({ sigil => '$', type => 'SCALAR', name => 'VERSION' })};
19 }
20
21 sub authority {  
22     my $self = shift;
23     ${$self->get_package_symbol({ sigil => '$', type => 'SCALAR', name => 'AUTHORITY' })};
24 }
25
26 sub identifier {
27     my $self = shift;
28     join '-' => (
29         $self->name,
30         ($self->version   || ()),
31         ($self->authority || ()),
32     );
33 }
34
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
55 1;
56
57 __END__
58
59 =pod
60
61 =head1 NAME 
62
63 Class::MOP::Module - Module Meta Object
64
65 =head1 DESCRIPTION
66
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
71 =head1 INHERITANCE
72
73 B<Class::MOP::Module> is a subclass of L<Class::MOP::Package>
74
75 =head1 METHODS
76
77 =over 4
78
79 =item B<meta>
80
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
88 =item B<version>
89
90 This is a read-only attribute which returns the C<$VERSION> of the 
91 package for the given instance.
92
93 =item B<authority>
94
95 This is a read-only attribute which returns the C<$AUTHORITY> of the 
96 package for the given instance.
97
98 =item B<identifier>
99
100 This constructs a string of the name, version and authority.
101
102 =item B<create>
103
104 This creates the module; it does not return a useful result.
105
106 =back
107
108 =head1 AUTHORS
109
110 Stevan Little E<lt>stevan@iinteractive.comE<gt>
111
112 =head1 COPYRIGHT AND LICENSE
113
114 Copyright 2006-2008 by Infinity Interactive, Inc.
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
121 =cut