diff options
Diffstat (limited to 'perllib/Open311')
-rw-r--r-- | perllib/Open311/Endpoint/Role/ConfigFile.pm | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/perllib/Open311/Endpoint/Role/ConfigFile.pm b/perllib/Open311/Endpoint/Role/ConfigFile.pm new file mode 100644 index 000000000..1c4b83355 --- /dev/null +++ b/perllib/Open311/Endpoint/Role/ConfigFile.pm @@ -0,0 +1,30 @@ +package Open311::Endpoint::Role::ConfigFile; +use Moo::Role; +use Path::Tiny 'path'; +use Carp 'croak'; +use YAML (); +use Types::Standard qw( Maybe Str ); + +has config_file => ( + is => 'ro', + isa => Maybe[Str], +); + +around BUILDARGS => sub { + my $next = shift; + my $class = shift; + + my %args = @_; + if (my $config_file = $args{config_file}) { + my $cfg = path($config_file); + croak "$config_file is not a file" unless $cfg->is_file; + + my $config = YAML::LoadFile($cfg) or croak "Couldn't load config from $config_file"; + return $class->$next(%$config, %args); + } + else { + return $class->$next(%args); + } +}; + +1; |