move drivers to better namespace
[catagits/catbook-code.git] / lib / LolCatalyst / Lite / Translator.pm
index 7dd978e..2bf220a 100644 (file)
@@ -1,6 +1,6 @@
 package LolCatalyst::Lite::Translator;
 
-use LolCatalyst::Lite::Translator::LOLCAT;
+use Module::Pluggable::Object;
 
 use Moose;
 use namespace::clean -except => 'meta';
@@ -9,13 +9,24 @@ has 'default_target' => (
   is => 'ro', isa => 'Str', required => 1, default => 'LOLCAT'
 );
 
-has 'translators' => (
+has '_translators' => (
   is => 'ro', isa => 'HashRef', lazy_build => 1
 );
 
-sub _build_translators {
+sub _build__translators {
   my ($self) = @_;
-  return { LOLCAT => LolCatalyst::Lite::Translator::LOLCAT->new };
+  my $base = __PACKAGE__.'::Driver';
+  my $mp = Module::Pluggable::Object->new(
+    search_path => [ $base ]
+  );
+  my @classes = $mp->plugins;
+  my %translators;
+  foreach my $class (@classes) {
+    Class::MOP::load_class($class);
+    (my $name = $class) =~ s/^\Q${base}::\E//;
+    $translators{$name} = $class->new;
+  }
+  return \%translators;
 }
 
 sub translate {
@@ -25,7 +36,7 @@ sub translate {
 
 sub translate_to {
   my ($self, $target, $text) = @_;
-  $self->translators->{$target}->translate($text);
+  $self->_translators->{$target}->translate($text);
 }
 
 __PACKAGE__->meta->make_immutable;