/[webpac]/trunk2/lib/WebPAC/Index.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk2/lib/WebPAC/Index.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 511 - (hide annotations)
Sun Oct 17 17:35:32 2004 UTC (19 years, 6 months ago) by dpavlin
File size: 2233 byte(s)
implemented optional name paramter to constructor, useful for debugging

1 dpavlin 410 package WebPAC::Index;
2    
3     use warnings;
4     use strict;
5    
6     use Carp;
7     use Tie::Array::Sorted;
8     use Log::Log4perl qw(get_logger :levels);
9     use locale;
10    
11     =head1 NAME
12    
13     WebPAC::Index - create sorted index
14    
15     =head1 DESCRIPTION
16    
17     This module will create sorted index by headline (like thesaurus).
18    
19     =head1 METHODS
20    
21     =head2 new
22    
23     Create new sorted index object
24    
25     my $thes = new WebPAC::Index(
26     log => 'log4perl.conf',
27 dpavlin 511 name => 'index name',
28 dpavlin 410 );
29    
30     C<log> is optional parametar which specify filename of L<Log::Log4Perl>
31     config file. Default is C<log.conf>.
32    
33 dpavlin 511 C<name> is optional parametar used to mark lines in log file with index
34     name.
35    
36 dpavlin 410 Default sort function is my C<headline>, non case sensitive. It can't be
37     changed right now without editing of source.
38    
39     =cut
40    
41     sub new {
42     my $class = shift;
43     my $self = {@_};
44     bless($self, $class);
45    
46     my $log_file = $self->{'log'} || "log.conf";
47     Log::Log4perl->init($log_file);
48    
49     tie @{$self->{'index'}}, "Tie::Array::Sorted", sub {
50     lc( $_[0]->{'headline'} ) cmp lc( $_[1]->{'headline'} )
51     };
52    
53     return $self;
54     }
55    
56     =head2 insert
57    
58     Insert data into index
59    
60     $index->insert(
61     headline => 'headline text',
62 dpavlin 448 mfn => '99',
63 dpavlin 410 );
64    
65     =cut
66    
67     sub insert {
68     my $self = shift;
69    
70     my $data = {@_};
71    
72     my $log = $self->_get_logger();
73    
74 dpavlin 448 $log->logconfess("need headline and mfn!") unless (defined($data->{'headline'}) && defined($data->{'mfn'}));
75 dpavlin 411
76 dpavlin 410 push @{$self->{'index'}}, $data;
77    
78 dpavlin 511 my $name = '';
79     $name = $self->{'name'}." " if ($self->{'name'});
80 dpavlin 410
81 dpavlin 511 $log->debug("stored ",$name,$data->{'mfn'},": ",$data->{'headline'});
82    
83 dpavlin 410 }
84    
85     =head2 elements
86    
87     Get all elements (sorted by locale) from sorted index.
88    
89     my @e = $index->elements;
90    
91     Each element is hash containing C<path> and C<headline>.
92    
93     print $e[0]->{'headline'}," is ",$e[0]->{'path'},"\n";
94    
95     =cut
96    
97     sub elements {
98     my $self = shift;
99    
100     my $log = $self->_get_logger();
101    
102     $log->debug(scalar(@{$self->{'index'}})." elements in index");
103    
104     return @{$self->{'index'}};
105     }
106    
107     #
108    
109     =head1 INTERNAL METHODS
110    
111     You shouldn't call this methods directly.
112    
113     =head2 _get_logger
114    
115     Get C<Log::Log4perl> object with a twist: domains are defined for each
116     method
117    
118     my $log = $webpac->_get_logger();
119    
120     =cut
121    
122     sub _get_logger {
123     my $self = shift;
124    
125     my $name = (caller(1))[3] || caller;
126     return get_logger($name);
127     }
128    
129     1;

  ViewVC Help
Powered by ViewVC 1.1.26