On Tue, Apr 13, 2010 at 01:05:48PM -0400, Sir Robert Burbridge wrote:
> Hey,
>
> I've read through the MooseX::Types docs many times, but I can't quite
> seem to get this to work. I've never worked with MooseX::Types before.
> Could someone show me what I'm missing?
>
> I'm trying to extend MooseX::Types::Set::Object to add two methods
> (search and find) to allow getting subsets (or objects) based on search
> criteria. Here's what I have so far, and it doesn't work. I don't
> really have any broken code to put in here in place of the "???"
> (because broken implies something even close to working). I tried a
> bunch of stuff with "extends", "duck_type", "coerce", and "subtype",
> before realizing I was just sort of flailing around =) I *think* I'm
> supposed to be using some kind of role (to apply methods only?) but I
> don't understand the manual or cookbook at all in this area.
>
> The desired functionality:
> - define a set of objects as a moose object property.
> - use my $results = $obj->set->search(...criteria...) to find a proper
> subset.
> - use my $obj = $obj->set->find(...criteria...) to find the first
> matching object (or undef)
>
> If I get it working, I'm happy to submit a doc patch =)
>
> Thanks,
>
> -Sir
You're confusing classes and types. You want to do something like this:
package My::Set::Object;
use Moose;
extends 'Set::Object';
sub search { ... }
sub find { ... }
package My::Types;
use MooseX::Types -declare => ['MySetObject'];
class_type MySetObject, { class => 'My::Set::Object' };
Basically, the functionality needs to go in an actual subclass of
Set::Object, and then you need to create a type for that subclass.
-doy