NAME
    Method::Assert - Ensure instance and class methods are called properly

VERSION
    version 0.0.1

SYNOPSIS
        package MyClass;

        use Method::Assert;
        use Carp qw(confess);

        sub new {
            my ($class, @args) = &class_method;
            my $self = {};
            bless $self, $class;
            $self->_init(@args);
            return $self;
        }

        sub _init {
            my ($self, @args) = @_; # Perl Critic prefers it this way
            &instance_method;       # still works
            ...
        }

        sub get_output_filename {
            &instance_method;
            return shift->{'output_filename'};
        }

        sub set_output_filename {
            my $self = &instance_method;
            confess("No parameter specified") unless @_;
            confess("File already exists") if -e $_[0];
            $self->{'output_filename'} = $_[0];
            return $self;
        }

DESCRIPTION
    This module will export the two functions named below into the namespace
    of the package using it. These two functions are useful to do typical
    checks at the start of functions that are supposed to be either class or
    instance methods.

    Always remember to call these functions as &class_method and
    &instance_method, or else they will not work properly!

    If you call them as "class_method()" or "instance_method()" a new
    version of @_ will be initialized, and manipulation of @_ will not work
    properly.

FUNCTIONS
  class_method
    Use this function to check that the sub is called as a class method. If
    the sub is called as a function, or as an instance method this function
    will die.

    If called in scalar context, will shift of the first argument of the @_
    array and return that value. If called in list or void context it will
    not change @_.

  instance_method
    Use this function to check that the sub is called as an instance method.
    If the sub is called as a function, or as a class method this function
    will die.

    If called in scalar context, will shift of the first argument of the @_
    array and return that value. If called in list or void context it will
    not change @_.

CAVEATS
    The two functions can NOT be called by the fully qualified method name
    because they are generated as closures in the calling package's
    namespace during import(). Writing "use Method::Assert ()" will cause
    import() not to be executed, which doesn't not make sense. See the
    section on *import* in "perldoc -f use" for more information.

SEMANTIC VERSIONING
    This module uses semantic versioning concepts from <http://semver.org/>.

SEE ALSO
    *   Method::Signatures

    *   Devel::Declare

    *   MooseX::Method::Signatures

    *   MooseX::Declare

SUPPORT
    You can find documentation for this module with the perldoc command.

      perldoc Method::Assert

  Websites
    *   Search CPAN

        <http://search.cpan.org/dist/Method-Assert>

    *   AnnoCPAN: Annotated CPAN documentation

        <http://annocpan.org/dist/Method-Assert>

    *   CPAN Ratings

        <http://cpanratings.perl.org/d/Method-Assert>

    *   CPAN Forum

        <http://cpanforum.com/dist/Method-Assert>

    *   RT: CPAN's Bug Tracker

        <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Method-Assert>

    *   CPANTS Kwalitee

        <http://cpants.perl.org/dist/overview/Method-Assert>

    *   CPAN Testers Results

        <http://cpantesters.org/distro/M/Method-Assert.html>

    *   CPAN Testers Matrix

        <http://matrix.cpantesters.org/?dist=Method-Assert>

    *   Source Code Repository

        The code is open to the world, and available for you to hack on.
        Please feel free to browse it and play with it, or whatever. If you
        want to contribute patches, please send me a diff or prod me to pull
        from your repository :)

        <git://github.com/robinsmidsrod/Method-Assert.git>

  Bugs
    Please report any bugs or feature requests to "bug-method-assert at
    rt.cpan.org", or through the web interface at
    <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Method-Assert>. I will
    be notified, and then you'll automatically be notified of progress on
    your bug as I make changes.

AUTHOR
      Robin Smidsrød <robin@smidsrod.no>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2010 by Robin Smidsrød.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

