NAME

PRANG::Graph::Meta::Class - metaclass metarole for PRANG-enabled classes

SYNOPSIS

 package MyClass;
 use Moose;
 use PRANG::Graph;

 # - or -
 package MyClass;
 use Moose -traits => ["PRANG"];

 # - or -
 package MyClass;
 use Moose;
 PRANG::Graph::Meta::Class->meta->apply(__PACKAGE__->meta);

DESCRIPTION

This role defines class properties and methods for PRANG classes' meta objects. ie, the methods it defines are all to be found in YourClass->meta, not YourClass.

The PRANG::Graph::Meta::Class object is the centre of the state machine which defines the parsing and emitting rules for your classes. In other words, the XML Graph (see PRANG). Each one corresponds to an XML element (though not all XML elements will require a full object class), and via these objects can be found the lists of elements and attributes which define the XML structure.

ATTRIBUTES

HashRef[HashRef[PRANG::Graph::Meta::Attr]] xml_attr

This read-only property maps from XML namespace and localname to a PRANG::Graph::Meta::Attr object, defining the type of that attribute and other things described on its perldoc.

The first time it is accessed, it is built - so be sure to carry out any run-time meta magic before parsing or emitting objects of that type.

ArrayRef[PRANG::Graph::Meta::Element] xml_elements

This contains an ordered list of all of the XML elements which exist in this class. See PRANG::Graph::Meta::Element.

Like xml_attr, the first time it is accessed it is built. There are currently some problems with ordering and role composition; as the ordering of elements is returned from a moose accessor, but when composing roles into classes, they are applied in any order.

PRANG::Graph::Node graph

The graph property is the acceptor and emitter for the child nodes of this class. See PRANG::Graph::Node for the low-down. This is constructed by a transform on the xml_elements property.

METHODS

accept_attributes(\@node_attr, $ctx)

accept_childnodes(\@childNodes, $ctx)

marshall_in_element($node, $ctx)

These methods are the parsing machinery, their API is quite subject to change; the methods provided by the PRANG::Graph role are what you should be using, unless you are writing a PRANG extension.

add_xml_attr($item, $node, $ctx)

to_libxml($item, $node, $ctx)

Similarly, these are the emitting methods.

SEE ALSO

PRANG::Graph::Meta::Attr, PRANG::Graph::Meta::Element, PRANG::Graph::Node

AUTHOR AND LICENCE

Development commissioned by NZ Registry Services, and carried out by Catalyst IT - http://www.catalyst.net.nz/

Copyright 2009, 2010, NZ Registry Services. This module is licensed under the Artistic License v2.0, which permits relicensing under other Free Software licenses.