so far the best hack is : sub location; has location => (...);
On Sun, Jan 18, 2009 at 3:40 AM, Paul Fenwick <p...@perltraining.com.au> wrote: > G'day Moosers, > > I'm currently working on some quick lightning talks demonstrating Moose and > why it's useful. One of the examples I'm using for roles looks like this: > > package SunSmart; > > use Moose::Role; > use Weather::Google; > > use constant HOT => 28; # Deg C. > > requires 'go_outside'; > requires 'location'; > > before 'go_outside' => sub { > my ($self) = @_; > > my $weather = Weather::Google->new( > $self->location > ); > > if ($weather->current->{temp_c} > HOT) { > print "Don't forget your hat!\n"; > } > } > > In short, if something has a location, and the ability to go_outside, then > we can give it the SunSmart role, and it won't forget its hat if it's too hot. > > Unfortunately for me, `location` is an attribute on practically all of my > classes, and Moose doesn't seem to like having an attribute to satisfy a > 'requires': > > 'SunSmart' requires the method 'location' to be implemented by > 'Person::Social'but the method is only an attribute accessor at > /usr/lib/perl5/site_perl/5.8/Moose/Meta/Role/Application.pm line 59 > > This makes me sad, since I really *do* require a location method, but it's > absolutely fine if it's an attribute. > > I know there have been some discussions about this in the past, with the > possibility of a 'requires_attr' or similar keyword, although to the best of > my knowledge this is not yet implemented. > > In the meantime, is there any easy[1] way to tell Moose that attributes are > just fine to satisify 'requires' dependencies? > > Many thanks, > > Paul > > [1] Since I'm writing short talks for mixed audiences, I can't show anything > too scary. Sure, I'm willing to dig around in the guts of all sorts of > things, but I'm trying to dispel the myth that as a regular Perl programmer > you should have to. > > -- > Paul Fenwick <p...@perltraining.com.au> | http://perltraining.com.au/ > Director of Training | Ph: +61 3 9354 6001 > Perl Training Australia | Fax: +61 3 9354 2681 > > -- benh~ http://three.sentenc.es/