NAME
    Object::Stash - provides a Catalyst-like "stash" method for your class

SYNOPSIS
     {
       package MyClass;
       use Object::New;
       use Object::Stash 'data';
     }
 
     use feature 'say';
     use Data::Printer qw(p);
     my $obj = MyClass->new;
     p $obj->data;                     # an empty hashref
     $obj->data(foo => 1, bar => 2);   # sets values in the 'data' stash
     $obj->data({foo => 1, bar => 2}); # same
     p $obj->data;                     # hashref with keys 'foo', 'bar'
     say $obj->data->{foo};            # says '1'

DESCRIPTION
    The Catalyst context object has a method called stash, that provides a
    hashref for storing arbitrary data associated with the object. This is
    arguably a little hackish - the proper solution might be to create a
    slot for each piece of information you wish to store, with appropriate
    accessor methods. But often hackish will do.

    Object::Stash sets up one or more stash methods for your class. How
    these methods are named depends on how Object::Stash is imported.
    Object::Stash is a role, like Object::New or Object::ID. This means you
    import it, but don't inherit from it.

  Default method name
     package MyClass;
     use Object::Stash;

    Creates a single method for MyClass objects. The method is called
    "stash".

  Custom method name
     package MyClass;
     use Object::Stash 'data';

    Creates a single method for MyClass objects. The method is called
    "data".

  Multiple methods
     package MyClass;
     use Object::Stash qw/important trivial/;

    Creates two stashes for MyClass objects, called "important" and
    "trivial". Adding data to one stash will not affect the other stash. You
    could alternatively write:

     package MyClass;
     use Object::Stash 'important'
     use Object::Stash 'trivial';

  Adding stashes to other classes
     package MyClass;
     use Object::Stash -package => 'YourClass', 'my_stash';

    Creates a stash called "my_stash" for YourClass objects.

  Utility Functions
    "Object::Stash->is_stash( $coderef )"
        Returns true if the method is a stash. For example:

          my $method = MyClass->can('trivial');
          if (Object::Stash->is_stash($method))
          {
            $method->(foo => 1, bar => 2);
          }

        Can also be called as "Object::Stash::is_stash($coderef)".

  Stash Storage
    Stashes are stored "inside-out", meaning that they will work not only
    with objects which are blessed hashrefs, but also with any other type of
    object internals. Dumping your object with Data::Dumper or similar will
    not display the contents of the stashes. (A future release of this
    module may introduce other storage options, but the current inside-out
    storage is likely to remain the default.)

    Thanks to Hash::FieldHash, an object's stashes *should* get
    automatically garbage collected once the object itself is destroyed,
    unless you've maintained your own references to the stashes.

BUGS
    Please report any bugs to
    <http://rt.cpan.org/Dist/Display.html?Queue=Object-Stash>.

SEE ALSO
    Object::New, Object::ID.

AUTHOR
    Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE
    This software is copyright (c) 2011 by Toby Inkster.

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

DISCLAIMER OF WARRANTIES
    THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
    WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

