aboutsummaryrefslogtreecommitdiffstats
path: root/perllib
diff options
context:
space:
mode:
Diffstat (limited to 'perllib')
-rw-r--r--perllib/Open311/Endpoint/Role/ConfigFile.pm30
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;