Skip to content

Commit

Permalink
Add ::Verifier::Parent
Browse files Browse the repository at this point in the history
  • Loading branch information
Arthur Axel 'fREW' Schmidt committed May 9, 2015
1 parent 5642ffd commit 1203068
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 0 deletions.
1 change: 1 addition & 0 deletions Changes
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Revision history for {{$dist->name}}

{{$NEXT}}
- Add ::Verifier::Parent

2.026000 2015-05-02 00:27:28-05:00 America/Chicago
- Add new ::Schema::Verifier framework
Expand Down
45 changes: 45 additions & 0 deletions lib/DBIx/Class/Helper/Schema/Verifier/Parent.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package DBIx::Class::Helper::Schema::Verifier::Parent;

# ABSTRACT: Verify that the Results and ResultSets have the correct base class

use strict;
use warnings;

use MRO::Compat;
use mro 'c3';

use base 'DBIx::Class::Helper::Schema::Verifier';

sub result_verifiers {
(
sub {
my ($s, $result, $set) = @_;

my $base_result = $s->base_result;
my $base_set = $s->base_resultset;

die "$result is not a $base_result" unless $result->isa($base_result);
die "$set is not a $base_set" unless $set->isa($base_set);
},
shift->next::method,
)
}

sub base_result { 'DBIx::Class::Core' }
sub base_resultset { 'DBIx::Class::ResultSet' }

1;

=head1 SYNOPSIS
package MyApp::Schema;
__PACKAGE__->load_components('Helper::Schema::Verifier::Parent');
sub base_result { 'MyApp::Schema::Result' }
sub base_resultset { 'MyApp::Schema::ResultSet' }
=head1 DESCRIPTION
C<DBIx::Class::Helper::Schema::Verifier::Parent> verifies that all of your
results and resultsets use the base class that you specify.
48 changes: 48 additions & 0 deletions t/Schema/Verifier/Parent.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
use strict;
use warnings;

use lib 't/lib';
use Test::More;
use Test::Fatal;

is(exception {
TSchema->$_('TPassResult', 'TPassResultSet') for TSchema->result_verifiers;
}, undef, 'Result and Set are fine');

like(exception {
TSchema->$_('TFailResult', 'TPassResultSet') for TSchema->result_verifiers;
}, qr/^TFailResult is not a Herp/, 'Result fails');

like(exception {
TSchema->$_('TPassResult', 'TFailResultSet') for TSchema->result_verifiers;
}, qr/^TFailResultSet is not a Derp/, 'ResultSet fails');

done_testing;

BEGIN {
package TSchema;

use base 'DBIx::Class::Helper::Schema::Verifier::Parent';

sub base_result { 'Herp' }
sub base_resultset { 'Derp' }

package Herp;
use Moo;
package Derp;
use Moo;

package TPassResult;

use base 'Herp';

package TPassResultSet;

use base 'Derp';

package TFailResult;
use Moo;
package TFailResultSet;
use Moo;
}

0 comments on commit 1203068

Please sign in to comment.