count empty values and use that in _is_numeric
authorDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 17 May 2010 15:51:42 +0000 (17:51 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 17 May 2010 15:51:42 +0000 (17:51 +0200)
This allows better detection of sparse numeric types

lib/MojoFacets/Data.pm

index 4811467..6941e89 100644 (file)
@@ -103,19 +103,21 @@ sub _load_path {
        foreach my $e ( @{ $data->{items} } ) {
                foreach my $n ( keys %$e ) {
                        $stats->{$n}->{count}++;
+                       my @v;
                        if ( ref $e->{$n} eq 'ARRAY' ) {
-
                                $stats->{$n}->{array} += $#{ $e->{$n} } + 1;
-
-                               foreach my $x ( @{$e->{$n}} ) {
-                                       $stats->{$n}->{numeric}++
-                                               if $x =~ m/^[-+]?([0-9]*\.[0-9]+|[0-9]+)$/;
-                               }
-
+                               @v = @{ $e->{$n} };
                        } else {
+                               @v = ( $e->{$n} );
+                       }
+
+                       foreach my $x ( @v ) {
                                $stats->{$n}->{numeric}++
-                                       if $e->{$n} =~ m/^[-+]?([0-9]*\.[0-9]+|[0-9]+)$/;
+                                       if $x =~ m/^[-+]?([0-9]*\.[0-9]+|[0-9]+)$/;
+                               $stats->{$n}->{empty}++
+                                       if $x =~ m/^\s*$/;
                        }
+
                }
        }
 
@@ -382,8 +384,10 @@ sub _is_numeric {
        my $stats = $self->_loaded( 'stats' );
 
        # sort facet numerically if more >50% elements are numeric
+       my $count = $stats->{$name}->{count};
+       $count   -= $stats->{$name}->{empty} if defined $stats->{$name}->{empty};
        defined $stats->{$name}->{numeric} &&
-               $stats->{$name}->{numeric} > $stats->{$name}->{count} / 2;
+               $stats->{$name}->{numeric} > $count / 2;
 }
 
 sub facet {