X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FLolCatalyst%2FLite%2FTranslator.pm;h=8832943700351840e72aed594f0b2f10ff7e1fb6;hb=e639dea98fb69c9382b0823026d8a62111d3053b;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..8832943 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 { @@ -23,9 +38,14 @@ sub translate { $self->translate_to($self->default_target, $text); } +sub can_translate_to { + my ($self, $target) = @_; + return exists $self->_translators->{$target}; +} + sub translate_to { my ($self, $target, $text) = @_; - $self->translators->{$target}->translate($text); + $self->_translators->{$target}->translate($text); } __PACKAGE__->meta->make_immutable;