Added stringify to name and error check to stop creation of object without a name.
Mark Addison [Tue, 23 Mar 2004 21:05:20 +0000 (21:05 +0000)]
lib/SQL/Translator/Schema/Field.pm
lib/SQL/Translator/Schema/Table.pm

index 2e76f89..c574fb1 100644 (file)
@@ -1,7 +1,7 @@
 package SQL::Translator::Schema::Field;
 
 # ----------------------------------------------------------------------
-# $Id: Field.pm,v 1.13 2004-02-09 22:15:15 kycl4rk Exp $
+# $Id: Field.pm,v 1.14 2004-03-23 21:05:19 grommit Exp $
 # ----------------------------------------------------------------------
 # Copyright (C) 2002-4 SQLFairy Authors
 #
@@ -50,7 +50,16 @@ use SQL::Translator::Utils 'parse_list_arg';
 use base 'Class::Base';
 use vars qw($VERSION $TABLE_COUNT $VIEW_COUNT);
 
-$VERSION = sprintf "%d.%02d", q$Revision: 1.13 $ =~ /(\d+)\.(\d+)/;
+$VERSION = sprintf "%d.%02d", q$Revision: 1.14 $ =~ /(\d+)\.(\d+)/;
+
+# Stringify to our name, being careful not to pass any args through so we don't
+# accidentally set it to undef. We also have to tweak bool so the object is
+# still true when it doesn't have a name (which shouldn't happen!).
+use overload
+    '""'     => sub { shift->name },
+    'bool'   => sub { $_[0]->name || $_[0] },
+    fallback => 1,
+;
 
 # ----------------------------------------------------------------------
 sub init {
@@ -416,15 +425,22 @@ sub name {
 
 Get or set the field's name.
 
-  my $name = $field->name('foo');
+ my $name = $field->name('foo');
+
+The field object will also stringify to its name.
+
+ my $setter_name = "set_$field";
+
+Errors ("No field name") if you try to set a blank name.
 
 =cut
 
     my $self = shift;
 
-    if ( my $arg = shift ) {
+    if ( @_ ) {
+        my $arg = shift || return $self->error( "No field name" );
         if ( my $table = $self->table ) {
-            return $self->error( qq[Can't use field name "$arg": table exists] )
+            return $self->error( qq[Can't use field name "$arg": field exists] )
                 if $table->get_field( $arg );
         }
 
index f18a798..9e4e4e2 100644 (file)
@@ -1,7 +1,7 @@
 package SQL::Translator::Schema::Table;
 
 # ----------------------------------------------------------------------
-# $Id: Table.pm,v 1.24 2004-02-09 22:15:15 kycl4rk Exp $
+# $Id: Table.pm,v 1.25 2004-03-23 21:05:20 grommit Exp $
 # ----------------------------------------------------------------------
 # Copyright (C) 2002-4 SQLFairy Authors
 #
@@ -51,7 +51,17 @@ use Data::Dumper;
 use base 'Class::Base';
 use vars qw( $VERSION $FIELD_ORDER );
 
-$VERSION = sprintf "%d.%02d", q$Revision: 1.24 $ =~ /(\d+)\.(\d+)/;
+$VERSION = sprintf "%d.%02d", q$Revision: 1.25 $ =~ /(\d+)\.(\d+)/;
+
+
+# Stringify to our name, being careful not to pass any args through so we don't
+# accidentally set it to undef. We also have to tweak bool so the object is
+# still true when it doesn't have a name (which shouldn't happen!).
+use overload
+    '""'     => sub { shift->name },
+    'bool'   => sub { $_[0]->name || $_[0] },
+    fallback => 1,
+;
 
 # ----------------------------------------------------------------------
 sub init {
@@ -244,7 +254,8 @@ existing field, you will get an error and the field will not be created.
     }
 
     $field->order( ++$FIELD_ORDER );
-    my $field_name = $field->name or return $self->error('No name');
+    # We know we have a name as the Field->new above errors if none given.
+    my $field_name = $field->name;
 
     if ( exists $self->{'fields'}{ $field_name } ) { 
         return $self->error(qq[Can't create field: "$field_name" exists]);
@@ -576,8 +587,11 @@ sub name {
 
 Get or set the table's name.
 
-If provided an argument, checks the schema object for a table of 
-that name and disallows the change if one exists.
+Errors ("No table name") if you try to set a blank name.
+
+If provided an argument, checks the schema object for a table of
+that name and disallows the change if one exists (setting the error to
+"Can't use table name "%s": table exists").
 
   my $table_name = $table->name('foo');
 
@@ -585,7 +599,8 @@ that name and disallows the change if one exists.
 
     my $self = shift;
 
-    if ( my $arg = shift ) {
+    if ( @_ ) {
+        my $arg = shift || return $self->error( "No table name" );
         if ( my $schema = $self->schema ) {
             return $self->error( qq[Can't use table name "$arg": table exists] )
                 if $schema->get_table( $arg );