From b01a053e3d4012064a667745634010dd654b4777 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Mon, 24 Apr 2017 11:12:08 +0200 Subject: Update exceptions with more meaningful messages --- lib/Config.pm6 | 24 +++++++++++++++++----- lib/Config/Exception/FileNotFoundException.pm6 | 4 +++- lib/Config/Exception/MissingParserException.pm6 | 13 ++++++++++++ .../Exception/UnimplementedMethodException.pm6 | 4 +++- lib/Config/Exception/UnknownTypeException.pm6 | 4 +++- lib/Config/Exception/UnsupportedTypeException.pm6 | 11 ---------- lib/Config/Parser.pm6 | 8 ++++++-- 7 files changed, 47 insertions(+), 21 deletions(-) create mode 100644 lib/Config/Exception/MissingParserException.pm6 delete mode 100644 lib/Config/Exception/UnsupportedTypeException.pm6 (limited to 'lib') diff --git a/lib/Config.pm6 b/lib/Config.pm6 index 4078d73..2fa01bf 100644 --- a/lib/Config.pm6 +++ b/lib/Config.pm6 @@ -2,7 +2,7 @@ use v6.c; -use Config::Exception::UnsupportedTypeException; +use Config::Exception::MissingParserException; use Config::Exception::UnknownTypeException; use Config::Exception::FileNotFoundException; use Config::Type; @@ -48,7 +48,9 @@ class Config is export my $type = self.get-parser-type($path); - Config::Exception::UnknownTypeException.new.throw() if $type eq Config::Type::unknown; + Config::Exception::UnknownTypeException.new( + type => $type + ).throw() if $type eq Config::Type::unknown; "Config::Parser::" ~ $type; } @@ -91,12 +93,24 @@ class Config is export multi method read(Str $path, Str $parser = "") { - Config::Exception::FileNotFoundException.new.throw() unless $path.IO.f; + Config::Exception::FileNotFoundException.new( + path => $path + ).throw() unless $path.IO.f; $!parser = self.get-parser($path, $parser); - require ::($!parser); - $!content = ::($!parser).read($path); + try { + CATCH { + when X::CompUnit::UnsatisfiedDependency { + Config::Exception::MissingParserException.new( + parser => $parser + ).throw(); + } + } + + require ::($!parser); + $!content = ::($!parser).read($path); + } return True; } diff --git a/lib/Config/Exception/FileNotFoundException.pm6 b/lib/Config/Exception/FileNotFoundException.pm6 index 74d7bc1..b00f956 100644 --- a/lib/Config/Exception/FileNotFoundException.pm6 +++ b/lib/Config/Exception/FileNotFoundException.pm6 @@ -4,8 +4,10 @@ use v6.c; class Config::Exception::FileNotFoundException is Exception { + has Str $.path; + method message() { - "Could not find file" + "Could not find file at $!path" } } diff --git a/lib/Config/Exception/MissingParserException.pm6 b/lib/Config/Exception/MissingParserException.pm6 new file mode 100644 index 0000000..484026a --- /dev/null +++ b/lib/Config/Exception/MissingParserException.pm6 @@ -0,0 +1,13 @@ +#! /usr/bin/env false + +use v6.c; + +class Config::Exception::MissingParserException is Exception +{ + has Str $.parser; + + method message() + { + "$!parser is not a valid parser. Are you sure its installed?" + } +} diff --git a/lib/Config/Exception/UnimplementedMethodException.pm6 b/lib/Config/Exception/UnimplementedMethodException.pm6 index ae87db9..10af289 100644 --- a/lib/Config/Exception/UnimplementedMethodException.pm6 +++ b/lib/Config/Exception/UnimplementedMethodException.pm6 @@ -4,8 +4,10 @@ use v6.c; class Config::Exception::UnimplementedMethodException is Exception { + has Str $.method; + method message() { - "This method is not implemented" + "The $!method method is not implemented" } } diff --git a/lib/Config/Exception/UnknownTypeException.pm6 b/lib/Config/Exception/UnknownTypeException.pm6 index de58755..095572b 100644 --- a/lib/Config/Exception/UnknownTypeException.pm6 +++ b/lib/Config/Exception/UnknownTypeException.pm6 @@ -4,8 +4,10 @@ use v6.c; class Config::Exception::UnknownTypeException is Exception { + has Str $.file; + method message() { - "Could not deduce loader type." + "Could not deduce loader type for $!file." } } diff --git a/lib/Config/Exception/UnsupportedTypeException.pm6 b/lib/Config/Exception/UnsupportedTypeException.pm6 deleted file mode 100644 index c2f6f10..0000000 --- a/lib/Config/Exception/UnsupportedTypeException.pm6 +++ /dev/null @@ -1,11 +0,0 @@ -#! /usr/bin/env false - -use v6.c; - -class Config::Exception::UnsupportedTypeException is Exception -{ - method message() - { - "No parser support for the given file. Have you imported a correct parser?" - } -} diff --git a/lib/Config/Parser.pm6 b/lib/Config/Parser.pm6 index 23effc0..1a99ad6 100644 --- a/lib/Config/Parser.pm6 +++ b/lib/Config/Parser.pm6 @@ -8,11 +8,15 @@ class Config::Parser { method read(Str $path --> Hash) { - Config::Exception::UnimplementedMethodException.new.throw(); + Config::Exception::UnimplementedMethodException.new( + method => "read" + ).throw(); } method write(Str $path, Hash $config --> Hash) { - Config::Exception::UnimplementedMethodException.new.throw(); + Config::Exception::UnimplementedMethodException.new( + method => "write" + ).throw(); } } -- cgit v1.1