NAME

MooseX::SingletonMethod - Moose with Singleton Method facility.

VERSION

Version 0.02

SYNOPSIS

Simple usage example....

package Baz;
use MooseX::SingletonMethod;    # <= Moose with SingletonMethod facility attached
no MooseX::SingletonMethod;

package main;
my $baz = Baz->new;
my $foo = Baz->new;

# add singleton method called "baz" just to $baz and not to Baz class
$baz->add_singleton_method( baz => sub { 'baz!' } ); 

say $baz->baz;   # => 'baz'
say $foo->baz;   # ERROR: Can't locate object method "baz"....

Alternative to MooseX::SingletonMethod you can just use MooseX::SingletonMethod::Role directly like so...

package Baz;
use Moose;
with 'MooseX::SingletonMethod::Role';
no Moose;

DESCRIPTION

What is a "Singleton Method?"

TBD.

What is "MooseX::SingletonMethod"?

Using roles you can already create Singleton Methods with Moose:

http://transfixedbutnotdead.com/2009/06/03/using-moose-roles-to-create-singleton-methods/
http://transfixedbutnotdead.com/2009/06/10/roles-singleton-methods-moosexdeclare/
http://transfixedbutnotdead.com/2009/06/19/moose-fairy-dust/
http://transfixedbutnotdead.com/2009/06/28/moose-fairy-dust-now-with-diagrams/
http://transfixedbutnotdead.com/2009/07/07/moose-singleton-method-now-without-roles/

MooseX::SingletonMethod simple adds a nicety wrapper around this.

There are three methods available to create Singleton Methods using MooseX::SingletonMethod. Here are some examples using MooseX::Declare with MooseX::SingletonMethod::Role:

   use MooseX::Declare;  
 
   class FooBarBaz with MooseX::SingletonMethod::Role {  
       method comes_with { "comes with FooBarBaz class" }  
   }  
 
   # one way to create singleton method....  
   my $foo = FooBarBaz->new;  
   $foo->become_singleton;                   # make $foo a singleton  
   $foo->meta->add_method( foo => 'foo!' );  # add method "foo" using meta  
 
   # and another.....  
   my $bar = FooBarBaz->new;  
   $bar->add_singleton_method( bar => sub { 'bar!' } );  
 
   # and finally multiple methods....  
   my $baz = FooBarBaz->new;  
   $baz->add_singleton_methods(  
       baz1 => sub { 'baz1!' },  
       baz2 => sub { 'baz2!' },  
   );
   
   # Methods each object now has:
   #
   # $foo  ->   [ comes_with, foo ]
   # $bar  ->   [ comes_with, bar ]
   # $baz  ->   [ comes_with, baz1, baz2 ]

Things to note

Each time add_singleton_method or add_singleton_methods is called it creates a new anonymous class which the object is blessed into.

If you want to add more methods to already bless anon class then simply use ->meta->add_method like in above $foo example.

EXPORT

None

METHODS

become_singleton

Makes the object a singleton (by creating an anonymous class which the object is blessed with):

$baz->become_singleton;

add_singleton_method

Adds a singleton method to this object (same as above + creates prescribed method):

$bar->add_singleton_method( bar => sub { 'bar!' } );  

add_singleton_methods

Same as above except allows multiple method declaration:

$baz->add_singleton_methods(  
    baz1 => sub { 'baz1!' },  
    baz2 => sub { 'baz2!' },  
);

init_meta

Internal Moose method

AUTHOR

Barry Walsh, <draegtun at cpan.org>

BUGS

Please report any bugs or feature requests to bug-moosex-singletonmethod at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MooseX-SingletonMethod. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc MooseX::SingletonMethod

You can also look for information at:

ACKNOWLEDGEMENTS

DISCLAIMER

This is beta software. I'll strive to make it better each and every day!

However I accept no liability whatsoever should this software do what you expected ;-)

COPYRIGHT & LICENSE

Copyright 2009 Barry Walsh (Draegtun Systems Ltd), all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.