Move actual singleton logic out of MooseX::Singleton::Object and into MooseX::Singlet...
[gitmo/MooseX-Singleton.git] / lib / MooseX / Singleton / Meta / Class.pm
1 #!/usr/bin/env perl
2 package MooseX::Singleton::Meta::Class;
3 use Moose;
4 use MooseX::Singleton::Meta::Instance;
5
6 extends 'Moose::Meta::Class';
7
8 sub initialize {
9     my $class = shift;
10     my $pkg   = shift;
11
12     $class->SUPER::initialize(
13         $pkg,
14         instance_metaclass => 'MooseX::Singleton::Meta::Instance',
15         @_,
16     );
17 };
18
19 override construct_instance => sub {
20     my ($class) = @_;
21     my $pkg = $class->name;
22
23     no strict 'refs';
24
25     # create exactly one instance
26     if (!defined ${"$pkg\::singleton"}) {
27         ${"$pkg\::singleton"} = super;
28     }
29
30     return ${"$pkg\::singleton"};
31 };
32
33 1;
34