The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package 
    Data::Verifier::Test::Object;

use Moose;

#use overload '""' => sub { shift->value };

has 'value' => (
    is  => 'ro',
    isa => 'Str'
);

package main;

use strict;
use Test::More;

use Data::Verifier;
use Moose::Util::TypeConstraints;


{
    my %table = ( 'one' => 1, 'two' => 2, 'three' => 3 );


    coerce 'Int'
        => from 'Str'
            => via { $table{ $_ } };

    subtype 'ContrivedObject'
        => as 'Data::Verifier::Test::Object';
    coerce 'ContrivedObject'
        => from 'Str'
        => via { Data::Verifier::Test::Object->new( value => $_ ) };

    my $verifier = Data::Verifier->new(
        profile => {
            num => {
                type   => 'Int',
                coerce => 1,
            },
            object => {
                type => 'ContrivedObject',
                coerce => 1
            }
        }
    );

    my $results = $verifier->verify({ num => 'two', object => 'foo' });

    ok($results->success, 'success');
    cmp_ok($results->get_original_value('num'), 'eq', 'two', 'get_original_value');
    cmp_ok($results->get_value('num'), '==', 2, 'get_value(num) is 2');
}

{

    my $verifier = Data::Verifier->new(
        profile => {
            str => {
                type     => 'Str',
                coercion => Data::Verifier::coercion(from => 'Int', via => sub { (qw[ one two three ])[ ($_ - 1) ] }),
            },
        }
    );

    my $results = $verifier->verify({ str => 2 });

    ok($results->success, 'success');
    cmp_ok($results->get_original_value('str'), '==', 2, 'get_original_value');
    cmp_ok($results->get_value('str'), 'eq', 'two', 'get_value(str) is two');
}

done_testing;