From 8bf0e6d5e3805f6b32ab816198428ebabae156cb Mon Sep 17 00:00:00 2001 From: Dominik Meyer Date: Sun, 24 Mar 2019 16:11:02 +0100 Subject: [PATCH] ADD: first version of plugin --- lib/Mojolicious/Plugin/GitConfig.pm | 80 ++++++++++++++++++++++ lib/Mojolicious/Plugin/GitConfig/Config.pm | 19 +++++ 2 files changed, 99 insertions(+) create mode 100644 lib/Mojolicious/Plugin/GitConfig.pm create mode 100644 lib/Mojolicious/Plugin/GitConfig/Config.pm diff --git a/lib/Mojolicious/Plugin/GitConfig.pm b/lib/Mojolicious/Plugin/GitConfig.pm new file mode 100644 index 0000000..6c16013 --- /dev/null +++ b/lib/Mojolicious/Plugin/GitConfig.pm @@ -0,0 +1,80 @@ +package Mojolicious::Plugin::GitConfig; + +# ABSTRACT: Mojolicious Plugin for using Config::GitLike as the main configuration provider +use Mojo::Base 'Mojolicious::Plugin'; +use Mojolicious::Plugin::GitConfig::Config; +use Config::GitLike; +use Try::Tiny; + +=head1 DESCRIPTION + +This modules uses the Config::GitLike Module to implement the Mojolicious App configuration. + + # uses the default git repository configuration files + $self->plugin('GitConfig' => {git=>1}); + + # uses a given configuration file + $self->plugin('GitConfig' => {file=>"myconfig.conf"}); + + # uses the default Mojolicious configuration files + $self->plugin('GitConfig'); + + $self->gitconfig() returns the Config::GitLike class + +=cut + +=attr configdata + + attribute holding the configuration data after loading the configuration file/files + +=cut +has 'configdata' => undef; + + +=method register + + method called by Mojolicous while loading this plugin + + @param #1 - the class itself + @param #2 - the mojolicious app context + @param #3 - the configuration provided by loading the plugin + +=cut +sub register { + my $self = shift; + my $app = shift; + my $conf = shift; + + # select config file + my $file = $conf->{file} || $ENV{MOJO_CONFIG} || "config"; + + # if we use the git configuration files we have to do something a bit different + if ($conf->{git}) + { + $self->configdata(Mojolicious::Plugin::GitConfig::Config->new(confname=>"config",compatible => 1, cascade => 1)); + $self->configdata()->load(); + $app->log->info("git configuration files loaded"); + } + else + { + try { + $self->configdata(Config::GitLike->load_file($file)); + } catch { + $app->log->fatal("could not load configuration file " . $file); + die("could not load configuration file " . $file); + }; + } + + $app->log->debug(__PACKAGE__ . ": register helper gitconfig"); + + $app->helper(gitconfig => sub { + shift; + my $params = shift; + $self->configdata(); + } + ); + + +}; + +1; diff --git a/lib/Mojolicious/Plugin/GitConfig/Config.pm b/lib/Mojolicious/Plugin/GitConfig/Config.pm new file mode 100644 index 0000000..b90b559 --- /dev/null +++ b/lib/Mojolicious/Plugin/GitConfig/Config.pm @@ -0,0 +1,19 @@ +package Mojolicious::Plugin::GitConfig::Config; + +# ABSTRACT: extended Config:GitLike class to use git repository config files +use Mojo::Base 'Config::GitLike'; + +sub global_file { + return "/etc/gitconfig"; +} + +sub user_file { + return $ENV{HOME} . "/.gitconfig"; +} + +sub dir_file { + return ".git/config"; +} + + +1;