App-SpreadRevolutionaryDate
view release on metacpan or search on metacpan
lib/App/SpreadRevolutionaryDate/Config.pm view on Meta::CPAN
#
# This file is part of App-SpreadRevolutionaryDate
#
# This software is Copyright (c) 2019-2026 by Gérald Sédrati.
#
# This is free software, licensed under:
#
# The GNU General Public License, Version 3, June 2007
#
use 5.014;
use utf8;
package App::SpreadRevolutionaryDate::Config;
$App::SpreadRevolutionaryDate::Config::VERSION = '0.54';
# ABSTRACT: Companion class of L<App::SpreadRevolutionaryDate>, to handle configuration file and command line arguments, subclass of L<AppConfig>.
use Moose;
use MooseX::NonMoose;
extends 'AppConfig';
use Getopt::Long;
use AppConfig qw(:argcount);
use File::HomeDir;
use Class::Load ':all';
use Locale::TextDomain 'App-SpreadRevolutionaryDate';
use namespace::autoclean;
BEGIN {
unless ($ENV{PERL_UNICODE} && $ENV{PERL_UNICODE} =~ /A/) {
use Encode qw(decode_utf8);
@ARGV = map { decode_utf8($_, 1) } @ARGV;
}
}
sub new {
my ($class, $filename) = @_;
# Backup command line arguments to be consumed twice
my @orig_argv = @ARGV;
# Parse command line only parameters
my $config_first = Getopt::Long::Parser->new;
$config_first->configure('pass_through');
if ($filename) {
$config_first->getoptions("version|v" => sub { say $App::SpreadRevolutionaryDate::Config::VERSION; exit 0; },
"help|h|?" => \&usage);
} else {
$config_first->getoptions("version|v" => sub { say $App::SpreadRevolutionaryDate::Config::VERSION; exit 0; },
"help|h|?" => \&usage,
"conf|c=s" => \$filename);
}
# If filename is not a file path but a GLOB or an opend filehandle
# we'll need to rewind it to the beginning before reading it twice
my $file_start;
$file_start = tell $filename if $filename && ref($filename);
# Find targets
my $config_targets = AppConfig::new($class, {CREATE => 1, ERROR => sub {}},
'conf' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'c'},
'version' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'v'},
'help' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'h|?'},
'targets' => {ARGCOUNT => ARGCOUNT_LIST, ALIAS => 'tg'},
'msgmaker' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'mm'},
'test' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'no|n'},
'locale' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'l'},
'acab' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'a'},
'bluesky' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'b'},
'twitter' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 't'},
'mastodon' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'm'},
'freenode' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'f'},
'liberachat' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'lt'});
# Rewind command line arguments and process them
@ARGV = @orig_argv;
$config_targets->parse_file($filename);
# Record targets in configuration file to be bypassed if defined in command line arguments
my @config_file_targets = @{$config_targets->targets};
$config_targets->parse_command_line;
# Add targets defined with targets option
my @targets = @{$config_targets->targets};
( run in 0.506 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )