File Coverage

blib/lib/SVK/Log/Filter/Babelfish.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             package SVK::Log::Filter::Babelfish;
2              
3 1     1   25341 use strict;
  1         3  
  1         48  
4 1     1   6 use warnings;
  1         2  
  1         35  
5              
6 1     1   6 use base qw( SVK::Log::Filter::Selection );
  1         2  
  1         1074  
7             use WWW::Babelfish;
8              
9             our $VERSION = '0.0.3';
10              
11             sub setup {
12             my ($self) = @_;
13              
14             # create a WWW::Babelfish object
15             my $service = $ENV{BABELFISH_SERVICE} || 'Babelfish';
16             my $fish = WWW::Babelfish->new( service => $service );
17             die "Can't create a babelfish using the '$service' service.\n"
18             if !$fish;
19             $self->{fish} = $fish;
20              
21             # determine the source and destination languages
22             my ( $src_lang, $dest_lang ) = split /\s+/, $self->{argument};
23             ( $dest_lang, $src_lang ) = ( $src_lang, $dest_lang ) if !$dest_lang;
24             $self->{source}
25             = _lang_to_name( $fish, $src_lang ) || 'English';
26             $self->{destination}
27             = _lang_to_name( $fish, $dest_lang ) || 'English';
28              
29             return;
30             }
31              
32             sub revision {
33             my ($self, $args) = @_;
34             my $props = $args->{props};
35              
36             my $src_name = $self->{source};
37             my $dest_name = $self->{destination};
38             my $text = $props->{'svn:log'};
39              
40             my $fish = $self->{fish};
41             my $new_svn_log = $fish->translate(
42             source => $src_name,
43             destination => $dest_name,
44             text => $text,
45             );
46              
47             die "Unable to translate from '$src_name' to '$dest_name': $text\n"
48             if !$new_svn_log;
49              
50             $props->{'svn:log'} = $new_svn_log;
51              
52             return;
53             }
54              
55             sub _lang_to_name {
56             my ($fish, $lang_tag) = @_;
57              
58             return if !$lang_tag;
59             my $pairs = $fish->languagepairs();
60              
61             while ( my ( $src_name, $dests ) = each %$pairs ) {
62             while ( my ( $dest_name, $pair_tag ) = each %$dests ) {
63             my ( $src_tag, $dest_tag ) = split /[_|]/, $pair_tag;
64             return $src_name if $lang_tag eq $src_tag;
65             return $dest_name if $lang_tag eq $dest_tag;
66             }
67             }
68              
69              
70             die "Unknown language tag '$lang_tag'\n";
71             return;
72             }
73              
74             1;
75              
76             __END__