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