MooseX::Singleton::Role::Object - Object class role for MooseX::Singleton


MooseX-Singleton documentation Contained in the MooseX-Singleton distribution.

Index


Code Index:

NAME

Top

MooseX::Singleton::Role::Object - Object class role for MooseX::Singleton

VERSION

Top

version 0.27

DESCRIPTION

Top

This just adds instance as a shortcut for new.

AUTHOR

Top

Shawn M Moore <sartak@gmail.com>

COPYRIGHT AND LICENSE

Top


MooseX-Singleton documentation Contained in the MooseX-Singleton distribution.

package MooseX::Singleton::Role::Object;
BEGIN {
  $MooseX::Singleton::Role::Object::AUTHORITY = 'cpan:SARTAK';
}
BEGIN {
  $MooseX::Singleton::Role::Object::VERSION = '0.27';
}
use Moose::Role;
use Carp qw( carp );


sub instance { shift->new }

sub initialize {
    my ( $class, @args ) = @_;

    my $existing = $class->meta->existing_singleton;
    confess "Singleton is already initialized" if $existing;

    return $class->new(@args);
}

override new => sub {
    my ( $class, @args ) = @_;

    my $existing = $class->meta->existing_singleton;
    confess "Singleton is already initialized" if $existing and @args;

    # Otherwise BUILD will be called repeatedly on the existing instance.
    # -- rjbs, 2008-02-03
    return $existing if $existing and !@args;

    return super();
};

sub _clear_instance {
    my ($class) = @_;
    $class->meta->clear_singleton;
}

no Moose::Role;

1;

# ABSTRACT: Object class role for MooseX::Singleton




__END__