skeleton config objects and loading
[scpubgit/Clifton.git] / lib / App / Clifton / ConfigLoader.pm
1 package App::Clifton::ConfigLoader;
2
3 use aliased 'App::Clifton::Config';
4 use aliased 'App::Clifton::UserConfig';
5 use Config::Settings;
6 use Moo;
7
8 has _cs => (is => 'lazy', handles => { '_parse_file' => 'parse_file' });
9
10 sub _build__cs {
11   Config::Settings->new
12 }
13
14 sub _new_config { Config->new }
15
16 sub config_from_file {
17   my ($self, $file) = @_;
18   my $data = $self->_parse_file($file);
19   my $config = $self->_new_config;
20   foreach my $name (keys %{$data->{bridge}}) {
21     $config->bridges->add({
22       name => $name,
23       %{$data->{bridge}{$name}}
24     });
25   }
26   foreach my $name (keys %{$data->{user}}) {
27     $config->users->add({
28       name => $name,
29       %{$data->{user}{$name}}
30     });
31   }
32   return $config;
33 }