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

View file

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