File Coverage

blib/lib/PONAPI/Server/ConfigReader.pm
Criterion Covered Total %
statement 52 54 96.3
branch 5 10 50.0
condition 3 6 50.0
subroutine 14 15 93.3
pod 0 1 0.0
total 74 86 86.0


line stmt bran cond sub pod time code
1             # ABSTRACT: Web-Server - configuration handler
2             package PONAPI::Server::ConfigReader;
3              
4 3     3   2542 use Moose;
  3         1435623  
  3         19  
5              
6 3     3   20829 use Moose::Util::TypeConstraints;
  3         8  
  3         27  
7 3     3   31062 use Path::Class::Dir;
  3         133765  
  3         120  
8 3     3   3312 use YAML::XS ();
  3         15920  
  3         76  
9              
10 3     3   1862 use PONAPI::DAO;
  3         11  
  3         2031  
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   21 my $self = shift;
33 9         380 return YAML::XS::Load( scalar $self->dir->file('server.yml')->slurp );
34             }
35              
36             sub read_config {
37 9     9 0 21 my $self = shift;
38              
39 9         37 $self->_set_server_json_api_version;
40              
41 9         45 $self->_set_server_sorting;
42 9         40 $self->_set_server_send_header;
43 9         33 $self->_set_server_self_link;
44 9         36 $self->_set_server_relative_links;
45 9         40 $self->_set_repository;
46              
47 9         34 $self->{'ponapi.mediatype'} = 'application/vnd.api+json';
48              
49 9         22 return %{$self};
  9         135  
50             }
51              
52             sub _set_server_respond_to_updates_status {
53 0     0   0 my $self = shift;
54              
55             $self->{'ponapi.respond_to_updates_with_200'} =
56 0         0 $self->config->{server}{respond_to_updates_with_200};
57             }
58              
59             sub _set_server_sorting {
60 9     9   22 my $self = shift;
61              
62             my $sort_allowed = $self->config->{server}{sort_allowed}
63 9   50     392 // die "[PONAPI Server] server sorting configuration is missing";
64              
65             $self->{'ponapi.sort_allowed'} =
66 27         79 ( grep { $sort_allowed eq $_ } qw< yes true 1 > ) ? 1 :
67 9 50       25 ( grep { $sort_allowed eq $_ } qw< no false 0 > ) ? 0 :
  27 50       73  
68             die "[PONAPI Server] server sorting is misconfigured";
69             }
70              
71             sub _set_server_json_api_version {
72 9     9   28 my $self = shift;
73              
74             my $spec_version = $self->config->{server}{spec_version}
75 9   50     394 // die "[PONAPI Server] server JSON API version configuration is missing";
76              
77 9         33 $self->{'ponapi.spec_version'} = $spec_version;
78             }
79              
80             sub _set_server_send_header {
81 9     9   18 my $self = shift;
82              
83             $self->{'ponapi.spec_version'} = $self->config->{server}{spec_version}
84 9   50     382 // die "[PONAPI Server] server spec version is not configured";
85              
86             $self->{'ponapi.send_version_header'} =
87 9 50       23 ( grep { $self->config->{server}{send_version_header} eq $_ } qw< yes true 1 > ) ? 1 : 0;
  27         1126  
88             }
89              
90             sub _set_server_self_link {
91 9     9   21 my $self = shift;
92              
93             $self->{'ponapi.doc_auto_self_link'} =
94 9 50       19 ( grep { $self->config->{server}{send_document_self_link} eq $_ } qw< yes true 1 > ) ? 1 : 0;
  27         1182  
95             }
96              
97             sub _set_server_relative_links {
98 9     9   23 my $self = shift;
99              
100 9 50       22 grep { $self->config->{server}{links_type} eq $_ } qw< relative full >
  18         785  
101             or die "[PONAPI Server] server links_type is misconfigured";
102              
103 9         401 $self->{'ponapi.relative_links'} = $self->config->{server}{links_type};
104             }
105              
106             sub _set_repository {
107 9     9   22 my $self = shift;
108 9         385 $self->{'repository.class'} = $self->config->{repository}{class};
109 9         393 $self->{'repository.args'} = $self->config->{repository}{args};
110             }
111              
112             __PACKAGE__->meta->make_immutable;
113 3     3   24 no Moose; 1;
  3         8  
  3         20  
114              
115             __END__
116              
117             =pod
118              
119             =encoding UTF-8
120              
121             =head1 NAME
122              
123             PONAPI::Server::ConfigReader - Web-Server - configuration handler
124              
125             =head1 VERSION
126              
127             version 0.002005
128              
129             =head1 AUTHORS
130              
131             =over 4
132              
133             =item *
134              
135             Mickey Nasriachi <mickey@cpan.org>
136              
137             =item *
138              
139             Stevan Little <stevan@cpan.org>
140              
141             =item *
142              
143             Brian Fraser <hugmeir@cpan.org>
144              
145             =back
146              
147             =head1 COPYRIGHT AND LICENSE
148              
149             This software is copyright (c) 2016 by Mickey Nasriachi, Stevan Little, Brian Fraser.
150              
151             This is free software; you can redistribute it and/or modify it under
152             the same terms as the Perl 5 programming language system itself.
153              
154             =cut