logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Class::DBI::Plugin - Abstract base class for Class::DBI plugins

Author

       Jean-Christophe Zeus, <mail@jczeus.com> with some help from Simon Cozens. Many thanks to Mark Addison for
       the idea with the init() method, and many thanks to Steven Quinney  for  the  idea  with  the  subroutine
       attributes.

Caveats

       So far this module only "sees" methods in the plugin module itself. If there is a class between the  base
       class  and  the  plugin  class  in the inheritance hierarchy, methods of this class will not be found. In
       other words, inherited methods will not be found. If requested, I will implement this behaviour.

Description

       Class::DBI::Plugin is an abstract base class for Class::DBI plugins. Its purpose is to make writing
       plugins easier. Writers of plugins should be able to concentrate on the functionality their module
       provides, instead of having to deal with the symbol table hackery involved when writing a plugin module.
       Only three things must be remembered:

       1.  All  methods  which  are  to  exported  are  given the "Plugged" attribute. All other methods are not
           exported to the plugged-in class.

       2.  Method calls which are to be sent to the plugged-in class are put in the init() method.  Examples  of
           these are set_sql(), add_trigger() and so on.

       3.  The  class parameter for the init() method and the "Plugged" methods is the plugged-in class, not the
           plugin class.

Name

       Class::DBI::Plugin - Abstract base class for Class::DBI plugins

See Also

       •   Class::DBI

Synopsis

         use base 'Class::DBI::Plugin';

         sub init {
           my $class = shift;
           $class->set_sql( statement_name => ... );
           $class->add_trigger( ... );
           $class->columns( TEMP => ... );
         }

         sub method_name : Plugged {
           my $class = shift;
           $class->sql_statement_name( ... );
         }

         sub this_method_is_not_exported {}

Todo

       It may be useful for plugin users to be able to choose only the plugin methods they are interested in, if
       there are more than one. This is not implemented yet.

See Also