X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FLolCatalyst%2FLite%2FTranslator.pm;h=05122a12dfd46a1b2afa98efa92ed51e4ef9b846;hb=d0dd2387fed0dc4a2775282d7c6b06ee241a947e;hp=7dd978e54022a5ec835649c28f7540e623c2ad02;hpb=63ed6b503b569a6b146f746ebf8fde02488b2edf;p=catagits%2Fcatbook-code.git diff --git a/lib/LolCatalyst/Lite/Translator.pm b/lib/LolCatalyst/Lite/Translator.pm index 7dd978e..05122a1 100644 --- a/lib/LolCatalyst/Lite/Translator.pm +++ b/lib/LolCatalyst/Lite/Translator.pm @@ -1,21 +1,36 @@ package LolCatalyst::Lite::Translator; -use LolCatalyst::Lite::Translator::LOLCAT; +use Module::Pluggable::Object; use Moose; +use aliased 'LolCatalyst::Lite::Interface::TranslationDriver'; use namespace::clean -except => 'meta'; 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); + 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; + } + return \%translators; } sub translate { @@ -25,7 +40,7 @@ sub translate { sub translate_to { my ($self, $target, $text) = @_; - $self->translators->{$target}->translate($text); + $self->_translators->{$target}->translate($text); } __PACKAGE__->meta->make_immutable;