NAME

Class::Frame - Class template with default constructor and accessors autogenerated

SYNOPSIS

In class Sith:
--------------

package Sith;

use strict;

use base qw( Class::Frame );
use Class::Frame;

DEFINE_FIELDS(
    name => 'Palpatine',
    occupation => 'Sith Lord',
    weapon => [ 'The Force', 'Lightsaber' ]
);

1;


In a galaxy far far away:
-------------------------

use Sith;

# Difficult to see the Dark Side is . . .
my $emperor = Sith->new(
	name => 'Palpatine',
	occupation => 'Senator'
);

# Get name attribute
print $emperor->name();

# Another way of getting name
print $emperor->get_name();

# Revealed itself the Dark Side has . . .
$emperor->set_name('Darth Sidios'); 
$emperor->set_points(120);
$emperor->set_occupation('Sith Lord');

# Get default value for occupation field in Sith class
my $occupation = $emperor->get_occupation_default();

. . .


Subclassing Sith:
-----------------

package Sith::Lord;

use base qw( Sith );

sub new {
	my $pkg = shift;
	my @args = @_;
	
	my $self = $pkg->SUPER::new(@args);
	bless $self, $pkg;
}

. . .

ABSTRACT

This is 'yet another accessor creation helper' module but its different ( of course :-)). For the class using Class::Frame as a base class it automatically creates default constructor wich accepts field values as input parameters and if some or all of the parameters were not set - uses default values specified during class structure declaration ( please see below for more details ). Also it creates three methods for each field: accessor ('get'), mutator ('set') and 'shortcut' method ( $obj-><field> is the same as $obj->get_<field> ). Supports further subclassing of Class::Frame derived class.

DESCRIPTION

Learn Class::Frame in 5 seconds!

To start using Class::Frame as base class you will need to make 8, err, 2 easy steps :-)

1) Create your class

package Jedi;

use strict;
use base qw( Class::Frame );
use Class::Frame; # Exports DEFINE_FIELDS helper function

# Accepts a hash of field names with default values
# that can be scalars or references to anything
# ( array, hash, object ). If field doesn't have default
# value - set it to undef

DEFINE_FIELDS(
	name => undef,
	points => 140,
	weapon => Jedi::Weapon::Lightsaber
);

2) In your code there you are going to use My::Class:

use Jedi;

. . .

# Create instance of My::Class and override default name value
my $kit_fisto = Jedi->new(name => 'Kit Fisto');
$kit_fisto->weapon->activate();

. . .
Class Declaration

DEFINE_FIELDS( <field_name> => <default_value>, ... )

This method creates accessors and constructor for the class it has been
called from. Input - hash of fields and their default_values. If default
value is undef please specify so EXPLICITLY
Generated constructor

new( [<field_name> => <value> [ , ... ]] )

Creates new instance of class derived from Class::Frame. Accepts a hash
containing field names as keys and field initializing values as values.
If field has init value then its default value will be overriden,
otherwise - default value will be used (if provided in class declaration).
Accessors

<field_name>

Gets field value

Example:

my $jedi_name = $jedi->name;

get_<field_name>

Another way to get field value

Examle:

my $jedi_name = $jedi->get_name;

get_<field_name>_default

Gets field default value from class declaration

Examle:

	my $default_weapon = $jedi->get_weapon_default;

set_<field_name>( <value> )

Sets field to value passed even if it is 'undef' ( which
sometimes is handy )

Example:

	$jedi->set_weapon(Jedi::Weapon::DualBladeLightSaber->new());
	$jedi->set_dark_side_points(undef);

BUGS

Please report them

SEE ALSO

Class::Accessor

AUTHOR

Denys Vorobyov, <denysv@primus.ca>

COPYRIGHT AND LICENSE

Copyright 2005 by Denys Vorobyov

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