Convert WebGUI::International to use blocky eval instead of stringy eval.

Add 1 test for getLanguage to check for refactoring.
This commit is contained in:
Colin Kuskie 2007-12-24 06:38:36 +00:00
parent 1989242c8e
commit c8a1bb6a7c
2 changed files with 19 additions and 11 deletions

View file

@ -101,10 +101,12 @@ sub get {
$language =~ s/$safeRe//g;
$namespace =~ s/$safeRe//g;
my $cmd = "WebGUI::i18n::".$language."::".$namespace;
my $file = $cmd;
$file =~ s{::}{/}g;
$file .= '.pm';
if (!defined *{"$cmd\::I18N"}) { ##Symbol table lookup
my $load = "use ".$cmd;
eval($load);
if (!exists $INC{ $file }) { ##Alread loaded?
eval{ require $file };
$self->session->errorHandler->warn($cmd." failed to compile because ".$@) if ($@);
}
our $table;
@ -135,11 +137,13 @@ sub getLanguage {
my ($self, $language, $property) = @_;
$language = $language || $self->{_language} || "English";
my $cmd = "WebGUI::i18n::".$language;
my $load = "use ".$cmd;
eval($load);
my $file = $cmd;
$file =~ s{::}{/}g;
$file .= '.pm';
eval{require $file};
unless ($@) {
$cmd = "\$".$cmd."::LANGUAGE";
my $hashRef = eval($cmd);
#$cmd = "\$".$cmd."::LANGUAGE";
my $hashRef = eval{ $cmd::LANGUAGE };
$self->session->errorHandler->warn("Failed to retrieve language properties because ".$@) if ($@);
if ($property) {
return $hashRef->{$property};
@ -210,8 +214,10 @@ sub makeUrlCompliant {
my ($self, $url, $language) = @_;
$language = $language || $self->{_language} || $self->session->user->profileField("language") || "English";
my $cmd = "WebGUI::i18n::".$language;
my $load = "use ".$cmd;
eval($load);
my $file = $cmd;
$file =~ s{::}{/}g;
$file .= '.pm';
eval { require $file };
$self->session->errorHandler->warn($cmd." failed to compile because ".$@) if ($@);
$cmd = $cmd."::makeUrlCompliant";
my $output = eval{&$cmd($url)};

View file

@ -19,9 +19,9 @@ use File::Spec;
my $session = WebGUI::Test->session;
my $numTests = 1; ##For conditional load check
my $numTests = 1; ##For conditional load check
my $langTests = 2; ##For language look-up tests
$numTests += 9 + $langTests;
$numTests += 10 + $langTests;
plan tests => $numTests;
@ -67,6 +67,8 @@ SKIP: {
'Language check: existing key returns native language key'
);
is($i18n->getLanguage('English', 'label'), 'English', 'getLanguage, specific property');
}
}