2017-02-06 00:04:28 +01:00
|
|
|
package Lemonldap::NG::Common::Conf::Wrapper;
|
|
|
|
|
|
|
|
use strict;
|
2019-04-09 21:01:55 +02:00
|
|
|
use JSON;
|
2017-02-06 00:04:28 +01:00
|
|
|
|
2019-04-09 22:04:19 +02:00
|
|
|
our $VERSION = '2.0.3';
|
2017-02-06 00:04:28 +01:00
|
|
|
|
|
|
|
sub TIEHASH {
|
|
|
|
my ( $class, $conf, $overrides ) = @_;
|
2019-04-09 21:01:55 +02:00
|
|
|
my %h = %$overrides;
|
|
|
|
foreach ( keys %h ) {
|
|
|
|
if ( $h{$_} =~ /^[\[\{]/ ) {
|
|
|
|
my $tmp = eval { JSON::from_json( $h{$_} ) };
|
|
|
|
if ($@) {
|
|
|
|
print STDERR "Wrapper: unable to compile $_ key, skipping\n";
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$h{$_} = $tmp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-02-06 00:04:28 +01:00
|
|
|
return bless {
|
|
|
|
_wrapC => $conf,
|
2019-04-09 21:01:55 +02:00
|
|
|
_wrapO => \%h,
|
2017-02-06 00:04:28 +01:00
|
|
|
}, $class;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub FETCH {
|
|
|
|
my ( $self, $key ) = @_;
|
|
|
|
return (
|
|
|
|
exists( $self->{_wrapO}->{$key} )
|
|
|
|
? $self->{_wrapO}->{$key}
|
|
|
|
: $self->{_wrapC}->{$key}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub STORE {
|
|
|
|
my ( $self, $key, $value ) = @_;
|
|
|
|
return $self->{_wrapO}->{$key} = $value;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub DELETE {
|
|
|
|
my ( $self, $key ) = @_;
|
|
|
|
my $res = $self->{_wrapO}->{$key} // $self->{_wrapC}->{$key};
|
|
|
|
$self->{_wrapO}->{$key} = undef;
|
|
|
|
return $res;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub EXISTS {
|
|
|
|
my ( $self, $key ) = @_;
|
|
|
|
return (
|
|
|
|
exists( $self->{_wrapC}->{$key} )
|
|
|
|
or exists( $self->{_wrapO}->{$key} )
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub DESTROY {
|
|
|
|
my $self = shift;
|
|
|
|
delete $self->{_wrapO};
|
|
|
|
delete $self->{_wrapC};
|
|
|
|
}
|
|
|
|
|
|
|
|
sub FIRSTKEY {
|
|
|
|
return each %{ $_[0]->{_wrapC} };
|
|
|
|
}
|
|
|
|
|
|
|
|
sub NEXTKEY {
|
|
|
|
return each %{ $_[0]->{_wrapC} };
|
|
|
|
}
|
|
|
|
|
|
|
|
1;
|