Move actual singleton logic out of MooseX::Singleton::Object and into MooseX::Singlet...
[gitmo/MooseX-Singleton.git] / lib / MooseX / Singleton / Meta / Class.pm
CommitLineData
109b110b 1#!/usr/bin/env perl
2package MooseX::Singleton::Meta::Class;
3use Moose;
4use MooseX::Singleton::Meta::Instance;
5
6extends 'Moose::Meta::Class';
7
8sub 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
3822ace2 19override 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
109b110b 331;
34