File Coverage

blib/lib/Text/Same/Cache.pm
Criterion Covered Total %
statement 28 32 87.5
branch 2 6 33.3
condition 1 3 33.3
subroutine 7 7 100.0
pod 2 2 100.0
total 40 50 80.0


line stmt bran cond sub pod time code
1             =head1 NAME
2              
3             Text::Same::Cache
4              
5             =head1 DESCRIPTION
6              
7             A (planned) cache of ChunkedSource objects. For now there is just one method:
8             get(), which returns a ChunkedSource object for a particular file.
9              
10             =head1 SYNOPSIS
11              
12             my $cache = new Text::Same::Cache();
13             my $chunked_source = $cache->get($file);
14              
15             =head1 METHODS
16              
17             See below. Methods private to this module are prefixed by an
18             underscore.
19              
20             =cut
21              
22             package Text::Same::Cache;
23              
24 3     3   18 use warnings;
  3         5  
  3         314  
25 3     3   17 use strict;
  3         6  
  3         104  
26 3     3   16 use Carp;
  3         67  
  3         1813  
27              
28 3     3   20 use vars qw($VERSION);
  3         5  
  3         191  
29             $VERSION = '0.07';
30              
31 3     3   2138 use Text::Same::FileChunkedSource;
  3         8  
  3         999  
32              
33             =head2 new
34              
35             Title : new
36             Usage : $cache = new Text::Same::Cache();
37             Function: return a new, empty cache
38              
39             =cut
40              
41             sub new
42             {
43 37     37 1 53 my $self = shift;
44 37   33     173 my $class = ref($self) || $self;
45 37         158 return bless {}, $class;
46             }
47              
48             =head2 get
49              
50             Title : get
51             Usage : my $chunked_source = $cache->get($file);
52             Function: return a ChunkedSource object for the given file, possibly getting
53             the ChunkedSource details from a cache
54              
55             =cut
56              
57             sub get
58             {
59 72     72 1 97 my $self = shift;
60              
61 72         89 my $filename = shift;
62 72         123 my @lines = ();
63              
64 72         252 local $/ = "\n";
65 72 50       186 if ($filename =~ /(rcs|svn|co).*\|/) {
66 0 0       0 open F, "$filename" or die "$!: $filename\n";
67              
68 0         0 @lines = map {chomp; $_} ();
  0         0  
  0         0  
69             } else {
70 72 50       3766 open F, "<$filename" or die "$!: $filename\n";
71 72         1713 @lines = map {chomp; $_} ();
  579         691  
  579         1155  
72             }
73 72         427 return new Text::Same::FileChunkedSource(name=>$filename, chunks=>\@lines);
74             }
75              
76             =head1 AUTHOR
77              
78             Kim Rutherford
79              
80             =head1 COPYRIGHT & LICENSE
81              
82             Copyright 2005,2006 Kim Rutherford. All rights reserved.
83              
84             This program is free software; you can redistribute it and/or modify it
85             under the same terms as Perl itself.
86              
87             =head1 DISCLAIMER
88              
89             This module is provided "as is" without warranty of any kind. It
90             may redistributed under the same conditions as Perl itself.
91              
92             =cut
93              
94             1;