_clear_instance and tests
[gitmo/MooseX-Singleton.git] / lib / MooseX / Singleton / Object.pm
1 #!/usr/bin/env perl
2 package MooseX::Singleton::Object;
3 use Moose;
4
5 extends 'Moose::Object';
6
7 sub instance { shift->new }
8
9 sub initialize {
10   my ($class, @args) = @_;
11
12   my $existing = $class->meta->existing_singleton;
13   confess "Singleton is already initialized" if $existing;
14
15   return $class->SUPER::new(@args);
16 }
17
18 sub new {
19   my ($class, @args) = @_;
20
21   my $existing = $class->meta->existing_singleton;
22   confess "Singleton is already initialized" if $existing and @args;
23
24   # Otherwise BUILD will be called repeatedly on the existing instance.
25   # -- rjbs, 2008-02-03
26   return $existing if $existing and ! @args;
27
28   return $class->SUPER::new(@args);
29 }
30
31 sub _clear_instance {
32   my ($class) = @_;
33   $class->meta->clear_singleton;
34 }
35
36 no Moose;
37
38 1;
39
40 __END__
41
42 =pod
43
44 =head1 NAME
45
46 MooseX::Singleton::Object - base class for MooseX::Singleton
47
48 =head1 DESCRIPTION
49
50 This just adds C<instance> as a shortcut for C<new>.
51
52 =cut
53