NAME
    Dist::Zilla::Util::ConfigDumper - Easy implementation of 'dumpconfig'

VERSION
    version 0.003003

SYNOPSIS
      ...

      with 'Dist::Zilla::Role::Plugin';
      use Dist::Zilla::Util::ConfigDumper qw( config_dumper );

      around dump_config => config_dumper( __PACKAGE__, qw( foo bar baz ) );

FUNCTIONS
  "config_dumper"
      config_dumper( __PACKAGE__, qw( method list ) );

    Returns a function suitable for use with "around dump_config".

      my $sub = config_dumper( __PACKAGE__, qw( method list ) );
      around dump_config => $sub;

    Or

      around dump_config => sub {
        my ( $orig, $self, @args ) = @_;
        return config_dumper(__PACKAGE__, qw( method list ))->( $orig, $self, @args );
      };

    Either way:

      my $function = config_dumper( $package_name_for_config, qw( methods to call on $self ));
      my $hash = $function->( $function_that_returns_a_hash, $instance_to_call_methods_on, @somethinggoeshere );

    =~ All of this approximates:

      around dump_config => sub {
        my ( $orig , $self , @args ) = @_;
        my $conf = $self->$orig( @args );
        my $payload = {};

        for my $method ( @methods ) {
          try {
            $payload->{ $method } = $self->$method();
          };
        }
        $config->{+__PACKAGE__} = $payload;
      }

    Except with some extra "things dun goofed" handling.

  "dump_plugin"
    This function serves the other half of the equation, emulating "dzil"'s
    own internal behavior for extracting the "plugin" configuration data.

      for my $plugin ( @{ $zilla->plugins } ) {
        pp( dump_plugin( $plugin )); # could prove useful somewhere.
      }

    Its not usually something you need, but its useful in:

    *   Tests

    *   Crazy Stuff like injecting plugins

    *   Crazy Stuff like having "Child" plugins

    This serves to be a little more complicated than merely calling
    "->dump_config", as the structure "dzil" uses is:

      {
        class   => ...
        name    => ...
        version => ...
        config  => $dump_config_results_here
      }

    And of course, there's a bunch of magic stuff with "meta", "can" and "if
    keys %$configresults"

    All that insanity is wrapped in this simple interface.

ADVANCED USE
  CALLBACKS
    Internally

      config_dumper( $pkg, qw( method list ) );

    Maps to a bunch of subs, so its more like:

      config_dumper( $pkg, sub {
        my ( $instance, $payload ) = @_;
        $payload->{'method'} = $instance->method;
      }, sub {
        $_[1]->{'list'} = $_[0]->list;
      });

    So if you want to use that because its more convenient for some problem,
    be my guest.

      around dump_config => config_dumper( __PACKAGE__, sub {
        $_[1]->{'x'} = 'y'
      });

    is much less ugly than

      around dump_config => sub {
        my ( $orig, $self, @args ) = @_;
        my $conf = $self->$orig(@args);
        $config->{+__PACKAGE__} = { # if you forget the +, things break
           'x' => 'y'
        };
        return $config;
      };

  DETAILED CONFIGURATION
    There's an additional feature for advanced people:

      config_dumper( $pkg, \%config );

   "attrs"
      config_dumper( $pkg, { attrs => [qw( foo bar baz )] });

    This is for cases where you want to deal with "Moose" attributes, but
    want added safety of NOT loading attributes that have no value yet.

    For each item in "attrs", we'll call "Moose" attribute internals to
    determine if the attribute named has a value, and only then will we
    fetch it.

AUTHOR
    Kent Fredric <kentnl@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2014 by Kent Fredric
    <kentfredric@gmail.com>.

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

