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.07';
3 12     12   70725 use strict;
  12         38  
  12         339  
4 12     12   60 use warnings;
  12         22  
  12         5872  
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 1666 my ( $class, @args ) = @_;
11 478         1529 return bless {
12             keys => [],
13             hash => {},
14             }, $class;
15             }
16              
17             sub set {
18 816     816 1 3594 my ( $self, $k, $v ) = @_;
19              
20 816 100       1706 push @{ $self->{keys} }, $k if !exists $self->{hash}->{$k};
  815         1611  
21 816         2394 $self->{hash}{$k} = $v;
22             }
23 9     9 1 46 sub get { return $_[0]{hash}{ $_[1] }; }
24 3     3 1 513 sub keys { return @{ $_[0]{keys} }; }
  3         13  
25 3     3 1 1718 sub values { return @{ $_[0]{hash} }{ @{ $_[0]{keys} } }; }
  3         17  
  3         6  
26             sub delete {
27 9     9 1 1643 my ( $self, @keys ) = @_;
28 9 100       27 return if !@keys;
29 8         13 my $re = qr/^@{[join '|', map { quotemeta } @keys]}$/;
  8         26  
  14         186  
30 8         23 $self->{keys} = [ grep { !/$re/ } @{ $self->{keys} } ];
  42         162  
  8         19  
31 8         18 delete @{ $self->{hash} }{@keys};
  8         47  
32             }
33              
34             sub as_string {
35 617     617 1 1961 my ($self) = @_;
36 617         878 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       811 for @{ $self->{keys} };
  617         3870  
47              
48             # end marker
49 617         1226 $string .= "PROPS-END$NL";
50              
51 617         1516 return $string;
52             }
53              
54             1;
55              
56             __END__