package App::FileSummoner::Register;
BEGIN {
$App::FileSummoner::Register::VERSION = '0.005';
}
use 5.006;
use strict;
use warnings;
=head1 NAME
App::FileSummoner::Register - Skeletons register
=cut
my ( @rules, %skeleton );
=head1 SYNOPSIS
registerSkeleton(qr/\.pm$/, 'perl/skeleton.pm');
my $skeleton = chooseSkeleton('some/path/Module.pm');
=head1 EXPORT
=over 2
=item registerSkeleton
=item chooseSkeleton
=back
=cut
use Exporter 'import';
our @EXPORT_OK = qw(registerSkeleton chooseSkeleton);
=head1 SUBROUTINES
=head2 registerSkeleton
Register new skeleton for a given rule. Use in I<rules.pl> file.
=cut
sub registerSkeleton {
my ( $rule, $skeleton ) = @_;
return if defined $skeleton{$rule};
push @rules, $rule;
$skeleton{$rule} = $skeleton;
}
=head2 chooseSkeleton
Choose the best skeleton for a given file.
=cut
sub chooseSkeleton {
my ($fileName) = @_;
foreach my $rule (@rules) {
return $skeleton{$rule} if ruleMatches( $rule, $fileName );
}
return undef;
}
=head2 unregisterAll
=cut
sub unregisterAll {
@rules = ();
%skeleton = ();
}
=head2 ruleMatches
Check if a filename matches a given rule.
=cut
sub ruleMatches {
my ( $rule, $fileName ) = @_;
return rulesMatches( $rule, $fileName ) if ref $rule eq 'ARRAY';
return &$rule($fileName) if ref $rule eq 'CODE';
return $fileName =~ $rule;
}
sub rulesMatches {
my ( $rulesRef, $fileName ) = @_;
foreach my $rule (@{ $rulesRef }) {
ruleMatches($rule, $fileName) || return 0;
}
return 1;
}
1;