File Coverage

blib/lib/SVN/Dump/Property.pm
Criterion Covered Total %
statement 34 34 100.0
branch 6 6 100.0
condition n/a
subroutine 9 9 100.0
pod 7 7 100.0
total 56 56 100.0


line stmt bran cond sub pod time code
1             package SVN::Dump::Property;
2             $SVN::Dump::Property::VERSION = '0.08';
3 12     12   58704 use strict;
  12         25  
  12         286  
4 12     12   52 use warnings;
  12         15  
  12         5185  
5              
6             my $NL = "\012";
7              
8             # FIXME should I use Tie::Hash::IxHash or Tie::Hash::Indexed?
9             sub new {
10 478     478 1 1430 my ( $class, @args ) = @_;
11 478         1404 return bless {
12             keys => [],
13             hash => {},
14             }, $class;
15             }
16              
17             sub set {
18 816     816 1 2846 my ( $self, $k, $v ) = @_;
19              
20 816 100       1445 push @{ $self->{keys} }, $k if !exists $self->{hash}->{$k};
  815         1368  
21 816         2027 $self->{hash}{$k} = $v;
22             }
23 9     9 1 37 sub get { return $_[0]{hash}{ $_[1] }; }
24 3     3 1 394 sub keys { return @{ $_[0]{keys} }; }
  3         13  
25 3     3 1 1343 sub values { return @{ $_[0]{hash} }{ @{ $_[0]{keys} } }; }
  3         14  
  3         7  
26             sub delete {
27 9     9 1 1273 my ( $self, @keys ) = @_;
28 9 100       22 return if !@keys;
29 8         12 my $re = qr/^@{[join '|', map { quotemeta } @keys]}$/;
  8         24  
  14         150  
30 8         19 $self->{keys} = [ grep { !/$re/ } @{ $self->{keys} } ];
  42         127  
  8         14  
31 8         17 delete @{ $self->{hash} }{@keys};
  8         38  
32             }
33              
34             sub as_string {
35 617     617 1 1596 my ($self) = @_;
36 617         766 my $string = '';
37              
38             $string .=
39             defined $self->{hash}{$_}
40             # existing key
41             ? ( "K " . length($_) . $NL ) . "$_$NL"
42             . ( "V " . length( $self->{hash}{$_} ) . $NL )
43             . "$self->{hash}{$_}$NL"
44             # deleted key (v3)
45             : ( "D " . length($_) . "$NL$_$NL" )
46 617 100       645 for @{ $self->{keys} };
  617         3288  
47              
48             # end marker
49 617         1069 $string .= "PROPS-END$NL";
50              
51 617         1268 return $string;
52             }
53              
54             1;
55              
56             __END__