From c8a1bb6a7c99d7a1512c3e53387c7ccbad4aa567 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 24 Dec 2007 06:38:36 +0000 Subject: [PATCH] Convert WebGUI::International to use blocky eval instead of stringy eval. Add 1 test for getLanguage to check for refactoring. --- lib/WebGUI/International.pm | 24 +++++++++++++++--------- t/International.t | 6 ++++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/lib/WebGUI/International.pm b/lib/WebGUI/International.pm index 58d46e56d..42a704cf7 100644 --- a/lib/WebGUI/International.pm +++ b/lib/WebGUI/International.pm @@ -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)}; diff --git a/t/International.t b/t/International.t index a8a82978b..cb528afd7 100644 --- a/t/International.t +++ b/t/International.t @@ -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'); + } }