From f23369c8b19a2e0966e6dde843ab6920fe0b93df Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Sun, 16 Dec 2018 23:24:20 +0100 Subject: WIP Add configuration class Signed-off-by: Florian Pritz --- lib/App/ArchLinux/PackagerTools.pm | 3 ++ lib/App/ArchLinux/PackagerTools/Config.pm | 88 +++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 lib/App/ArchLinux/PackagerTools/Config.pm (limited to 'lib/App') diff --git a/lib/App/ArchLinux/PackagerTools.pm b/lib/App/ArchLinux/PackagerTools.pm index 79b4787..a4cd69e 100644 --- a/lib/App/ArchLinux/PackagerTools.pm +++ b/lib/App/ArchLinux/PackagerTools.pm @@ -10,6 +10,7 @@ use Log::Any qw($log); use App::ArchLinux::PackagerTools::Pacman; use App::ArchLinux::PackagerTools::CPAN; +use App::ArchLinux::PackagerTools::Config; =encoding utf-8 @@ -37,6 +38,7 @@ Returns a new instance. =cut method new($class: $deps = {}) { + $deps->{config} //= App::ArchLinux::PackagerTools::Config->new(); $deps->{cpan} //= App::ArchLinux::PackagerTools::CPAN->new(); $deps->{pacman} //= App::ArchLinux::PackagerTools::Pacman->new({$deps->%{cpan}}); return $class->new_no_defaults($deps); @@ -46,6 +48,7 @@ method new_no_defaults($class: $deps = {}) { my $self = {}; bless $self, $class; $self->{deps} = $deps; + $self->{config} = $deps->{config}->get_config(); return $self; } diff --git a/lib/App/ArchLinux/PackagerTools/Config.pm b/lib/App/ArchLinux/PackagerTools/Config.pm new file mode 100644 index 0000000..a44c845 --- /dev/null +++ b/lib/App/ArchLinux/PackagerTools/Config.pm @@ -0,0 +1,88 @@ +package App::ArchLinux::PackagerTools::Config; +use strictures; + +use autodie; +use Function::Parameters; +use Log::Any qw($log); +use Hash::Merge; +use Path::Tiny; +use TOML qw(from_toml); + +=head1 NAME + +App::ArchLinux::PackagerTools::Config - ShortDesc + +=head1 SYNOPSIS + +use App::ArchLinux::PackagerTools::Config; + +# synopsis... + +=head1 DESCRIPTION + +# longer description... + +=head1 METHODS + +=head2 new + + my $config = App::ArchLinux::PackagerTools::Config->new(); + +Returns a new instance. + +=cut + +method new($class: $deps = {}) { + return $class->new_no_defaults($deps); +} + +method new_no_defaults($class: $deps = {}) { + my $self = {}; + bless $self, $class; + $self->{deps} = $deps; + return $self; +} + +=head2 Public Methods + +=cut + +=head3 get_config + + my $conf = $config->get_config(); + +Return config content as a hash. + +=cut + +method get_config() { + my $config = $self->_get_default_config(); + + my $file = path(($ENV{XDG_CONFIG_HOME} // $ENV{HOME}."/.config")."/perlpkg/config.toml"); + if ($file->exists) { + $log->debugf("Reading config file: %s", $file); + my $file_config = from_toml($file->slurp); + $config = merge($file_config, $config); + + } else { + $log->debug("Config file not found. Returning default config"); + } + return $config; +} + +=head3 _get_default_config + + my $default_conf = $config->_get_default_config(); + +Return a hash with the default config values. + +=cut + +method _get_default_config() { + return { + }; +} + +1; + +__END__ -- cgit v1.2.3-24-g4f1b