summaryrefslogtreecommitdiff
path: root/lib/JWebmail/Plugin/INIConfig.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/JWebmail/Plugin/INIConfig.pm')
-rw-r--r--lib/JWebmail/Plugin/INIConfig.pm136
1 files changed, 0 insertions, 136 deletions
diff --git a/lib/JWebmail/Plugin/INIConfig.pm b/lib/JWebmail/Plugin/INIConfig.pm
deleted file mode 100644
index 08e1ef1..0000000
--- a/lib/JWebmail/Plugin/INIConfig.pm
+++ /dev/null
@@ -1,136 +0,0 @@
-package JWebmail::Plugin::INIConfig;
-use Mojo::Base 'Mojolicious::Plugin::Config';
-
-use List::Util 'all';
-
-use Config::Tiny;
-
-
-sub parse {
- my ($self, $content, $file, $conf, $_app) = @_;
-
- my $ct = Config::Tiny->new();
- my $config = $ct->read_string($content, 'utf8');
- die qq{Can't parse config "$file": } . $ct->errstr unless defined $config;
-
- $config = _process_config($config) unless $conf->{flat};
-
- return $config;
-}
-
-
-sub _process_config {
- my $val_prev = shift;
- my %val = %$val_prev;
-
- # arrayify section with number keys
- for my $key (keys %val) {
- if (keys %{$val{$key}} && all { $_ =~ /\d+/} keys %{$val{$key}}) {
- my $tmp = $val{$key};
- $val{$key} = [];
-
- for (keys %$tmp) {
- $val{$key}[$_] = $tmp->{$_};
- }
- }
- }
-
- # merge top section
- my $top_section = $val{'_'};
- delete $val{'_'};
- for (keys %$top_section) {
- $val{$_} = $top_section->{$_} unless $val{$_};
- }
-
- # make implicit nesting explicit
- for my $key (grep { $_ =~ /^\w+(::\w+)+$/} keys %val) {
-
- my @sections = split m/::/, $key;
- my $x = \%val;
- my $y;
- for (@sections) {
- $x->{$_} = {} unless ref $x->{$_};# eq 'HASH';
- $y = $x;
- $x = $x->{$_};
- }
- # merge
- if (ref $val{$key} eq 'ARRAY') {
- $y->{$sections[-1]} = [];
- $x = $y->{$sections[-1]};
- for ( keys @{ $val{$key} } ) {
- $x->[$_] = $val{$key}[$_];
- }
- }
- else {
- for ( keys %{ $val{$key} } ) {
- $x->{$_} = $val{$key}{$_};
- }
- }
- delete $val{$key};
- }
-
- return \%val
-}
-
-
-1
-
-__END__
-
-=encoding utf-8
-
-=head1 NAME
-
-INIConfig - Reads in ini config files.
-
-=head1 SYNOPSIS
-
- $app->plugin('INIConfig');
-
- @@ my_app.conf
-
- # global section
- key = val ; line comment
- [section]
- other_key = other_val
- [other::section]
- 0 = key1
- 1 = key2
- 2 = key3
-
-=head1 DESCRIPTION
-
-INI configuration is simple with limited nesting and propper comments.
-For more precise specification on the syntax see the Config::Tiny documentation
-on cpan.
-
-=head1 OPTIONS
-
-=head2 default
-
-Sets default configuration values.
-
-=head2 ext
-
-Sets file extension defaults to '.conf'.
-
-=head2 file
-
-Sets file name default '$app->moniker'.
-
-=head2 flat
-
-Keep configuration to exactly two nesting levels for all
-and disable auto array conversion.
-
-=head1 METHODS
-
-=head2 parse
-
-overrides the parse method of Mojolicious::Plugin::Config
-
-=head1 DEPENDENCIES
-
-Config::Tiny
-
-=cut