File Coverage

blib/lib/PONAPI/Server/ConfigReader.pm
Criterion Covered Total %
statement 58 58 100.0
branch 7 14 50.0
condition 3 6 50.0
subroutine 15 15 100.0
pod 0 1 0.0
total 83 94 88.3


line stmt bran cond sub pod time code
1             # ABSTRACT: Web-Server - configuration handler
2             package PONAPI::Server::ConfigReader;
3              
4 3     3   1514 use Moose;
  3         1340754  
  3         19  
5              
6 3     3   21148 use Moose::Util::TypeConstraints;
  3         7  
  3         25  
7 3     3   8640 use Path::Class::Dir;
  3         49530  
  3         81  
8 3     3   1266 use YAML::XS ();
  3         7969  
  3         67  
9              
10 3     3   1444 use PONAPI::DAO;
  3         10  
  3         2096  
11              
12             class_type 'Path::Class::Dir';
13             coerce 'Path::Class::Dir',
14             from 'Str',
15             via { Path::Class::Dir->new($_) };
16              
17             has dir => (
18             is => 'ro',
19             isa => 'Path::Class::Dir',
20             coerce => 1,
21             required => 1,
22             );
23              
24             has config => (
25             is => 'ro',
26             isa => 'HashRef',
27             lazy => 1,
28             builder => '_build_conf',
29             );
30              
31             sub _build_conf {
32 9     9   19 my $self = shift;
33 9         270 return YAML::XS::Load( scalar $self->dir->file('server.yml')->slurp );
34             }
35              
36             sub read_config {
37 9     9 0 25 my $self = shift;
38              
39 9         42 $self->_set_server_json_api_version;
40              
41 9         42 $self->_set_server_sorting;
42 9         44 $self->_set_server_send_header;
43 9         43 $self->_set_server_self_link;
44 9         41 $self->_set_server_relative_links;
45 9         36 $self->_set_repository;
46 9         47 $self->_set_server_respond_to_updates_status;
47              
48 9         29 $self->{'ponapi.mediatype'} = 'application/vnd.api+json';
49              
50 9         19 return %{$self};
  9         92  
51             }
52              
53             sub _set_server_respond_to_updates_status {
54 9     9   23 my $self = shift;
55              
56 9         247 my $server_update = $self->config->{server}{respond_to_updates_with_200};
57              
58             $self->{'ponapi.respond_to_updates_with_200'} =
59 27         86 ( grep { $server_update eq $_ } qw< yes true 1 > ) ? 1 :
60 9 50       29 ( grep { $server_update eq $_ } qw< no false 0 > ) ? 0 :
  27 50       74  
61             die "[PONAPI Server] server respond_to_updates_with_200 is misconfigured";
62              
63             }
64              
65             sub _set_server_sorting {
66 9     9   30 my $self = shift;
67              
68             my $sort_allowed = $self->config->{server}{sort_allowed}
69 9   50     267 // die "[PONAPI Server] server sorting configuration is missing";
70              
71             $self->{'ponapi.sort_allowed'} =
72 27         84 ( grep { $sort_allowed eq $_ } qw< yes true 1 > ) ? 1 :
73 9 50       31 ( grep { $sort_allowed eq $_ } qw< no false 0 > ) ? 0 :
  27 50       77  
74             die "[PONAPI Server] server sorting is misconfigured";
75             }
76              
77             sub _set_server_json_api_version {
78 9     9   20 my $self = shift;
79              
80             my $spec_version = $self->config->{server}{spec_version}
81 9   50     280 // die "[PONAPI Server] server JSON API version configuration is missing";
82              
83 9         32 $self->{'ponapi.spec_version'} = $spec_version;
84             }
85              
86             sub _set_server_send_header {
87 9     9   25 my $self = shift;
88              
89             $self->{'ponapi.spec_version'} = $self->config->{server}{spec_version}
90 9   50     252 // die "[PONAPI Server] server spec version is not configured";
91              
92             $self->{'ponapi.send_version_header'} =
93 9 50       24 ( grep { $self->config->{server}{send_version_header} eq $_ } qw< yes true 1 > ) ? 1 : 0;
  27         708  
94             }
95              
96             sub _set_server_self_link {
97 9     9   24 my $self = shift;
98              
99             $self->{'ponapi.doc_auto_self_link'} =
100 9 50       26 ( grep { $self->config->{server}{send_document_self_link} eq $_ } qw< yes true 1 > ) ? 1 : 0;
  27         705  
101             }
102              
103             sub _set_server_relative_links {
104 9     9   20 my $self = shift;
105              
106 9 50       24 grep { $self->config->{server}{links_type} eq $_ } qw< relative full >
  18         495  
107             or die "[PONAPI Server] server links_type is misconfigured";
108              
109 9         243 $self->{'ponapi.relative_links'} = $self->config->{server}{links_type};
110             }
111              
112             sub _set_repository {
113 9     9   22 my $self = shift;
114 9         243 $self->{'repository.class'} = $self->config->{repository}{class};
115 9         272 $self->{'repository.args'} = $self->config->{repository}{args};
116             }
117              
118             __PACKAGE__->meta->make_immutable;
119 3     3   34 no Moose; 1;
  3         8  
  3         32  
120              
121             __END__
122              
123             =pod
124              
125             =encoding UTF-8
126              
127             =head1 NAME
128              
129             PONAPI::Server::ConfigReader - Web-Server - configuration handler
130              
131             =head1 VERSION
132              
133             version 0.003003
134              
135             =head1 AUTHORS
136              
137             =over 4
138              
139             =item *
140              
141             Mickey Nasriachi <mickey@cpan.org>
142              
143             =item *
144              
145             Stevan Little <stevan@cpan.org>
146              
147             =item *
148              
149             Brian Fraser <hugmeir@cpan.org>
150              
151             =back
152              
153             =head1 COPYRIGHT AND LICENSE
154              
155             This software is copyright (c) 2019 by Mickey Nasriachi, Stevan Little, Brian Fraser.
156              
157             This is free software; you can redistribute it and/or modify it under
158             the same terms as the Perl 5 programming language system itself.
159              
160             =cut