RFC: Fix is_subtype_of to handle not-yet-defined role

[email protected] ("Christopher J. Madsen")
Newsgroups perl.moose
Message-ID <[email protected]>
After MooseX-Types 0.35 was released, I started getting failure reports
for a number of my modules that use it.  This turned out to be caused by
this issue:

  use Moose::Util::TypeConstraints;
  # { package Foo::Role; use Moose::Role; }
  my $type = role_type('Foo::Role');
  $type->is_subtype_of('Bar');

This dies: Can't call method "does_role" on an undefined value at
Moose/Meta/TypeConstraint/Role.pm line 101.

Uncommenting the definition of Foo::Role will remove the error.  But
it's often necessary to define types (and subtypes) involving roles
before the role itself is defined.  For instance, in a tree structure, a
role might declare attributes using such types.

It would be possible to work around this in MooseX-Types, but it seems
more straightforward to fix the root issue in
Moose::Meta::TypeConstraint::Role, and that's what I did.

Please review branch rfc/undef-role.  It adds a test to demonstrate the
problem and then fixes it by checking the return value of
Class::MOP::class_of($self->role) before calling methods on it.

I've run "MOOSE_TEST_MD=MooseX prove -b t/author-test-my-dependents.t"
on it, and don't get any additional failures (over the ones that happen
on master).

Related RT tickets:
  https://rt.cpan.org/Ticket/Display.html?id=77299
  https://rt.cpan.org/Ticket/Display.html?id=77303

Thanks.

-- 
Chris Madsen                                          [email protected]
  --------------------  http://www.cjmweb.net  --------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.