convert all uses of Test::Exception to Test::Fatal.
[gitmo/Moose.git] / lib / Moose / Cookbook / Basics / Recipe4.pod
index 4e3747e..ee11206 100644 (file)
@@ -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<Company> 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);
       }
   };
 
@@ -119,7 +111,7 @@ CPAN tools for data validation.
 
 Finally, we introduce the C<required> attribute option.
 
-The the C<Address> class we define two subtypes. The first uses the
+In the C<Address> class we define two subtypes. The first uses the
 L<Locale::US> module to check the validity of a state. It accepts
 either a state abbreviation of full name.
 
@@ -213,17 +205,15 @@ C<employer> 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<BUILD> 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<Employee>
-objects.
+The C<BUILD> 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<Employee> objects.
 
 We also want to make sure that whenever the C<employees> attribute for
 a C<Company> is changed, we also update the C<employer> for each
@@ -233,18 +223,16 @@ To do this we can use an C<after> 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<BUILD> 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<BUILD> 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<Employee> objects..
 
-The B<Person> class does have demonstrate anything new. It has several
+The B<Person> class does not really demonstrate anything new. It has several
 C<required> attributes. It also has a C<predicate> method, which we
 first used in L<recipe 3|Moose::Cookbook::Basics::Recipe3>.
 
@@ -309,7 +297,7 @@ Dave Rolsky E<lt>autarch@urth.orgE<gt>
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright 2006-2009 by Infinity Interactive, Inc.
+Copyright 2006-2010 by Infinity Interactive, Inc.
 
 L<http://www.iinteractive.com>
 
@@ -327,7 +315,7 @@ it under the same terms as Perl itself.
 use Scalar::Util 'isweak';
 
 my $ii;
-lives_ok {
+ok ! exception {
     $ii = Company->new(
         {
             name    => 'Infinity Interactive',
@@ -363,7 +351,7 @@ lives_ok {
             ]
         }
     );
-}
+},
 '... created the entire company successfully';
 isa_ok( $ii, 'Company' );
 
@@ -472,54 +460,54 @@ foreach my $employee ( @{ $new_company->employees } ) {
 
 ## check some error conditions for the subtypes
 
-dies_ok {
+ok exception {
     Address->new( street => {} ),;
-}
+},
 '... we die correctly with bad args';
 
-dies_ok {
+ok exception {
     Address->new( city => {} ),;
-}
+},
 '... we die correctly with bad args';
 
-dies_ok {
+ok exception {
     Address->new( state => 'British Columbia' ),;
-}
+},
 '... we die correctly with bad args';
 
-lives_ok {
+ok ! exception {
     Address->new( state => 'Connecticut' ),;
-}
+},
 '... we live correctly with good args';
 
-dies_ok {
+ok exception {
     Address->new( zip_code => 'AF5J6$' ),;
-}
+},
 '... we die correctly with bad args';
 
-lives_ok {
+ok ! exception {
     Address->new( zip_code => '06443' ),;
-}
+},
 '... we live correctly with good args';
 
-dies_ok {
+ok exception {
     Company->new(),;
-}
+},
 '... we die correctly without good args';
 
-lives_ok {
+ok ! exception {
     Company->new( name => 'Foo' ),;
-}
+},
 '... we live correctly without good args';
 
-dies_ok {
+ok exception {
     Company->new( name => 'Foo', employees => [ Person->new ] ),;
-}
+},
 '... we die correctly with good args';
 
-lives_ok {
+ok ! exception {
     Company->new( name => 'Foo', employees => [] ),;
-}
+},
 '... we live correctly with good args';
 
 =end testing