The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package DBIx::Skinny::Mixin;
use strict;
use warnings;
use Carp ();

sub import {
    my($class, %args) = @_;
    Carp::croak "Usage: use DBIx::Skinny::Mixin modules => ['MixinModuleName', 'MixinModuleName2', .... ]"
        unless $args{modules} && ref($args{modules}) eq 'ARRAY';

    my $caller = caller;
    for my $module (@{ $args{modules} }) {
        my $pkg = $module;
        $pkg = __PACKAGE__ . "::$pkg" unless $pkg =~ s/^\+//;

        eval "use $pkg"; ## no critic
        if ($@) {
            Carp::croak $@;
        }

        my $register_methods = $pkg->register_method;
        while (my($method, $code) = each %{ $register_methods }) {
            no strict 'refs';
            *{"$caller\::$method"} = $code;
        }
    }
}

1;

=head1 NAME

DBIx::Skinny::Mixin - mixin manager for DBIx::Skinny

=head1 SYNOPSIS

  use DBIx::Skinny::Mixin modules => ['mixin_module_names'];

=cut