File Coverage

blib/lib/Elastijk/oo.pm
Criterion Covered Total %
statement 31 70 44.2
branch 1 12 8.3
condition 1 14 7.1
subroutine 12 19 63.1
pod 0 14 0.0
total 45 129 34.8


line stmt bran cond sub pod time code
1             package Elastijk::oo;
2 3     3   10 use strict;
  3         4  
  3         93  
3 3     3   9 use warnings;
  3         3  
  3         61  
4 3     3   7 use Elastijk;
  3         3  
  3         146  
5              
6             sub new {
7 100005     100005 0 60272 my $class = shift;
8 100005         156710 return bless { host => "localhost", port => "9200", @_ }, $class;
9             }
10              
11             {
12 3     3   8 no warnings 'redefine';
  3         3  
  3         1840  
13 100002     100002   144247 *Elastijk::new = sub { shift; Elastijk::oo->new(@_) };
  100002         85986  
14             };
15              
16             sub request {
17 14     14 0 42 my ($self, %args) = @_;
18 14   33     17 $args{$_} ||= $self->{$_} for grep { exists $self->{$_} } qw(host port index type head);
  70         171  
19 14         31 return Elastijk::request(\%args);
20             }
21              
22             sub request_raw {
23 0     0 0 0 my ($self, %args) = @_;
24 0   0     0 $args{$_} ||= $self->{$_} for grep { exists $self->{$_} } qw(host port index type head);
  0         0  
25 0         0 return Elastijk::request_raw(\%args);
26             }
27              
28             sub index {
29 1     1 0 407 my ($self, %args) = @_;
30 1 50       7 return $self->request(method => ( exists $args{id} ? "PUT" : "POST" ), %args);
31             }
32              
33             sub get {
34 1     1 0 3 my $self = shift;
35 1         2 return $self->request(method => "GET", @_);
36             }
37              
38             sub put {
39 0     0 0 0 my $self = shift;
40 0         0 $self->request(method => "PUT", @_);
41             }
42              
43             sub delete {
44 1     1 0 513 my $self = shift;
45 1         2 return $self->request(method => "DELETE", @_);
46             }
47              
48             sub head {
49 0     0 0 0 my $self = shift;
50 0         0 return $self->request(method => "HEAD", @_);
51             }
52              
53             sub post {
54 0     0 0 0 my $self = shift;
55 0         0 return $self->request(method => "POST", @_);
56             }
57              
58             sub exists {
59 6     6 0 1630 my $self = shift;
60 6         12 my ($status,$res) = $self->request(method => "HEAD", @_);
61 6         17 return ($status,'2' eq substr($status,0,1));
62             }
63              
64             sub search {
65 4     4 0 1259 my $self = shift;
66 4         8 return $self->request(command => "_search", method => "GET", @_);
67             }
68              
69             sub count {
70 0     0 0   my $self = shift;
71 0           my ($status,$res) = $self->request(command => "_count", method => "GET", @_);
72 0           return ($status, $res->{count});
73             }
74              
75              
76             sub bulk {
77 0     0 0   my ($self, %args) = @_;
78 0           $args{body} = join("", map { $Elastijk::JSON->encode($_)."\n" } @{$args{body}});
  0            
  0            
79 0           my ($status,$res) = $self->request_raw(method => "POST", command => "_bulk", %args);
80 0 0         $res = $Elastijk::JSON->decode($res) if $res;
81 0           return ($status, $res);
82             }
83              
84             sub scan_scroll {
85 0     0 0   my ($self, %args) = @_;
86 0           my $on_response_callback = delete $args{on_response};
87              
88 0 0         my %uri_param = %{ delete($args{uri_param}) || {} };
  0            
89 0           $uri_param{search_type} = "scan";
90 0   0       $uri_param{scroll} ||= "10m";
91 0           my $scroll_id;
92 0           my ($status, $res) = $self->get(%args, command => "_search", uri_param => \%uri_param);
93 0 0         if (substr($status,0,1) ne '2') {
94 0           return;
95             }
96              
97 0           while (1) {
98 0           $scroll_id = $res->{_scroll_id};
99             ($status,$res) = $self->get(
100             index => "_search", type => "scroll", #WTF
101 0           uri_param => { scroll => $uri_param{scroll}, scroll_id => $scroll_id }
102             );
103 0 0 0       if (substr($status,0,1) eq '2' && @{$res->{hits}{hits}} > 0) {
  0            
104 0           my $r = $on_response_callback->($status, $res);
105 0 0 0       last if defined($r) && !$r;
106 0           $scroll_id = $res->{_scroll_id};
107             } else {
108 0           last;
109             }
110             }
111             }
112              
113             1;