initialize method
[gitmo/MooseX-Singleton.git] / lib / MooseX / Singleton / Object.pm
index dc04e2f..8ad2a4d 100644 (file)
@@ -5,20 +5,39 @@ use metaclass 'MooseX::Singleton::Meta::Class';
 
 extends 'Moose::Object';
 
-no strict 'refs';
+sub instance { shift->new }
 
-override new => sub {
-    my $class = shift;
+sub initialize {
+  my ($class, @args) = @_;
 
-    # create exactly one instance
-    if (!defined ${"$class\::singleton"}) {
-        ${"$class\::singleton"} = super;
-    }
+  my $existing = $class->meta->existing_singleton;
+  confess "Singleton is already initialized" if $existing;
 
-    return ${"$class\::singleton"};
-};
+  return $class->SUPER::new(@args);
+}
 
-sub instance { shift->new }
+sub new {
+  my ($class, @args) = @_;
+
+  my $existing = $class->meta->existing_singleton;
+  confess "Singleton is already initialized" if $existing and @args;
+
+  return $class->SUPER::new(@args);
+}
 
 1;
 
+__END__
+
+=pod
+
+=head1 NAME
+
+MooseX::Singleton::Object - base class for MooseX::Singleton
+
+=head1 DESCRIPTION
+
+This just adds C<instance> as a shortcut for C<new>.
+
+=cut
+