package MyApp::Introspect;

use Validation::Class;

sub per_class {

    my ($self, $code) = @_;

    $self->proto->relatives->each(
        sub {

            my ($alias, $namespace) = @_;

            # do something with each class
            $code->($namespace);

        }
    );

}

sub per_field_per_class {

    my ($self, $code) = @_;

    $self->per_class(
        sub {

            my $namespace = shift;

            my $class = $namespace->new;

            foreach my $field (sort $class->fields->keys) {

                # do something with each field
                $code->($class, $class->fields->{$field});

            }

        }
    );

}

1;
