X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FSingleton%2FRole%2FObject.pm;fp=lib%2FMooseX%2FSingleton%2FRole%2FObject.pm;h=b09613fac7e0eef9626647635baf98fcafa58ee8;hb=8eec3c69ee4aa161601b0255c3b32cd6d9cc6998;hp=0000000000000000000000000000000000000000;hpb=b1882d9b6ec47b18a97dadb6e1326305d890c806;p=gitmo%2FMooseX-Singleton.git diff --git a/lib/MooseX/Singleton/Role/Object.pm b/lib/MooseX/Singleton/Role/Object.pm new file mode 100644 index 0000000..b09613f --- /dev/null +++ b/lib/MooseX/Singleton/Role/Object.pm @@ -0,0 +1,51 @@ +#!/usr/bin/env perl +package MooseX::Singleton::Role::Object; +use Moose::Role; + +sub instance { shift->new } + +sub initialize { + my ($class, @args) = @_; + + my $existing = $class->meta->existing_singleton; + confess "Singleton is already initialized" if $existing; + + return $class->SUPER::new(@args); +} + +override new => sub { + my ($class, @args) = @_; + + my $existing = $class->meta->existing_singleton; + confess "Singleton is already initialized" if $existing and @args; + + # Otherwise BUILD will be called repeatedly on the existing instance. + # -- rjbs, 2008-02-03 + return $existing if $existing and ! @args; + + return super(); +}; + +sub _clear_instance { + my ($class) = @_; + $class->meta->clear_singleton; +} + +no Moose; + +1; + +__END__ + +=pod + +=head1 NAME + +MooseX::Singleton::Object - Object class role for MooseX::Singleton + +=head1 DESCRIPTION + +This just adds C as a shortcut for C. + +=cut +