X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FCookbook%2FBasics%2FRecipe4.pod;h=325b43b82bea0a7d2417b3a68574641bf2c208e1;hb=53a4d826caec4b82f5b23e0bc0a4e8e2f44243b9;hp=b771262a95780e6bd93481a2c4417e166aa9c948;hpb=5547fba771baa52a04ec8dcb3673032ed4c1c0cc;p=gitmo%2FMoose.git diff --git a/lib/Moose/Cookbook/Basics/Recipe4.pod b/lib/Moose/Cookbook/Basics/Recipe4.pod index b771262..325b43b 100644 --- a/lib/Moose/Cookbook/Basics/Recipe4.pod +++ b/lib/Moose/Cookbook/Basics/Recipe4.pod @@ -3,14 +3,10 @@ =begin testing-SETUP -BEGIN { - eval 'use Regexp::Common; use Locale::US;'; - if ($@) { - diag 'Regexp::Common & Locale::US required for this test'; - ok(1); - exit 0; - } -} +use Test::Requires { + 'Locale::US' => '0', + 'Regexp::Common' => '0', +}; =end testing-SETUP @@ -56,19 +52,15 @@ Moose::Cookbook::Basics::Recipe4 - Subtypes, and modeling a simple B cl sub BUILD { my ( $self, $params ) = @_; - if ( @{ $self->employees || [] } ) { - foreach my $employee ( @{ $self->employees } ) { - $employee->employer($self); - } + foreach my $employee ( @{ $self->employees || [] } ) { + $employee->employer($self); } } after 'employees' => sub { my ( $self, $employees ) = @_; - if ($employees) { - foreach my $employee ( @{$employees} ) { - $employee->employer($self); - } + foreach my $employee ( @{ $employees || [] } ) { + $employee->employer($self); } }; @@ -114,12 +106,12 @@ declaratively create type constraints without building an entire class. In the recipe we also make use of L and L -to build constraints, showing how how constraints can make use of -existing CPAN tools for data validation. +to build constraints, showing how constraints can make use of existing +CPAN tools for data validation. Finally, we introduce the C attribute option. -The the C
class we define two subtypes. The first uses the +In the C
class we define two subtypes. The first uses the L module to check the validity of a state. It accepts either a state abbreviation of full name. @@ -188,7 +180,7 @@ where each element of the array is an C object. It's worth noting that an I array reference also satisfies this constraint. -Parameterizable type constraints (or "container types), such as +Parameterizable type constraints (or "container types"), such as C, can be made more specific with a type parameter. In fact, we can arbitrarily nest these types, producing something like C. However, you can also just use the type by @@ -213,17 +205,15 @@ C attribute: sub BUILD { my ( $self, $params ) = @_; - if ( $self->employees ) { - foreach my $employee ( @{ $self->employees } ) { - $employee->employer($self); - } + foreach my $employee ( @{ $self->employees || [] } ) { + $employee->employer($self); } } -The C method is executed after type constraints are checked, so -it is safe to assume that C<< $self->employees >> will return an array -reference, and that the elements of that array will be C -objects. +The C method is executed after type constraints are checked, so it is +safe to assume that if C<< $self->employees >> has a value, it will be an +array reference, and that the elements of that array reference will be +C objects. We also want to make sure that whenever the C attribute for a C is changed, we also update the C for each @@ -233,18 +223,16 @@ To do this we can use an C modifier: after 'employees' => sub { my ( $self, $employees ) = @_; - if ($employees) { - foreach my $employee ( @{$employees} ) { - $employee->employer($self); - } + foreach my $employee ( @{ $employees || [] } ) { + $employee->employer($self); } }; -Again, as with the C method, we know that the type constraint -check has already happened, so we can just check for definedness on the -C<$employees> argument. +Again, as with the C method, we know that the type constraint check has +already happened, so we know that if C<$employees> is defined it will contain +an array reference of C objects.. -The B class does have demonstrate anything new. It has several +The B class does not really demonstrate anything new. It has several C attributes. It also has a C method, which we first used in L. @@ -309,7 +297,7 @@ Dave Rolsky Eautarch@urth.orgE =head1 COPYRIGHT AND LICENSE -Copyright 2006-2009 by Infinity Interactive, Inc. +Copyright 2006-2010 by Infinity Interactive, Inc. L