File Coverage

blib/lib/Sphinx/XMLpipe2.pm
Criterion Covered Total %
statement 48 48 100.0
branch 8 10 80.0
condition n/a
subroutine 8 8 100.0
pod 4 4 100.0
total 68 70 97.1


line stmt bran cond sub pod time code
1             package Sphinx::XMLpipe2;
2              
3 2     2   14861 use XML::Hash::XS;
  2         1564  
  2         1056  
4              
5             our $VERSION = "0.03";
6              
7             sub new {
8 2     2 1 15 my ($class, %args) = @_;
9 2 100       10 return undef unless %args;
10              
11 1         2 my $self = \%args;
12              
13 1         57 $self->{'xmlprocessor'} = XML::Hash::XS->new(
14             xml_decl => 0,
15             indent => 4,
16             use_attr => 1,
17             content => 'content',
18             encoding => 'utf-8',
19             utf8 => 0,
20             );
21              
22 1         2 bless $self, $class;
23 1         3 return $self
24             }
25              
26             sub fetch {
27 1     1 1 2 my ($self, ) = @_;
28              
29 1         3 my $content1 = $self->_fetch_header();
30 1         2 my $content2 = $self->_fetch_data();
31 1         7 return qq~\n$content1$content2~;
32             }
33              
34             sub add_data {
35 2     2 1 166 my ($self, $data) = @_;
36 2 100       8 return undef unless exists $data->{'id'};
37              
38             $self->{'data'} = {'sphinx:document' => []}
39 1 50       7 unless exists $self->{'data'}->{'sphinx:document'};
40              
41 1         3 my %params = ();
42 1         1 my @keys = (@{$self->{'fields'}}, keys %{$self->{'attrs'}});
  1         2  
  1         5  
43              
44 1         2 map { $params{$_} = [$data->{$_}] } @keys;
  4         11  
45              
46 1         6 push @{$self->{'data'}->{'sphinx:document'}}, {
47 1         1 id => $data->{'id'},
48             %params
49             };
50 1         4 return $self;
51             }
52              
53             sub remove_data {
54 2     2 1 3 my ($self, $data) = @_;
55 2 100       8 return undef unless exists $data->{'id'};
56              
57             $self->{'data'} = {'sphinx:killlist' => {'id' => []}}
58 1 50       5 unless exists $self->{'data'}->{'sphinx:killlist'}->{'id'};
59              
60 1         4 push @{$self->{'data'}->{'sphinx:killlist'}->{'id'}}, [$data->{'id'}];
  1         3  
61 1         2 return $self;
62             }
63              
64              
65             sub _fetch_header {
66 1     1   1 my ($self, ) = @_;
67 1         5 my $header = {
68             'sphinx:schema' => {
69             'sphinx:field' => [],
70             'sphinx:attr' => [],
71             }
72             };
73              
74 1         1 for my $field (@{$self->{'fields'}}) {
  1         3  
75 3         3 push @{$header->{'sphinx:schema'}->{'sphinx:field'}}, {'name' => $field};
  3         6  
76             }
77              
78 1         2 for my $attr (keys %{$self->{'attrs'}}) {
  1         3  
79 1         2 push @{$header->{'sphinx:schema'}->{'sphinx:attr'}}, {'name' => $attr, 'type' => $self->{'attrs'}->{$attr}};
  1         3  
80             }
81              
82 1         61 return _pruning_xml($self->{'xmlprocessor'}->hash2xml($header));
83             }
84              
85             sub _fetch_data {
86 1     1   2 my ($self, ) = @_;
87 1         10 return _pruning_xml($self->{'xmlprocessor'}->hash2xml($self->{'data'}));
88             }
89              
90             sub _pruning_xml {
91 2     2   4 my ($xml) = @_;
92 2         8 $xml =~ s/^\s*//is;
93 2         12 $xml =~ s/<\/root>\s*$//is;
94 2         6 return $xml;
95             }
96              
97             1;
98             __END__