TODO list for Perl module Class::InsideOut

- documentation: DEMOLISH chaining and property destruction
- storable hooks: documentation
- storable hooks: references; circular references; deep-clone vs freeze
- storable hooks: pre-freeze user hook
- ":all" export key
- accessor creation
- accessor privacy options
- aliases: 'private', 'public', 'protected'
- accessor style options
- mutator filter options and validation handling
- class-wide default options
- error handling and argument checking
- expand documentation (tutorial?)
- add checks for XS weaken and add to documentation
- pre-clone user hook??

#--------------------------------------------------------------------------#
# Interface brainstorming below
#--------------------------------------------------------------------------#

use Class::InsideOut qw( property public private register id );

Class::InsideOut::options(
  accessor_style => 'bimodal', # or eiffel or get_set
  get_prefix => 'get_',
  set_prefix => 'set_',
  privacy => 'public',  # create accessors for everything given to properties
                       # or 'readonly' or 'protected' or 'private'
  filter => \&coderef,  # mutator argument filtered through this
                       # will catch die message for error
  
);

Class::InsideOut::property ( my %UID, { privacy => 'readonly' });

private my %HEIGHT; # alias for properties with privacy => private
public my %NAME; # sets privacy => public
public my %AGE, { filter => \&old_enough }; # dies on error

sub new {
  my $class = shift;
  my $self = \do { my $s };
  bless $self, $class;
  register $self;
  return $self;
}

sub dump {
  my $self = shift;
  print "name: ", $NAME{ id $self }, "\n";
}

#--------------------------------------------------------------------------#
# thoughts on storable
#--------------------------------------------------------------------------#

I think I need to build a data structure like this and hand it back to 
Storable as an additional reference:

my %freeze = {
  object => $unblessed_copy_of_object_contents
  properties => {
    "My::Class"      => [ array of properties ],
    "My::SuperClass" => [ array of properties ],
  }
};

Have to loop over object class and unique list of superclasses but only store
properties for classes that have registered properties.
