provide interface definition role and update translator to check for it
Matt S Trout [Sun, 8 Feb 2009 16:25:01 +0000 (11:25 -0500)]
lib/LolCatalyst/Lite/Interface/TranslationDriver.pm [new file with mode: 0644]
lib/LolCatalyst/Lite/Translator.pm
lib/LolCatalyst/Lite/Translator/Driver/LOLCAT.pm
lib/LolCatalyst/Lite/Translator/Driver/Scramble.pm

diff --git a/lib/LolCatalyst/Lite/Interface/TranslationDriver.pm b/lib/LolCatalyst/Lite/Interface/TranslationDriver.pm
new file mode 100644 (file)
index 0000000..295028c
--- /dev/null
@@ -0,0 +1,8 @@
+package LolCatalyst::Lite::Interface::TranslationDriver;
+
+use Moose::Role;
+use namespace::clean -except => 'meta';
+
+requires 'translate';
+
+1;
index 2bf220a..05122a1 100644 (file)
@@ -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;
   }
index c0f79b1..16ca5da 100644 (file)
@@ -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);
index 1501013..c6e0b6e 100644 (file)
@@ -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);