The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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 data structure, or an 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.

That way, you'll get identical results if you get passed (a) an object directly (Data::Tersify preserves the top-level elements, but will let you tersify any sub-elements), or (b) an object as part of a data structure or another object (Data::Tersify will offer to let you tersify the object as a whole).

handles

 Out: @classes

This method returns one or more class names. These are classes that you're prepared to handle in your tersify method.

handles_subclasses

 Out: $handles_subclasses

Optional. Return a true value from this method if you're also prepared to tersify subclasses of any of your handled classes.

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.