Clean up the inner workings a bit.

This commit is contained in:
Dave Cross 2017-06-23 16:02:31 +01:00
parent 2da809179d
commit c3d4d89430

View file

@ -9,7 +9,7 @@ use Moose;
our $VERSION = 'v1.0.0'; our $VERSION = 'v1.0.0';
has file => ( is => 'rw', isa => 'Str', required => 1 ); has file => ( is => 'ro', isa => 'Str', required => 1 );
has name => ( is => 'rw', isa => 'Str' ); has name => ( is => 'rw', isa => 'Str' );
has version => ( is => 'rw', isa => 'Str' ); has version => ( is => 'rw', isa => 'Str' );
has epoch => ( is => 'rw', isa => 'Str' ); has epoch => ( is => 'rw', isa => 'Str' );
@ -18,11 +18,39 @@ has summary => ( is => 'rw', isa => 'Str' );
has license => ( is => 'rw', isa => 'Str' ); has license => ( is => 'rw', isa => 'Str' );
has group => ( is => 'rw', isa => 'Str' ); has group => ( is => 'rw', isa => 'Str' );
has url => ( is => 'rw', isa => 'Str' ); has url => ( is => 'rw', isa => 'Str' );
has source => ( is => 'rw', isa => 'ArrayRef[Str]' ); has source => ( is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] } );
has buildroot => ( is => 'rw', isa => 'Str' ); has buildroot => ( is => 'rw', isa => 'Str' );
has buildarch => ( is => 'rw', isa => 'Str' ); has buildarch => ( is => 'rw', isa => 'Str' );
has buildrequires => ( is => 'rw', isa => 'ArrayRef[Str]' ); has buildrequires => ( is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] } );
has requires => ( is => 'rw', isa => 'ArrayRef[Str]' ); has requires => ( is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] } );
has parse_spec => (
is => 'ro',
isa => 'HashRef',
lazy_build => 1,
);
sub _build_parse_spec {
return {
scalars => {
name => qr[^Name:\s*(\S+)],
version => qr[^Version:\s*(\S+)],
epoch => qr[^Epoch:\s*(\S+)],
release => qr[^Release:\s*(\S+)],
summary => qr[^Summary:\s*(.+)],
license => qr[^License:\s*(.+)],
group => qr[^Group:\s*(\S+)],
url => qr[^URL:\s*(\S+)],
buildroot => qr[^BuildRoot:\s*(\S+)],
buildarch => qr[^BuildArch:\s*(\S+)],
},
arrays => {
source => qr[^Source\d*:\s*(\S+)],
buildrequires => qr[^BuildRequires:\s*(.+)],
requires => qr[^Requires:\s*(.+)],
},
};
}
sub BUILD { sub BUILD {
my $self = shift; my $self = shift;
@ -57,36 +85,20 @@ sub parse_file {
open my $fh, $file or croak "Cannot open $file: $!\n"; open my $fh, $file or croak "Cannot open $file: $!\n";
my %strings = ( my $scalars = $self->parse_spec->{scalars};
name => qr[^Name:\s*(\S+)], my $arrays = $self->parse_spec->{arrays};
version => qr[^Version:\s*(\S+)],
epoch => qr[^Epoch:\s*(\S+)],
release => qr[^Release:\s*(\S+)],
summary => qr[^Summary:\s*(.+)],
license => qr[^License:\s*(.+)],
group => qr[^Group:\s*(\S+)],
url => qr[^URL:\s*(\S+)],
buildroot => qr[^BuildRoot:\s*(\S+)],
buildarch => qr[^BuildArch:\s*(\S+)],
);
my %arrays = (
source => qr[^Source\d*:\s*(\S+)],
buildrequires => qr[^BuildRequires:\s*(.+)],
requires => qr[^Requires:\s*(.+)],
);
LINE: while (<$fh>) { LINE: while (<$fh>) {
foreach my $attr (keys %strings) { foreach my $attr (keys %$scalars) {
if (/$strings{$attr}/) { if (/$scalars->{$attr}/) {
$self->{$attr} = $1; $self->$attr($1);
next LINE; next LINE;
} }
} }
foreach my $attr (keys %arrays) { foreach my $attr (keys %$arrays) {
if (/$arrays{$attr}/) { if (/$arrays->{$attr}/) {
push @{$self->{$attr}}, $1; push @{$self->$attr}, $1;
next LINE; next LINE;
} }
} }