diff options
author | Hakim Cassimally <hakim@mysociety.org> | 2014-07-15 17:14:00 +0000 |
---|---|---|
committer | Hakim Cassimally <hakim@mysociety.org> | 2014-10-16 16:56:26 +0000 |
commit | f47e9d48a2d26e92723ae96d3d65a1ba005f426f (patch) | |
tree | f456fe44e7d22b3f27cc75e5090cb5b34e5ee70a /perllib/Open311/Endpoint/Role/ConfigFile.pm | |
parent | 06a69fa7a7e9fae205df36ddc68d131d91533792 (diff) |
Open311 Role for accepting default config file
See also MooX::ConfigFromFile, but that's underdocumented and
seems overengineered -- may be worth implementing if requirements
become more complex however. (See also Config::Any, which is
well worth doing in future, using YAML only reflects current
usage in FMS though.)
Diffstat (limited to 'perllib/Open311/Endpoint/Role/ConfigFile.pm')
-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; |