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.