App-SpreadRevolutionaryDate
view release on metacpan or search on metacpan
lib/App/SpreadRevolutionaryDate.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;
$App::SpreadRevolutionaryDate::VERSION = '0.54';
# ABSTRACT: Spread date and time from Revolutionary (Republican) Calendar on Bluesky, Twitter, Mastodon, Freenode and Liberachat.
use Moose;
use App::SpreadRevolutionaryDate::Config;
use Class::Load ':all';
use Locale::TextDomain 'App-SpreadRevolutionaryDate';
use Locale::Messages qw(bind_textdomain_filter);
use Encode;
BEGIN {
$ENV{OUTPUT_CHARSET} = 'UTF-8';
bind_textdomain_filter 'App-SpreadRevolutionaryDate' => \&Encode::decode_utf8, Encode::FB_DEFAULT;
}
use namespace::autoclean;
has 'config' => (
is => 'ro',
isa => 'App::SpreadRevolutionaryDate::Config',
required => 1,
);
has 'targets' => (
is => 'rw',
isa => 'HashRef[Object]',
required => 1,
);
has 'msgmaker' => (
is => 'rw',
isa => 'Object',
required => 1,
);
around BUILDARGS => sub {
my ($orig, $class, $filename) = @_;
my $config = App::SpreadRevolutionaryDate::Config->new($filename);
my $msgmaker_class = 'App::SpreadRevolutionaryDate::MsgMaker::' . $config->msgmaker;
try_load_class($msgmaker_class)
or die "Cannot import msgmaker class $msgmaker_class\n";
load_class($msgmaker_class);
my %msgmaker_args = $config->get_msgmaker_arguments($config->msgmaker);
my %special_birthday_args = ();
if ($config->special_birthday_name && $config->special_birthday_day && $config->special_birthday_month) {
$special_birthday_args{special_birthday_name} = $config->special_birthday_name;
$special_birthday_args{special_birthday_day} = $config->special_birthday_day;
$special_birthday_args{special_birthday_month} = $config->special_birthday_month;
$special_birthday_args{special_birthday_url} = $config->special_birthday_url if $config->special_birthday_url;
$special_birthday_args{special_birthday_gemini} = $config->special_birthday_gemini if $config->special_birthday_gemini;
$special_birthday_args{special_birthday_prefix} = $config->special_birthday_prefix if $config->special_birthday_prefix;
$special_birthday_args{special_birthday_plural} = $config->special_birthday_plural if $config->special_birthday_plural;
$special_birthday_args{special_birthday_gender} = $config->special_birthday_gender if $config->special_birthday_gender;
}
my $msgmaker = $msgmaker_class->new(locale => $config->locale, %msgmaker_args, %special_birthday_args);
return $class->$orig(config => $config, targets => {}, msgmaker => $msgmaker);
};
sub BUILD {
my $self = shift;
foreach my $target (@{$self->config->targets}) {
my $target_class = 'App::SpreadRevolutionaryDate::Target::' . ucfirst(lc($target));
try_load_class($target_class)
or die "Cannot import target class $target_class for target $target\n";
load_class($target_class);
my %target_args = $self->config->get_target_arguments($target);
$self->targets->{$target} = $target_class->new(%target_args);
}
}
( run in 1.610 second using v1.01-cache-2.11-cpan-99c4e6809bf )