NAME
Data::Tersify::Plugin - how to write a Data::Tersify plugin
SYNOPSIS
package Data::Tersify::Plugin::Foo;
sub handles { 'Foo' }
sub tersify {
my ($object) = @_;
return q{They're all the same};
}
package Data::Tersify::Plugin::ManyThings;
sub handles { ['Bar', 'Bletch'] }
sub tersify {
my ($object) = @_;
if (ref($object) eq 'Bar') {
return 'ID ' . $object->id;
} elsif (ref($object) eq 'Bletch') {
return sprintf('UUID %s for %s',
$object->uuid, $object->parent->id);
}
}
DESCRIPTION
Any Data::Tersify plugin must (a) be in the Data::Tersify::Plugin namespace, and (b) implement the class methods handles and tersify.
Because Data::Tersify will not tersify an object via a plugin if it's the root structure passed to it, but will tersify an object if it's part of the internals of another object which isn't handled by a plugin, you should consider implementing your plugin by tersifying various components of an object, rather than the entire object. FIXME: why?
handles
Out: @classes
This method returns one or more class names. These are classes that you're prepared to handle in your tersify method.
tersify
In: $object
Out: $terse_description
Supplied with an object you have said in your handles that you know how to handle, this returns a scalar description of said object. Ideally descriptions should be short (40 characters or less), and provide only enough information needed to differentiate two similarly terse object descriptions.
Data::Tersify will mention the type of the object, and the refaddr, so you do not need to mention anything like this in your description.