NAME

Object::Generic - A generic base class that allows storage of key/value pairs.

SYNOPSIS

use Object::Generic;
$thing = new Object::Generic  color => 'red';

$color = $thing->get('color');
$color = $thing->get_color;
$color = $thing->color;

$thing->set( color => 'blue' );
$thing->set_color('blue');
$thing->color('blue');

@key_list  = $thing->keys;
$has_color = $thing->exists('color');

package myClass;
use base 'Object:Generic';
myClass->set_allowed_keys('color', 'width', 'height', 'border');
sub myMethod {
  my $self=shift;
  $self->args(@_);    # processes @args=(key=>value, key=>value, ...)
  print $self->width;
}

package main;
use myClass;
$obj = new myClass color => 'green', width => 5;
$usa = new Object::Generic language=>'english', hemisphere=>'north';
$obj->set_country($usa);             # fails; 'country' not an allowed key.
if ($obj->country->language){ ... }  # false, but isn't an error.
$obj->myMethod( width => 10 );
$obj->border(10) if $obj->allows_key('border');
print $obj->border;

DESCRIPTION

This package defines an object that lets key/value pairs be stored and fetched with either the typical $obj->set_key('value') and $obj->get_key() syntax, or with a Class::DBI-ish $obj->key('value') and $obj->key syntax.

The keys may be but do not need to be declared ahead of time. Any previously undefined method invoked on an instance of Object::Generic defines a possible key.

The methods 'exists' and keys' serve the same purpose as the perl functions exists(%hash{key}) and keys(%hash).

Class methods, methods that try to fetch a value that has never been defined, and keys that aren't allowed all return an Object::Generic::False which is false in a boolean context but which allows error chaining without a fatal error. In other words, even though $obj->foo is not defined, $obj->foo->bar->baz returns false (well, an Object::Generic::False) rather than crashing.

A number of key/value pairs may be defined all at once with the built-in $obj->args( key1=>'value1', key2=>'value2') method.

The Object::Generic class may be used as a base class; by default any methods in the inherited class that aren't defined will be treated as keys.

SEE ALSO

Object::Generic::False, Object::Generic::Session, Class::DBI

AUTHOR

Jim Mahoney, <mahoney@marlboro.edu<gt>

COPYRIGHT AND LICENSE

Copyright (C) 2005 by Jim Mahoney

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