document and test BSE::Sort a little
authorTony Cook <tony@develop-help.com>
Thu, 25 Aug 2011 04:28:36 +0000 (14:28 +1000)
committerTony Cook <tony@develop-help.com>
Thu, 25 Aug 2011 04:28:36 +0000 (14:28 +1000)
MANIFEST
site/cgi-bin/modules/BSE/Sort.pm
t/t014bsesort.t [new file with mode: 0644]

index 386538e..3677845 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -805,6 +805,7 @@ t/t010template.t            Tests Squirrel::Template
 t/t011dhdates.t                        Tests DevHelp::Date
 t/t012validate.t
 t/t013country.t
+t/t014bsesort.t
 t/t050format.t                 DevHelp::Formatter tests
 t/t060parms.t
 t/t070sqldates.t               Test SQL date tools
index 279f7a2..b6d7ad5 100644 (file)
@@ -5,7 +5,7 @@ require 'Exporter.pm';
 @ISA = qw(Exporter);
 @EXPORT = qw(bse_sort);
 
-our $VERSION = "1.000";
+our $VERSION = "1.001";
 
 my %backwhacked =
   (
@@ -15,6 +15,33 @@ my %backwhacked =
    '"' => '"',
   );
 
+=item bse_sort(\%types, $spec, @data)
+
+Sort and/or filter the supplied list in C<@data> based on the
+sort/filter specification in C<$spec> using the column types in
+C<%types>
+
+C<$spec> is a string containing either or both of a sort specification
+followed by a filter specification.
+
+A sort specification is C<sort=> followed by a comma separated list of
+columns to sort.  A column name can have a preceding C<+> to indicate
+(the default) ascending sort, or C<-> for a descending sort.
+
+A filter specification is a space separated list of comparisons.
+
+Each comparison is a column name, operator and value.
+
+Possible operators are the standard numeric operators and C<=~>.
+
+The type of comparison (numeric or string) depends on whether the
+value is a number or a quoted string.
+
+The value for the C<=~> operator must be a regexp formatted as
+C</regexp/flags>.
+
+=cut
+
 sub bse_sort {
   my ($types, $opts, @data) = @_;
 
diff --git a/t/t014bsesort.t b/t/t014bsesort.t
new file mode 100644 (file)
index 0000000..9c29202
--- /dev/null
@@ -0,0 +1,23 @@
+#!perl -w
+use strict;
+use Test::More tests => 3;
+
+BEGIN { use_ok("BSE::Sort", "bse_sort"); }
+
+{
+  my $a100 = { a => 100, b => 3 };
+  my $a2 = { a => 2, b => 2 };
+  my $a30 = { a => 30, b => 4 };
+
+  my @in = ( $a2, $a100, $a30 );
+  my %types = qw(a n b n);
+
+  {
+    my @out = bse_sort(\%types, "sort=a", @in);
+    is_deeply(\@out, [ $a2, $a30, $a100 ], "check simple numeric sort");
+  }
+  {
+    my @out = bse_sort(\%types, "filter= b >= 3", @in);
+    is_deeply(\@out, [ $a100, $a30 ], "check simple filtering");
+  }
+}