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