1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
package DBIx::Class::Helper::Schema::DidYouMean;
$DBIx::Class::Helper::Schema::DidYouMean::VERSION = '2.037000';
# ABSTRACT: Nice error messages when you misspell the name of a ResultSet
use strict;
use warnings;
use parent 'DBIx::Class::Schema';
use Text::Brew 'distance';
use Try::Tiny;
use namespace::clean;
sub source {
my ($self, @rest) = @_;
my $method = $self->next::can;
try {
$self->$method(@rest)
} catch {
if (m/Can't find source for (.+?) at/) {
my @presentsources = map {
(distance($_, $1))[0] < 3 ? " * $_ <-- Possible Match\n" : " $_\n";
} sort $self->storage->schema->sources;
die <<"ERR";
$_
The ResultSet "$1" is not part of your schema.
To help you debug this issue, here's a list of the actual sources that the
schema knows about:
@presentsources
ERR
}
die $_;
}
}
1;
__END__
=pod
=head1 NAME
DBIx::Class::Helper::Schema::DidYouMean - Nice error messages when you misspell the name of a ResultSet
=head1 SYNOPSIS
package MyApp::Schema;
__PACKAGE__->load_components('Helper::Schema::DidYouMean');
Elsewhere:
$schema->resultset('Usre')->search(...)->...
And a nice exception gets thrown:
The ResultSet "Usre" is not part of your schema.
To help you debug this issue, here's a list of the actual sources that the
schema knows about:
Account
Permission
Role
* User <-- Possible Match
=head1 DESCRIPTION
This helper captures errors thrown when you use the C<resultset> method on your
schema and typo the source name. It tries to highlight the best guess as to
which you meant to type.
=head1 AUTHOR
Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 by Arthur Axel "fREW" Schmidt.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|