File Coverage

lib/Dist/Zilla/Util/ExpandINI/Reader.pm
Criterion Covered Total %
statement 44 45 97.7
branch 8 10 80.0
condition 2 3 66.6
subroutine 10 10 100.0
pod 5 5 100.0
total 69 73 94.5


line stmt bran cond sub pod time code
1 10     10   592 use 5.006;
  10         21  
  10         272  
2 10     10   34 use strict;
  10         10  
  10         249  
3 10     10   28 use warnings;
  10         9  
  10         460  
4              
5             package Dist::Zilla::Util::ExpandINI::Reader;
6              
7             our $VERSION = '0.003001';
8              
9             # ABSTRACT: An order-preserving INI reader
10              
11             our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
12              
13 10     10   35 use Carp qw(croak);
  10         40  
  10         536  
14              
15 10     10   1138 use parent 'Config::INI::Reader';
  10         673  
  10         52  
16              
17             sub new {
18 9     9 1 6953 my ($class) = @_;
19              
20 9         91 my $self = {
21             data => [],
22             sections => {},
23             };
24              
25 9         20 bless $self => $class;
26 9         35 $self->{current_section} = { name => $self->starting_section, lines => [], comment_lines => [] };
27              
28 9         67 return $self;
29             }
30              
31             sub can_ignore {
32 120     120 1 5226 my ( $self, $line, ) = @_;
33 120 100       250 if ( $line =~ /\A\s*;(.*?)\s*$/msx ) {
34 14         11 push @{ $self->{current_section}->{comment_lines} }, "$1";
  14         29  
35 14         18 return 1;
36             }
37 106 100       291 return $line =~ /\A\s*$/msx ? 1 : 0;
38             }
39              
40             sub change_section {
41 26     26 1 232 my ( $self, $section ) = @_;
42              
43 26         119 my ( $package, $name ) = $section =~ m{
44             \A \s* # Ignore leading whitespace
45             (?: # Optional Non Capture Group
46             ([^/\s]+) # Capture a bunch chars at the front
47             \s* # then skip over subsequent whitespace
48             / # and slash divider
49             \s*
50             )?
51             (.+) # Capture the rest as a complete token
52             \z
53             }msx;
54 26 100 66     121 $package = $name unless defined $package and length $package;
55              
56 26 50       34 Carp::croak qq{couldn't understand section header: "$section"}
57             unless $package;
58              
59 26         21 push @{ $self->{data} }, $self->{current_section};
  26         38  
60              
61 26 50       49 if ( exists $self->{sections}->{$name} ) {
62 0         0 Carp::croak qq{Duplicate section $name ( $package )};
63             }
64 26         48 $self->{sections}->{$name} = 1;
65 26         78 $self->{current_section} = {
66             name => $name,
67             package => $package,
68             lines => [],
69             comment_lines => [],
70             };
71 26         37 return;
72             }
73              
74             sub set_value {
75 54     54 1 610 my ( $self, $name, $value ) = @_;
76              
77 54         33 push @{ $self->{current_section}->{lines} }, $name, $value;
  54         94  
78 54         65 return;
79             }
80              
81             sub finalize {
82 9     9 1 276 my ($self) = @_;
83 9         10 push @{ $self->{data} }, $self->{current_section};
  9         19  
84 9         10 return;
85             }
86              
87             1;
88              
89             __END__
90              
91             =pod
92              
93             =encoding UTF-8
94              
95             =head1 NAME
96              
97             Dist::Zilla::Util::ExpandINI::Reader - An order-preserving INI reader
98              
99             =head1 VERSION
100              
101             version 0.003001
102              
103             =head1 AUTHOR
104              
105             Kent Fredric <kentnl@cpan.org>
106              
107             =head1 COPYRIGHT AND LICENSE
108              
109             This software is copyright (c) 2015 by Kent Fredric <kentfredric@gmail.com>.
110              
111             This is free software; you can redistribute it and/or modify it under
112             the same terms as the Perl 5 programming language system itself.
113              
114             =cut