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

NAME

Devel::AssertApplicationCapabilities::Extending - now to write Devel::AssertApplicationCapabilities::* modules

DESCRIPTION

Devel::AssertApplicationCapabilities::* modules are used by Devel::CheckApplicationCapabilities to see what capabilities an external application has. It comes with a minimal set of checks for things that I've found useful to know, but it is easy for you to add your own.

HOW TO WRITE YOUR OWN MODULES

You need a write a module which looks like:

  package Devel::AssertApplicationCapabilities::LikesPie

  use base qw(Devel::AssertApplicationCapabilities::_Base);

  sub app_is { .... }

  1;

Each of those four lines is important.

THE PACKAGE NAME

When your users want to interrogate a binary to see what its capabilities are, they'll write code something like:

  use Devel::CheckApplicationCapabilities qw(app_is);

  app_is('/bin/opengourmand', qw(LikesPie GNU));

Your module will be loaded on-demand, with its name figured out from that the user supplies.

INHERIT FROM D::AAC::_Base

Even though you're not really writing objecty code, this will give you a magic 'import' method that will be called when your module is loaded so that everything else Just Works.

THE app_is FUNCTION

This function will be passed a single argument, the name of the binary that is to be checked. It should return 1 or 0 depending on whether the binary has the capability you're interested in or doesn't.

1

Normal boring boilerplate for a module.

NAMING CONVENTIONS

You can have multi-level namespaces, so you could write a capability check called, for example, LikesPie::SteakAndKidney. Module names beginning with an underscore are hidden from the list_app_checks function, so you can use them for "helper" modules. Indeed, that's what _Base is in the above example.

To avoid name clashes with other modules, helper modules for YourCapability should be named like YourCapability::_Something.

And finally, modules whose last component's name begins with 'Test' are reserved for use in test suites. So, for example, Devel::AssertApplicationCapabilities::TestCanDoTheFandango should never be installed, and tests for other D::AAC::* modules should be able to rely on their TestBlah modules being the only ones "visible" to perl.

AUTHOR, COPYRIGHT and LICENCE

Copyright 2010 David Cantrell

This documentation is free-as-in-speech. It may be used, distributed and modified under the terms of the Creative Commons Attribution-Share Alike 2.0 UK: England & Wales License, whose text you may read at <http://creativecommons.org/licenses/by-sa/2.0/uk/>.

CONSPIRACY

This documentation is also free-as-in-mason