1 package LolCatalyst::Lite::Translator;
3 use Module::Pluggable::Object;
6 use namespace::clean -except => 'meta';
8 has 'default_target' => (
9 is => 'ro', isa => 'Str', required => 1, default => 'LOLCAT'
12 has '_translators' => (
13 is => 'ro', isa => 'HashRef', lazy_build => 1
16 sub _build__translators {
18 my $base = __PACKAGE__;
19 my $mp = Module::Pluggable::Object->new(
20 search_path => [ $base ]
22 my @classes = $mp->plugins;
24 foreach my $class (@classes) {
25 Class::MOP::load_class($class);
26 (my $name = $class) =~ s/^\Q${base}::\E//;
27 $translators{$name} = $class->new;
33 my ($self, $text) = @_;
34 $self->translate_to($self->default_target, $text);
38 my ($self, $target, $text) = @_;
39 $self->_translators->{$target}->translate($text);
42 __PACKAGE__->meta->make_immutable;