hash_filter now accepts whole line from record and field number. Removed
authorDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 13 Jul 2006 13:27:27 +0000 (13:27 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 13 Jul 2006 13:27:27 +0000 (13:27 +0000)
oddly placed implementation of regexpes (moved to WebPAC via hash_filter as
it should...)

git-svn-id: file:///home/dpavlin/svn/Biblio-Isis/trunk@64 4670fa4d-42ec-0310-ab5b-a66af6943492

lib/Biblio/Isis.pm
t/2_isis.t

index a7c73ed..96e14d9 100644 (file)
@@ -84,14 +84,11 @@ Open ISIS database
        read_fdt => 1,
        include_deleted => 1,
        hash_filter => sub {
-               my $v = shift;
+               my ($v,$field_number) = @_;
                $v =~ s#foo#bar#g;
        },
        debug => 1,
        join_subfields_with => ' ; ',
-       regexps => [
-               's/something/else/g',
-       ],
  );
 
 Options are described below:
@@ -129,12 +126,6 @@ Define delimiter which will be used to join repeatable subfields. This
 option is included to support lagacy application written against version
 older than 0.21 of this module. By default, it disabled. See L</to_hash>.
 
-=item regexpes
-
-Define (any number) of regexpes to apply at field values before they are
-splitted into subfield. This is great place to split subfields in input to
-mulitple subfields if needed or rename subfields.
-
 =back
 
 =cut
@@ -528,9 +519,6 @@ There is also more elaborative way to call C<to_hash> like this:
   my $hash = $isis->to_hash({
        mfn => 42,
        include_subfields => 1,
-       regexps => [
-               's/something/else/g',
-       ],
   });
 
 Each option controll creation of hash:
@@ -558,10 +546,6 @@ have original record subfield order and index to that subfield like this:
 Define delimiter which will be used to join repeatable subfields. You can
 specify option here instead in L</new> if you want to have per-record control.
 
-=item regexpes
-
-Override C<regexpes> specified in L</new>.
-
 =back
 
 =cut
@@ -578,10 +562,6 @@ sub to_hash {
                $mfn = $arg->{mfn} || confess "need mfn in arguments";
        }
 
-       $arg->{regexpes} ||= $self->{regexpes};
-
-       confess "regexps must be HASH" if ($arg->{regexps} && ref($arg->{regexps}) ne 'HASH');
-
        # init record to include MFN as field 000
        my $rec = { '000' => [ $mfn ] };
 
@@ -596,20 +576,10 @@ sub to_hash {
 
                        # filter output
                        if ($self->{'hash_filter'}) {
-                               $l = $self->{'hash_filter'}->($l);
+                               $l = $self->{'hash_filter'}->($l, $f_nr);
                                next unless defined($l);
                        }
 
-                       # apply regexps
-                       if ($arg->{regexps} && defined($arg->{regexps}->{$f_nr})) {
-                               confess "regexps->{$f_nr} must be ARRAY" if (ref($arg->{regexps}->{$f_nr}) ne 'ARRAY');
-                               my $c = 0;
-                               foreach my $r (@{ $arg->{regexps}->{$f_nr} }) {
-                                       while ( eval '$l =~ ' . $r ) { $c++ };
-                               }
-                               warn "## field $f_nr triggered $c regexpes\n" if ($c && $self->{debug});
-                       }
-
                        my $val;
                        my $r_sf;       # repeatable subfields in this record
 
index f4a25d8..1ebebe1 100755 (executable)
@@ -3,7 +3,7 @@
 use strict;
 use blib;
 
-use Test::More tests => 139;
+use Test::More tests => 174;
 use File::Spec;
 
 BEGIN {
@@ -192,6 +192,12 @@ diag "record = ",Dumper($isis->{record}) if ($debug);
 $isis = Biblio::Isis->new (
        isisdb => $path_winisis,
        debug => $debug,
+       hash_filter => sub {
+               my ($l,$nr) = @_;
+               ok(grep(/$nr/, keys %{ $isis->{record} }), "hash_filter $nr in record");
+               ok(grep(/\Q$l\E/, @{ $isis->{record}->{$nr} }), "hash_filter line $l found");
+               return($l);
+       },
 );
 
 ok(! $isis->fetch(3), "deleted not found");
@@ -272,75 +278,3 @@ is_deeply( $hash, {
    902   => [{ a => "a1 ; a2 ; a3 ; a4 ; a5", b => "b1 ; b2", c => "c1" }],
 }, 'hash is_deeply');
 
-# split_on_delimiters
-
-$isis->{record} = {
-       900 => [ '^a900a : 900b ; 900c' ],
-       901 => [
-               '^a901a-1 x 901b-1 y 901c-1',
-               '^b901b-2 x 901b-2',
-               '^c901c-3 y 901c-3',
-       ],
-       902 => [
-               '^a902a-1^b9002a-2',
-       ],
-};
-
-my $split_on_delimiters = {
-       900 => { '^a' => { ' : ' => '^b', ' ; ' => '^c' } },
-       901 => { 
-               '^a' => { ' x ' => '^b', ' y ' => '^c' },
-               '^b' => { ' x ' => '^b' },
-               '^c' => { ' y ' => '^c' }
-       },
-       902 => { '*' => { '^b' => ' * ' } },
-};
-
-diag "split_on_delimiters = ", Dumper($split_on_delimiters);
-
-my $regexpes;
-
-foreach my $f (keys %$split_on_delimiters) {
-warn "--- f: $f\n";
-       foreach my $sf (keys %{ $split_on_delimiters->{$f} }) {
-warn "---- sf: $sf\n";
-               foreach my $from (keys %{ $split_on_delimiters->{$f}->{$sf} }) {
-                       my $to = $split_on_delimiters->{$f}->{$sf}->{$from};
-                       #die "no field?" unless defined($to);
-warn "----- transform: |$from| -> |$to|\n";
-
-                       if ($sf =~ /^\^/) {
-                               my $regex = 
-                                       's/\Q'. $sf .'\E([^\^]+)\Q'. $from .'\E([^\^]+)/'. $sf .'$1'. $to .'$2/g';
-                               push @{ $regexpes->{$f} }, $regex;
-warn ">>>>> $regex [sf]\n";
-                       } else {
-                               my $regex =
-                                       's/\Q'. $from .'\E/'. $to .'/g';
-                               push @{ $regexpes->{$f} }, $regex;
-warn ">>>>> $regex [global]\n";
-                       }
-
-               }
-       }
-}
-
-diag "generated regexpes = ", Dumper( $regexpes );
-
-ok($hash = $isis->to_hash({ mfn => $isis->mfn, regexps => $regexpes, }), 'to_hash(mfn,regexpes)');
-diag "to_hash = ",Dumper( $hash ) if ($debug);
-is_deeply( $hash, {
-   "000" => [42],
-   900   => [{ a => "900a", b => "900b", c => "900c" }],
-   901   => [
-              { a => "901a-1", b => "901b-1", c => "901c-1" },
-              { b => ["901b-2", "901b-2"] },
-              { c => ["901c-3", "901c-3"] },
-            ],
-   902   => [{ a => "902a-1 * 9002a-2" }],
-}, 'hash is_deeply');
-
-ok($isis->{regexpes} = $regexpes, 'isis->{regexpes}');
-ok($hash2 = $isis->to_hash( $isis->mfn ), 'to_hash(mfn), global regexpes');
-diag "to_hash = ",Dumper( $hash ) if ($debug);
-is_deeply( $hash2, $hash, 'hash is_deeply');