NAME
    Git::PurePerl::Walker - Walk over a sequence of commits in a
    Git::PurePerl repo

VERSION
    version 0.003001

SYNOPSIS
            use Git::PurePerl::Walker;
            use Git::PurePerl::Walker::Method::FirstParent;

            my $repo = Git::PurePerl->new( ... );

            my $walker = Git::PurePerl::Walker->new(
                    repo => $repo,
                    method => Git::PurePerl::Walker::Method::FirstParent->new(
                            start => $repo->ref_sha1('refs/heads/master'),
                    ),
                    on_commit => sub {
                            my ( $commit ) = @_;
                            print $commit->sha1;
                    },
            );

            $walker->step_all;

CONSTRUCTOR ARGUMENTS
  repo
    Mandatory: An instance of "Git::PurePerl" representing the repository to
    work with.

  method
    Mandatory: either a "Str" describing a Class Name Suffix, or an "Object"
    that "does" "Git::PurePerl::Walker::Role::Method".

    If its a "Str", the "Str" will be expanded as follows:

            ->new(
                    ...
                    method => 'Foo',
                    ...
            );

            $className = 'Git::PurePerl::Walker::Method::Foo'

    And the resulting class will be loaded, and instantiated for you. (
    Assuming of course, you don't need to pass any fancy args ).

    If you need fancy args, or a class outside the
    "Git::PurePerl::Walker::Method::" namespace, constructing the object
    will have to be your responsibility.

            ->new(
                    ...
                    method => Foo::Class->new(),
                    ...
            )

  on_commit
    Mandatory: either a "Str" that can be expanded in a way similar to that
    by "*method*", a "CodeRef", or an object that "does"
    "Git::PurePerl::Walker::Role::OnCommit".

    If passed a "Str" it will be expanded like so:

            ->new(
                    ...
                    on_commit => $str,
                    ...
            );

            $class = 'Git::PurePerl::Walker::OnCommit::' . $str;

    And the resulting class loaded and instantiated.

    If passed a "CodeRef", "Git::PurePerl::Walker::OnCommit::CallBack" will
    be loaded and your "CodeRef" will be passed as an argument.

            ->new(
                    ...
                    on_commit => sub {
                            my ( $commit ) = @_;

                    },
                    ...
            );

    If you need anything fancier, or requiring an unusual namespace, you'll
    want to construct the object yourself.

            ->new(
                    ...
                    on_commit => Foo::Package->new()
                    ...
            );

METHODS
  reset
            $walker->reset();

    Reset the walk routine back to the state it was before you walked.

  step
    Increments one step forward in the git history, and dispatches the
    object to the "OnCommit" handlers.

    If there are more possible steps to take, it will return a true value.

            while ( $walker->step ) {
                    /* Code to execute if walker has more items */
            }

    This code is almost identical to:

            while(1) {
                    $walker->on_commit->handle( $walker->method->current );

                    last if not $walker->method->has_next;

                    $walker->method->next;

                    /*  Code to execute if walker has more items */
            }

  step_all
            my $steps = $walker->step_all;

    Mostly a convenience method to iterate until it can iterate no more, but
    without you needing to wrap it in a while() block.

    Returns the number of steps executed.

ATTRIBUTES
  repo
  method
  on_commit
ATTRIBUTE GENERATED METHODS
  repo
            # Getter
            my $repo = $walker->repo();

  method
            # Getter
            my $method_object = $walker->method();

  on_commit
            # Getter
            my $on_commit_object = $walker->on_commit();

PRIVATE ATTRIBUTES
  _method
  _on_commit
PRIVATE METHODS
  _build_repo
  _build_method
  _build_on_commit
PRIVATE ATTRIBUTE GENERATED METHODS
  _method
            # Getter
            my $methodish = $walker->_method();

  _on_commit
            # Getter
            my $on_commitish => $walker->_on_commit();

AUTHOR
    Kent Fredric <kentnl@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2014 by Kent Fredric <kentnl@cpan.org>.

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