diff --git a/lib/NGCP/API/Client.pm b/lib/NGCP/API/Client.pm index b335645..ea75325 100644 --- a/lib/NGCP/API/Client.pm +++ b/lib/NGCP/API/Client.pm @@ -1,6 +1,8 @@ package NGCP::API::Client; use strict; use warnings; +use feature qw(state); + use English qw(-no_match_vars); use Config::Tiny; use JSON::XS; @@ -9,15 +11,34 @@ use LWP::UserAgent; use Readonly; use URI; -my $config; +sub _load_config_defaults { + my $cfg_file = '/etc/default/ngcp-api'; + my $cfg; + + $cfg = Config::Tiny->read($cfg_file) + or die "Cannot read $cfg_file: $ERRNO"; + + Readonly my $config => { + host => $cfg->{_}->{NGCP_API_IP}, + port => $cfg->{_}->{NGCP_API_PORT}, + iface => $cfg->{_}->{NGCP_API_IFACE}, + sslverify => $cfg->{_}->{NGCP_API_SSLVERIFY} || 'yes', + sslverify_lb => $cfg->{_}->{NGCP_API_SSLVERIFY_LOOPBACK} || 'no', + read_timeout => $cfg->{_}->{NGCP_API_READ_TIMEOUT} || 180, + page_rows => $cfg->{_}->{NGCP_API_PAGE_ROWS} // 10, + auth_user => $cfg->{_}->{AUTH_SYSTEM_LOGIN}, + auth_pass => $cfg->{_}->{AUTH_SYSTEM_PASSWORD}, + verbose => 0, + }; + + return $config; +} -BEGIN { - my $cfg_file = "/etc/default/ngcp-api"; - $config = Config::Tiny->read($cfg_file) - or die "Cannot read $cfg_file: $ERRNO"; -}; +sub _get_config_defaults { + state $config = _load_config_defaults(); -Readonly::Scalar my $cfg => $config; + return $config; +} my %opts = (); @@ -83,18 +104,12 @@ sub new { my $class = shift; my $self = {}; - $opts{host} = $cfg->{_}->{NGCP_API_IP}; - $opts{port} = $cfg->{_}->{NGCP_API_PORT}; - $opts{iface} = $cfg->{_}->{NGCP_API_IFACE}; - $opts{sslverify} = $cfg->{_}->{NGCP_API_SSLVERIFY} || 'yes'; - $opts{sslverify_lb} = $cfg->{_}->{NGCP_API_SSLVERIFY_LOOPBACK} || 'no'; - $opts{read_timeout} = $cfg->{_}->{NGCP_API_READ_TIMEOUT} || 180; - $opts{auth_user} = $cfg->{_}->{AUTH_SYSTEM_LOGIN}; - $opts{auth_pass} = $cfg->{_}->{AUTH_SYSTEM_PASSWORD}; - $opts{verbose} = 0; - bless $self, $class; - $self->set_page_rows($cfg->{_}->{NGCP_API_PAGE_ROWS} // 10); + + my $default_opts = _get_config_defaults(); + foreach my $opt (keys %{$default_opts}) { + $opts{$opt} //= $default_opts->{$opt}; + } $self->_create_ua(); return $self;