File Coverage

blib/lib/OpenAPI/Generator/From/Definitions.pm
Criterion Covered Total %
statement 48 49 97.9
branch 10 16 62.5
condition 1 3 33.3
subroutine 13 13 100.0
pod 2 2 100.0
total 74 83 89.1


line stmt bran cond sub pod time code
1             package OpenAPI::Generator::From::Definitions;
2              
3 2     2   1203 use 5.012;
  2         10  
4 2     2   11 use strict;
  2         4  
  2         47  
5 2     2   9 use warnings;
  2         6  
  2         67  
6              
7 2     2   11 use Carp qw(croak);
  2         5  
  2         121  
8 2     2   29 use File::Find;
  2         5  
  2         163  
9 2     2   1683 use JSON::PP;
  2         34310  
  2         181  
10 2     2   19 use YAML;
  2         4  
  2         113  
11 2     2   698 use OpenAPI::Generator::Util qw(merge_definitions);
  2         5  
  2         969  
12              
13             sub new {
14              
15 1     1 1 5 bless {}, shift
16             }
17              
18             sub generate {
19              
20 1     1 1 3 my($self, $conf) = @_;
21              
22 1         3 my $src = $conf->{src};
23 1         4 $self->_check_src($src);
24 1         3 my @files = $self->_src_as_files($src);
25              
26 1 50       7 if (!@files) {
27 0         0 croak "no files found in $src";
28             }
29              
30 1         2 my @defs = @{ $conf->{definitions} };
  1         4  
31              
32 1         4 for my $file (@files) {
33 3 50       11062 croak "$file is not readable" unless -r $file;
34              
35 3         28 local $/ = '';
36 3 50       185 open my $fh, '<', $file or croak "can't open file $file";
37 3         127 my $content = <$fh>;
38 3         44 close $fh;
39              
40              
41 3 100       23 if ($file =~ /\.json$/) {
42 1         6 push @defs, JSON::PP::decode_json($content);
43             }
44             else {
45 2         16 push @defs, YAML::Load($content);
46             }
47             }
48              
49 1         6886 merge_definitions(@defs)
50             }
51              
52             sub _check_src {
53              
54 1 50 33 1   50 croak "$_[1] is not file or directory" unless(-f $_[1] or -d $_[1]);
55 1 50       19 croak "$_[1] is not readable" unless(-r $_[1]);
56             }
57              
58             sub _src_as_files {
59              
60 1 50   1   15 return $_[1] if -f $_[1];
61              
62 1         3 my @files;
63 1 100   4   124 find sub { push @files, $File::Find::name if /\.(yml|yaml|json)$/ }, $_[1];
  4         193  
64             @files
65 1         9 }
66              
67             1
68              
69             __END__