From: Matt S Trout Date: Sun, 8 Feb 2009 16:25:01 +0000 (-0500) Subject: provide interface definition role and update translator to check for it X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2Fcatbook-code.git;a=commitdiff_plain;h=d0dd2387fed0dc4a2775282d7c6b06ee241a947e provide interface definition role and update translator to check for it --- diff --git a/lib/LolCatalyst/Lite/Interface/TranslationDriver.pm b/lib/LolCatalyst/Lite/Interface/TranslationDriver.pm new file mode 100644 index 0000000..295028c --- /dev/null +++ b/lib/LolCatalyst/Lite/Interface/TranslationDriver.pm @@ -0,0 +1,8 @@ +package LolCatalyst::Lite::Interface::TranslationDriver; + +use Moose::Role; +use namespace::clean -except => 'meta'; + +requires 'translate'; + +1; diff --git a/lib/LolCatalyst/Lite/Translator.pm b/lib/LolCatalyst/Lite/Translator.pm index 2bf220a..05122a1 100644 --- a/lib/LolCatalyst/Lite/Translator.pm +++ b/lib/LolCatalyst/Lite/Translator.pm @@ -3,6 +3,7 @@ package LolCatalyst::Lite::Translator; use Module::Pluggable::Object; use Moose; +use aliased 'LolCatalyst::Lite::Interface::TranslationDriver'; use namespace::clean -except => 'meta'; has 'default_target' => ( @@ -23,6 +24,9 @@ sub _build__translators { my %translators; foreach my $class (@classes) { Class::MOP::load_class($class); + unless ($class->does(TranslationDriver)) { + confess "Class ${class} in ${base}:: namespace does not implement Translation Driver interface"; + } (my $name = $class) =~ s/^\Q${base}::\E//; $translators{$name} = $class->new; } diff --git a/lib/LolCatalyst/Lite/Translator/Driver/LOLCAT.pm b/lib/LolCatalyst/Lite/Translator/Driver/LOLCAT.pm index c0f79b1..16ca5da 100644 --- a/lib/LolCatalyst/Lite/Translator/Driver/LOLCAT.pm +++ b/lib/LolCatalyst/Lite/Translator/Driver/LOLCAT.pm @@ -4,6 +4,8 @@ use Moose; use Acme::LOLCAT (); use namespace::clean -except => 'meta'; +with 'LolCatalyst::Lite::Interface::TranslationDriver'; + sub translate { my ($self, $text) = @_; return Acme::LOLCAT::translate($text); diff --git a/lib/LolCatalyst/Lite/Translator/Driver/Scramble.pm b/lib/LolCatalyst/Lite/Translator/Driver/Scramble.pm index 1501013..c6e0b6e 100644 --- a/lib/LolCatalyst/Lite/Translator/Driver/Scramble.pm +++ b/lib/LolCatalyst/Lite/Translator/Driver/Scramble.pm @@ -36,6 +36,8 @@ sub _scramble_block { use namespace::clean -except => 'meta'; +with 'LolCatalyst::Lite::Interface::TranslationDriver'; + sub translate { my ($self, $text) = @_; _scramble_block(\$text);