X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FSingleton%2FObject.pm;h=8ad2a4dd7fe31eb1e3d807e1f049fd9afcdc78c2;hb=d928ce3a26634463da667f6bdba903e94b31ebac;hp=dc04e2f5fb09111564032439588fd44301fc5ac3;hpb=109b110b1d5969c8ae2ec7a5e5d86066f895d828;p=gitmo%2FMooseX-Singleton.git diff --git a/lib/MooseX/Singleton/Object.pm b/lib/MooseX/Singleton/Object.pm index dc04e2f..8ad2a4d 100644 --- a/lib/MooseX/Singleton/Object.pm +++ b/lib/MooseX/Singleton/Object.pm @@ -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 as a shortcut for C. + +=cut +