Tom Molesworth > EntityModel-Class-0.012 > EntityModel::Class

Download:
EntityModel-Class-0.012.tar.gz

Dependencies

Annotate this POD

Website

CPAN RT

Open  0
View/Report Bugs
Module Version: 0.012   Source   Latest Release: EntityModel-Class-0.016

NAME ^

EntityModel::Class - define class definition

VERSION ^

version 0.012

SYNOPSIS ^

 package Thing;
 use EntityModel::Class {
        name => 'string',
        items => { type => 'array', subclass => 'string' }
 };

 package main;
 my $thing = Thing->new;
 $thing->name('A thing');
 $thing->items->push('an entry');
 $thing->items->push('another entry');
 print "Have " . $thing->items->count . " items\n";

DESCRIPTION ^

Applies a class definition to a package. Automatically includes strict, warnings, error handling and other standard features without needing to copy and paste boilerplate code.

USAGE ^

NOTE: This is mainly intended for use with EntityModel only, please consider Moose or similar for other projects.

Add EntityModel::Class near the top of the target package:

 package Test;
 use EntityModel::Class { };

The hashref parameter contains the class definition. Each key is the name of an attribute for the class, with the exception of the following underscore-prefixed keys:

An attribute definition will typically create an accessor with the same name, and depending on type may also include some additional helper methods.

Available types include:

If the type (or subclass) contains '::', or starts with a Capitalised letter, then it will be treated as a class. All internal type names are lowercase.

You can also set the scope on a variable, which defines whether it should be include when exporting or importing:

You can also specify actions to take when a variable is changed, to support internal attribute observers, by specifying the watch parameter. This takes a hashref with key corresponding to the attribute to watch, and value indicating the method on that object. For example, page = 'path'> would update whenever the path mutator is called on the page attribute. This is intended for use with hash and array containers, rather than classes or simple types.

 package Compendium;
 use EntityModel::Class {
        authors => { type => 'array', subclass => 'Author' },
        authorByName => { type => 'hash', subclass => 'Author', scope => 'private', watch => { authors => 'name' } }
 };

 package main;
 my $c = Compendium->new;
 $c->authors->push(Author->new("Adams"));
 $c->authors->push(Author->new("Brecht"));
 print $c->authorByName->{'Adams'}->id;

import

Apply supplied attributes, and load in the following modules:

use strict;
use warnings;
use feature;
use 5.010;
use Try::Tiny;

record_class

Add an entry for this class in the central class info hash.

apply_inheritance

Set up inheritance as required for this class.

load_dependencies

Load all modules required for classes

apply_logging

apply_version

Record the VCS revision information from _vcs attribute.

apply_attributes

add_method

vcs

Add a version control system tag to the class.

setup

Standard module setup - enable strict and warnings, and disable 'import' fallthrough.

validator

Basic validation function.

_attrib_info

Returns attribute information for a given package's attribute.

has_defaults

Returns any defaults defined for this class.

add_watcher

Add watchers as required for all package definitions.

Call this after all the class definitions have been loaded.

IMPORTED FUNCTIONS ^

The following functions will be added to the namespace of the importing package.

trim

Helper function to trim all leading and trailing whitespace from the given string.

now

Get DateTime value for current time

restring

Helper method for expanding a string

SEE ALSO ^

Or rather, "please use instead of this module":

AUTHOR ^

Tom Molesworth <cpan@entitymodel.com>

LICENSE ^

Copyright Tom Molesworth 2008-2011. Licensed under the same terms as Perl itself.

syntax highlighting: