File Coverage

blib/lib/WebService/Wedata.pm
Criterion Covered Total %
statement 16 18 88.8
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 22 24 91.6


line stmt bran cond sub pod time code
1             package WebService::Wedata;
2              
3 1     1   34704 use warnings;
  1         4  
  1         33  
4 1     1   6 use strict;
  1         3  
  1         36  
5 1     1   7 use Carp;
  1         8  
  1         104  
6 1     1   1542 use LWP::UserAgent;
  1         110726  
  1         37  
7 1     1   1321 use JSON::XS;
  1         11393  
  1         79  
8 1     1   903 use WebService::Wedata::Database;
  0            
  0            
9              
10             use version; our $VERSION = qv('0.0.4');
11             our $URL_BASE = 'http://wedata.net';
12              
13             sub new {
14             my($class, $api_key) = @_;
15             bless {
16             ua => LWP::UserAgent->new,
17             api_key => $api_key,
18             }, $class;
19             }
20              
21             sub get_databases {
22             my($self) = @_;
23             $self->get_database;
24             }
25              
26             sub get_database {
27             my($self, $dbname, $page) = @_;
28             my $path = ($dbname) ? "/databases/$dbname.json" : '/databases.json';
29             $page ||= '';
30             my $url = $URL_BASE . $path;
31             my $response = $self->{ua}->get($url, page => $page);
32             if ($response->is_success) {
33             my $data = decode_json($response->content);
34             my $parse_response = sub {
35             my($data) = @_;
36             my @required_keys = split / /, $data->{required_keys};
37             my @optional_keys = (defined $data->{optional_keys}) ? split / /, $data->{optional_keys} : ();
38             my $database = WebService::Wedata::Database->new(
39             ua => $self->{ua},
40             api_key => $self->{api_key},
41             name => $data->{name},
42             description => $data->{description},
43             resource_url => $data->{resource_url},
44             required_keys => [@required_keys],
45             optional_keys => [@optional_keys],
46             permit_other_keys => $data->{permit_other_keys},
47             );
48             $database;
49             };
50             if ($dbname) {
51             $parse_response->($data);
52             }
53             else {
54             my $result = [];
55             foreach my $db (@$data) {
56             push @$result, $parse_response->($db);
57             }
58             $result;
59             }
60             }
61             else {
62             croak 'Faild to get_database:' . $response->status_line;
63             }
64             }
65              
66             sub create_database {
67             my($self, @params) = @_;
68             my $params = {@params};
69             croak "require name on create_database\n" unless $params->{name};
70              
71             my $param_description = $params->{description} || '';
72             my $param_required_keys = join '%20', @{$params->{required_keys}};
73             my $param_optional_keys = join '%20', @{$params->{optional_keys}};
74             my $param_permit_other_keys = ($params->{permit_other_keys}) ? 'true' : 'false';
75              
76             my $url = $URL_BASE . '/databases';
77             my $content = '';
78             $content = join '&',
79             "api_key=$self->{api_key}",
80             "database[name]=$params->{name}",
81             "database[description]=$param_description",
82             "database[required_keys]=$param_required_keys",
83             "database[optional_keys=$param_optional_keys",
84             "database[permit_other_keys]=$param_permit_other_keys"
85             ;
86             my $req = HTTP::Request->new(
87             POST => $url,
88             HTTP::Headers->new(
89             'content-type' => 'application/x-www-form-urlencoded',
90             'content-length' => length($content),
91             ),
92             $content,
93             );
94              
95             my $response = $self->{ua}->request($req);
96             if ($response->is_success) {
97             my $database = WebService::Wedata::Database->new(
98             ua => $self->{ua},
99             api_key => $self->{api_key},
100             name => $params->{name},
101             description => $params->{description},
102             required_keys => $params->{required_keys},
103             optional_keys => $params->{optional_keys},
104             permit_other_keys => ($params->{permit_other_keys} == 1) ? 1 : 0,
105             resource_url => $response->header('location'),
106             );
107             $database;
108             }
109             else {
110             croak 'Faild to create_database:' . $response->status_line;
111             }
112             }
113              
114             sub update_database {
115             my($self, @params) = @_;
116             my $params = {@params};
117             croak "require name on create_database\n" unless $params->{name};
118              
119             $params->{api_key} = $self->{api_key};
120             $params->{resource_url} = $URL_BASE . '/databases/' . $params->{name};
121             my $req = WebService::Wedata::Database::_make_update_request($params);
122              
123             my $response = $self->{ua}->request($req);
124             if ($response->is_success) {
125             $self->get_database($params->{name});
126             }
127             else {
128             croak 'Faild to update_database:' . $response->status_line;
129             }
130             }
131              
132             sub delete_database {
133             my($self, @params) = @_;
134             my $params = {@params};
135             croak "require name on create_database\n" unless $params->{name};
136              
137             $params->{api_key} = $self->{api_key};
138             my $req = WebService::Wedata::Database::_make_delete_request($params);
139             my $response = $self->{ua}->request($req);
140             if ($response->is_success) {
141             return;
142             }
143             else {
144             croak 'Faild to delete_database:' . $response->status_line;
145             }
146             }
147              
148              
149             1; # Magic true value required at end of module
150             __END__