Fixed typo, HIDE_GRIDLINES instead of HIDE_GRIDLINE
[p5sagit/Excel-Template.git] / lib / Excel / Template / Container / Conditional.pm
index 89cf668..6b492d3 100644 (file)
@@ -17,7 +17,7 @@ my %isOp = (
     (map { $_ => $_ } ( 'gt', 'lt', 'eq', 'ne', 'ge', 'le' )),
 );
 
-sub conditional_passes
+sub _conditional_passes
 {
     my $self = shift;
     my ($context) = @_;
@@ -26,8 +26,8 @@ sub conditional_passes
     return 0 unless $name =~ /\S/;
 
     my $val = $context->param($name);
-    $val = @{$val} while UNIVERSAL::isa($val, 'ARRAY');
-    $val = ${$val} while UNIVERSAL::isa($val, 'SCALAR');
+    $val = @{$val} while ref $val eq 'ARRAY';
+    $val = ${$val} while ref $val eq 'SCALAR';
 
     my $value = $context->get($self, 'VALUE');
     if (defined $value)
@@ -37,10 +37,6 @@ sub conditional_passes
             ? $isOp{$op}
             : '==';
 
-        # Force numerical context on both values;
-        $value *= 1;
-        $val *= 1;
-
         my $res;
         for ($op)
         {
@@ -57,25 +53,25 @@ sub conditional_passes
             /^ge$/ && do { $res = ($val ge $value); last };
             /^le$/ && do { $res = ($val le $value); last };
 
-            die "Unknown operator in conditional resolve", $/;
+            die "Unknown operator '$op' in conditional resolve", $/;
         }
 
-        return 0 unless $res;
+        return $res && 1;
     }
-    elsif (my $is = uc $context->get($self, 'IS'))
+
+    my $istrue = $val && 1;
+
+    my $is = uc($context->get($self, 'IS') || 'TRUE');
+    if ($is eq 'TRUE')
     {
-        my $istrue = $val && 1;
-        if ($is eq 'TRUE')
-        {
-            return 0 unless $istrue;
-        }
-        else
-        {
-            warn "Conditional 'is' value was [$is], defaulting to 'FALSE'" . $/
-                if $is ne 'FALSE';
+        return 0 unless $istrue;
+    }
+    else
+    {
+        warn "Conditional 'is' value was [$is], defaulting to 'FALSE'" . $/
+            if $is ne 'FALSE' && $^W;
 
-            return 0 if $istrue;
-        }
+        return 0 if $istrue;
     }
 
     return 1;
@@ -86,30 +82,30 @@ sub render
     my $self = shift;
     my ($context) = @_;
 
-    return 1 unless $self->conditional_passes($context);
+    return 1 unless $self->_conditional_passes($context);
 
     return $self->iterate_over_children($context);
 }
 
-sub max_of
-{
-    my $self = shift;
-    my ($context, $attr) = @_;
-
-    return 0 unless $self->conditional_passes($context);
-
-    return $self->SUPER::max_of($context, $attr);
-}
-
-sub total_of
-{
-    my $self = shift;
-    my ($context, $attr) = @_;
-
-    return 0 unless $self->conditional_passes($context);
-
-    return $self->SUPER::total_of($context, $attr);
-}
+#sub max_of
+#{
+#    my $self = shift;
+#    my ($context, $attr) = @_;
+#
+#    return 0 unless $self->_conditional_passes($context);
+#
+#    return $self->SUPER::max_of($context, $attr);
+#}
+#
+#sub total_of
+#{
+#    my $self = shift;
+#    my ($context, $attr) = @_;
+#
+#    return 0 unless $self->_conditional_passes($context);
+#
+#    return $self->SUPER::total_of($context, $attr);
+#}
 
 1;
 __END__
@@ -128,7 +124,7 @@ IF
 
 =head1 INHERITANCE
 
-Excel::Template::Container
+L<CONTAINER|Excel::Template::Container>
 
 =head1 ATTRIBUTES
 
@@ -136,26 +132,23 @@ Excel::Template::Container
 
 =item * NAME
 
-This is the name of the parameter to be testing. It is resolved like any other
-parameter. 
+This is the name of the parameter to test. It is resolved like any other parameter name. (q.v. L<VAR|Excel::Template::Element::Var> for more info.)
 
 =item * VALUE
 
-If VALUE is set, then a comparison operation is done. The value of NAME is
-compared to VALUE using the value of OP.
+If VALUE is set, then a comparison operation is done. The value of NAME is compared to VALUE using the value of OP.
 
 =item * OP
 
-If VALUE is set, then this is checked. If it isn't present, then '==' (numeric
-equality) is assumed. OP must be one of the numeric comparison operators or the
-string comparison operators. All 6 of each kind is supported.
+If VALUE is set, then this is checked. If it isn't present, then '==' (numeric equality) is assumed. OP must be one of Perl the numeric comparison operators or the string comparison operators. All 6 of each kind is supported.
+
+B<Note>: If you want to use < or <=, you must instead use &lt; or &lt;=. This is to make sure it will parse with L<XML::Parser>. You should not need to use &gt; or &gt;= instead of > and >=, respectively.
 
 =item * IS
 
-If VALUE is not set, then IS is checked. IS is allowed to be either "TRUE" or
-"FALSE". The boolean value of NAME is checked against IS.
+If VALUE is not set, then IS is checked. IS is allowed to be either "TRUE" or "FALSE". The boolean value of NAME is checked against IS.
 
-=back 4
+=back
 
 =head1 CHILDREN
 
@@ -175,8 +168,7 @@ None
     ... Children here
   </if>
 
-In the above example, the children will be executed if the value of __ODD__
-(which is set by the LOOP node) is false. So, for all even iterations.
+In the above example, the children will be executed if the value of __ODD__ (which is set by the L<LOOP|Excel::Template::Container::Loop> node) is false. So, for all even iterations.
 
 =head1 AUTHOR
 
@@ -184,6 +176,6 @@ Rob Kinyon (rob.kinyon@gmail.com)
 
 =head1 SEE ALSO
 
-LOOP
+L<LOOP|Excel::Template::Container::Loop>, L<VAR|Excel::Template::Element::Var>
 
 =cut