Bump to 0.27, Sartak style :)
[gitmo/Mouse.git] / lib / Mouse.pm
index ef101e1..404c68d 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 use 5.006;
 use base 'Exporter';
 
-our $VERSION = '0.21';
+our $VERSION = '0.27';
 
 use Carp 'confess';
 use Scalar::Util 'blessed';
@@ -88,6 +88,46 @@ sub override {
     });
 }
 
+sub init_meta {
+    # This used to be called as a function. This hack preserves
+    # backwards compatibility.
+    if ( $_[0] ne __PACKAGE__ ) {
+        return __PACKAGE__->init_meta(
+            for_class  => $_[0],
+            base_class => $_[1],
+            metaclass  => $_[2],
+        );
+    }
+
+    shift;
+    my %args = @_;
+
+    my $class = $args{for_class}
+      or Carp::croak(
+        "Cannot call init_meta without specifying a for_class");
+    my $base_class = $args{base_class} || 'Mouse::Object';
+    my $metaclass  = $args{metaclass}  || 'Mouse::Meta::Class';
+
+    Carp::croak("The Metaclass $metaclass must be a subclass of Mouse::Meta::Class.")
+            unless $metaclass->isa('Mouse::Meta::Class');
+    
+    # make a subtype for each Mouse class
+    class_type($class)
+        unless find_type_constraint($class);
+
+    my $meta = $metaclass->initialize($class);
+    $meta->superclasses($base_class)
+        unless $meta->superclasses;
+
+    {
+        no strict 'refs';
+        no warnings 'redefine';
+        *{$class.'::meta'} = sub { $meta };
+    }
+
+    return $meta;
+}
+
 sub import {
     my $class = shift;
 
@@ -111,16 +151,9 @@ sub import {
         return;
     }
 
-    my $meta = Mouse::Meta::Class->initialize($caller);
-    $meta->superclasses('Mouse::Object')
-        unless $meta->superclasses;
-
-    # make a subtype for each Mouse class
-    class_type($caller) unless find_type_constraint($caller);
-
-    no strict 'refs';
-    no warnings 'redefine';
-    *{$caller.'::meta'} = sub { $meta };
+    Mouse->init_meta(
+        for_class  => $caller,
+    );
 
     if (@_) {
         __PACKAGE__->export_to_level( $level+1, $class, @_);
@@ -191,6 +224,12 @@ sub is_class_loaded {
     return 0;
 }
 
+sub class_of {
+    return unless defined $_[0];
+    my $class = blessed($_[0]) || $_[0];
+    return Mouse::Meta::Class::get_metaclass_by_name($class);
+}
+
 1;
 
 __END__
@@ -430,9 +469,6 @@ We have a public git repo:
 
  git clone git://jules.scsys.co.uk/gitmo/Mouse.git
 
-If you would like commit access, send a note with your public SSH key to Yuval
-Kogman, at the address below.
-
 =head1 AUTHORS
 
 Shawn M Moore, C<< <sartak at gmail.com> >>
@@ -449,7 +485,9 @@ with plenty of code borrowed from L<Class::MOP> and L<Moose>
 
 =head1 BUGS
 
-No known bugs.
+There is a known issue with Mouse on 5.6.2 regarding the @ISA tests. Until
+this is resolve the minimum version of Perl for Mouse is set to 5.8.0. Patches
+to resolve these tests are more than welcome.
 
 Please report any bugs through RT: email
 C<bug-mouse at rt.cpan.org>, or browse