options to ignore specific callers, more TT tests
[scpubgit/HTML-String.git] / lib / HTML / String / Value.pm
index 2ef0ba9..2e48349 100644 (file)
@@ -8,6 +8,7 @@ use Data::Munge;
 use overload
     '""'   => 'escaped_string',
     '.'    => 'dot',
+    'bool' => 'is_true',
 
     fallback => 1,
 ;
@@ -15,6 +16,8 @@ use overload
 sub new {
     my ($class, @raw_parts) = @_;
 
+    my $opts = (ref($raw_parts[-1]) eq 'HASH') ? pop(@raw_parts) : {};
+
     my @parts = map {
         if (ref($_) eq 'ARRAY') {
             $_
@@ -25,7 +28,7 @@ sub new {
         }
     } @raw_parts;
 
-    my $self = bless { parts => \@parts }, $class;
+    my $self = bless { parts => \@parts, %$opts }, $class;
 
     return $self;
 }
@@ -33,6 +36,10 @@ sub new {
 sub escaped_string {
     my $self = shift;
 
+    if ($self->{ignore}{scalar caller}) {
+        return $self->unescaped_string;
+    }
+
     return join '', map +(
         $_->[1]
             ? byval { 
@@ -70,7 +77,12 @@ sub dot {
         push @parts, @new_parts;
     }
 
-    return ref($self)->new(@parts);
+    return ref($self)->new(@parts, { ignore => $self->{ignore} });
+}
+
+sub is_true {
+    my ($self) = @_;
+    return 1 if grep length($_), map $_->[0], @{$self->{parts}};
 }
 
 sub ref { '' }