[Catalyst-commits] r8769 - in trunk/Catalyst-View-XSLT:
lib/Catalyst/View lib/Catalyst/View/XSLT/XML t t/lib
t/lib/TestApp/root
janus at dev.catalyst.perl.org
janus at dev.catalyst.perl.org
Sat Dec 6 20:59:06 GMT 2008
Author: janus
Date: 2008-12-06 20:59:06 +0000 (Sat, 06 Dec 2008)
New Revision: 8769
Added:
trunk/Catalyst-View-XSLT/t/10_template_fh.t
trunk/Catalyst-View-XSLT/t/11_xml_fh.t
trunk/Catalyst-View-XSLT/t/12_xml_io_handle.t
trunk/Catalyst-View-XSLT/t/13_xml_libxml_document.t
trunk/Catalyst-View-XSLT/t/14_xml_path_class.t
trunk/Catalyst-View-XSLT/t/15_template_import.t
trunk/Catalyst-View-XSLT/t/lib/TestApp/root/testImport.xsl
Modified:
trunk/Catalyst-View-XSLT/lib/Catalyst/View/XSLT.pm
trunk/Catalyst-View-XSLT/lib/Catalyst/View/XSLT/XML/LibXSLT.pm
trunk/Catalyst-View-XSLT/t/lib/TestApp.pm
Log:
add support for filehandles and objects, set document base uri and add a bunch of tests
Modified: trunk/Catalyst-View-XSLT/lib/Catalyst/View/XSLT/XML/LibXSLT.pm
===================================================================
--- trunk/Catalyst-View-XSLT/lib/Catalyst/View/XSLT/XML/LibXSLT.pm 2008-12-06 16:35:22 UTC (rev 8768)
+++ trunk/Catalyst-View-XSLT/lib/Catalyst/View/XSLT/XML/LibXSLT.pm 2008-12-06 20:59:06 UTC (rev 8769)
@@ -70,7 +70,7 @@
=cut
sub process {
- my ($self, $template, $args) = @_;
+ my ($self, $template, $args, $base) = @_;
my ($result, $error) = ('', undef);
@@ -82,14 +82,22 @@
my $xml = delete $args->{xml};
- if ($xml =~ /\</) {
+ if ($xml =~ m/\</) {
$xmlDocument = $xmlParser->parse_string($xml);
+ } elsif (ref($xml) && $xml->isa('GLOB')) {
+ $xmlDocument = $xmlParser->parse_fh($xml);
+ } elsif (ref($xml) && $xml->isa('XML::LibXML::Document')) {
+ $xmlDocument = $xml;
} else {
$xmlDocument = $xmlParser->parse_file($xml);
}
if ($template =~ m/\</) {
- $xsltStylesheet = $xmlParser->parse_string($template);
+ $xsltStylesheet = $xmlParser->parse_string($template, $base);
+ } elsif (ref($template) && $template->isa('GLOB')) {
+ $xsltStylesheet = $xmlParser->parse_fh($template, $base);
+ } elsif (ref($template) && $template->isa('XML::LibXML::Document')) {
+ $xsltStylesheet = $template;
} else {
$xsltStylesheet = $xmlParser->parse_file($template);
}
Modified: trunk/Catalyst-View-XSLT/lib/Catalyst/View/XSLT.pm
===================================================================
--- trunk/Catalyst-View-XSLT/lib/Catalyst/View/XSLT.pm 2008-12-06 16:35:22 UTC (rev 8768)
+++ trunk/Catalyst-View-XSLT/lib/Catalyst/View/XSLT.pm 2008-12-06 20:59:06 UTC (rev 8769)
@@ -220,18 +220,26 @@
sub render {
my ( $self, $c, $template, $args ) = @_;
+ my $basePath;
- unless ( $template =~ m/\</ || -e $template ) {
- my ($tmplFullPath, $error) = $self->_searchInIncPath($c, $template);
+ unless ( $template =~ m/\</ || $template->isa('GLOB') || -e $template ||
+ ( ref($template) && !$template->isa('Path::Class::File') ) ) {
+ my $error;
+ ($basePath, $error) = $self->_searchInIncPath($c, $template);
+
if (defined $error) {
$c->error("Template [$template] does not exists in include path");
return 0;
} else {
- $template = $tmplFullPath;
+ $template = File::Spec->catfile($basePath, $template);
}
}
+ unless ($basePath) {
+ $basePath = $c->config->{root};
+ }
+
my $vars = {
(ref $args eq 'HASH' ? %$args : %{ $c->stash() }),
};
@@ -245,14 +253,15 @@
# if xml is not string (therefore is a file (what about file descriptors ?!))
# and is not existsting in the file system
- if ($xml !~ m/\</ && ! -e $xml) {
- my ($xmlFullPath, $error) = $self->_searchInIncPath($c, $xml);
+ unless ( $xml =~ m/\</ || $xml->isa('GLOB') || -e $xml ||
+ ( ref($xml) && !$xml->isa('Path::Class::File') ) ) {
+ my ($incPath, $error) = $self->_searchInIncPath($c, $xml);
if (defined $error) {
- $c->error("Template [$template] does not exists in include path");
+ $c->error("XML file [$xml] does not exists in include path");
return undef;
} else {
- $vars->{xml} = $xmlFullPath;
+ $vars->{xml} = File::Spec->catfile($incPath, $xml);
}
}
@@ -287,7 +296,7 @@
}
$c->log->debug("Processing...") if $c->debug;
- my ($output, $error) = $processor->process($template, $vars);
+ my ($output, $error) = $processor->process($template, $vars, $basePath);
if ($error) {
chomp $error;
@@ -355,24 +364,27 @@
my $arefIncludePath = $self->{CONFIG}->{'INCLUDE_PATH'};
- unshift( @{ $arefIncludePath }, @{ $c->stash->{additional_template_paths} } )
- if (ref $c->stash->{additional_template_paths} eq 'ARRAY');
+ if (ref $c->stash->{additional_template_paths} eq 'ARRAY') {
+ unshift( @{ $arefIncludePath },
+ @{ $c->stash->{additional_template_paths} } );
+ }
foreach my $incEntry ( @{ $arefIncludePath} ) {
$c->log->debug( "Going to search for file [$filename] in [$incEntry]" ) if $c->debug;
my $tmpTemplateName = '';
+ my $incPath = '';
if (ref $incEntry eq 'Path::Class::File') {
- $tmpTemplateName = File::Spec->catfile($incEntry->absolute, $filename);
+ $incPath = $incEntry->absolute();
} else {
- $tmpTemplateName = File::Spec->catfile($incEntry, $filename);
+ $incPath = $incEntry;
}
- if (-e $tmpTemplateName) {
+ if (-e File::Spec->catfile($incPath, $filename)) {
$c->log->debug( "File [$filename] found in [$incEntry]") if $c->debug;
- return ($tmpTemplateName, undef);
+ return ($incPath, undef);
}
}
Added: trunk/Catalyst-View-XSLT/t/10_template_fh.t
===================================================================
--- trunk/Catalyst-View-XSLT/t/10_template_fh.t (rev 0)
+++ trunk/Catalyst-View-XSLT/t/10_template_fh.t 2008-12-06 20:59:06 UTC (rev 8769)
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+use Test::More tests => 5;
+
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+use lib "$FindBin::Bin/lib";
+
+use_ok('Catalyst::Test', 'TestApp');
+
+my $view = 'XML::LibXSLT';
+
+my $response;
+ok(($response = request("/test_template_fh?view=$view"))->is_success, 'request ok');
+is($response->content, TestApp->config->{default_message}, 'message ok');
+
+my $message = scalar localtime;
+my $xml = "<dummy-root>$message</dummy-root>";
+ok(($response = request("/test_template_fh?view=$view&message=$message"))->is_success, 'request with message ok');
+is($response->content, $message, 'message ok');
+
Added: trunk/Catalyst-View-XSLT/t/11_xml_fh.t
===================================================================
--- trunk/Catalyst-View-XSLT/t/11_xml_fh.t (rev 0)
+++ trunk/Catalyst-View-XSLT/t/11_xml_fh.t 2008-12-06 20:59:06 UTC (rev 8769)
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+use Test::More tests => 5;
+
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+use lib "$FindBin::Bin/lib";
+
+use_ok('Catalyst::Test', 'TestApp');
+
+my $view = 'XML::LibXSLT';
+
+my $response;
+ok(($response = request("/test_xml_fh?view=$view"))->is_success, 'request ok');
+is($response->content, TestApp->config->{default_message}, 'message ok');
+
+my $message = scalar localtime;
+my $xml = "<dummy-root>$message</dummy-root>";
+ok(($response = request("/test_xml_fh?view=$view&message=$message"))->is_success, 'request with message ok');
+is($response->content, $message, 'message ok');
+
Added: trunk/Catalyst-View-XSLT/t/12_xml_io_handle.t
===================================================================
--- trunk/Catalyst-View-XSLT/t/12_xml_io_handle.t (rev 0)
+++ trunk/Catalyst-View-XSLT/t/12_xml_io_handle.t 2008-12-06 20:59:06 UTC (rev 8769)
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+use Test::More tests => 5;
+
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+use lib "$FindBin::Bin/lib";
+
+use_ok('Catalyst::Test', 'TestApp');
+
+my $view = 'XML::LibXSLT';
+
+my $response;
+ok(($response = request("/test_xml_io_handle?view=$view"))->is_success, 'request ok');
+is($response->content, TestApp->config->{default_message}, 'message ok');
+
+my $message = scalar localtime;
+my $xml = "<dummy-root>$message</dummy-root>";
+ok(($response = request("/test_xml_io_handle?view=$view&message=$message"))->is_success, 'request with message ok');
+is($response->content, $message, 'message ok');
+
Added: trunk/Catalyst-View-XSLT/t/13_xml_libxml_document.t
===================================================================
--- trunk/Catalyst-View-XSLT/t/13_xml_libxml_document.t (rev 0)
+++ trunk/Catalyst-View-XSLT/t/13_xml_libxml_document.t 2008-12-06 20:59:06 UTC (rev 8769)
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+use Test::More tests => 5;
+
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+use lib "$FindBin::Bin/lib";
+
+use_ok('Catalyst::Test', 'TestApp');
+
+my $view = 'XML::LibXSLT';
+
+my $response;
+ok(($response = request("/test_xml_libxml_document?view=$view"))->is_success, 'request ok');
+is($response->content, TestApp->config->{default_message}, 'message ok');
+
+my $message = scalar localtime;
+ok(($response = request("/test_xml_libxml_document?view=$view&message=$message"))->is_success, 'request with message ok');
+is($response->content, $message, 'message ok');
+
+
Added: trunk/Catalyst-View-XSLT/t/14_xml_path_class.t
===================================================================
--- trunk/Catalyst-View-XSLT/t/14_xml_path_class.t (rev 0)
+++ trunk/Catalyst-View-XSLT/t/14_xml_path_class.t 2008-12-06 20:59:06 UTC (rev 8769)
@@ -0,0 +1,20 @@
+use strict;
+use warnings;
+use Test::More tests => 5;
+
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+use lib "$FindBin::Bin/lib";
+
+use_ok('Catalyst::Test', 'TestApp');
+
+my $view = 'XML::LibXSLT';
+
+my $response;
+ok(($response = request("/test_xml_path_class?view=$view"))->is_success, 'request ok');
+is($response->content, TestApp->config->{default_message}, 'message ok');
+
+my $message = scalar localtime;
+ok(($response = request("/test_xml_path_class?view=$view&message=$message"))->is_success, 'request with message ok');
+is($response->content, $message, 'message ok');
+
Added: trunk/Catalyst-View-XSLT/t/15_template_import.t
===================================================================
--- trunk/Catalyst-View-XSLT/t/15_template_import.t (rev 0)
+++ trunk/Catalyst-View-XSLT/t/15_template_import.t 2008-12-06 20:59:06 UTC (rev 8769)
@@ -0,0 +1,20 @@
+use strict;
+use warnings;
+use Test::More tests => 5;
+
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+use lib "$FindBin::Bin/lib";
+
+use_ok('Catalyst::Test', 'TestApp');
+
+my $view = 'XML::LibXSLT';
+
+my $response;
+ok(($response = request("/test_template_import?view=$view"))->is_success, 'request ok');
+is($response->content, TestApp->config->{default_message}, 'message ok');
+
+my $message = scalar localtime;
+ok(($response = request("/test_template_import?view=$view&message=$message"))->is_success, 'request with message ok');
+is($response->content, $message, 'message ok');
+
Added: trunk/Catalyst-View-XSLT/t/lib/TestApp/root/testImport.xsl
===================================================================
--- trunk/Catalyst-View-XSLT/t/lib/TestApp/root/testImport.xsl (rev 0)
+++ trunk/Catalyst-View-XSLT/t/lib/TestApp/root/testImport.xsl 2008-12-06 20:59:06 UTC (rev 8769)
@@ -0,0 +1,10 @@
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+ <!-- import something to check relative paths -->
+ <xsl:import href="additional/testIncludePath.xsl"/>
+ <!-- override it with what we actually want -->
+ <xsl:import href="testRender.xsl"/>
+
+</xsl:stylesheet>
Modified: trunk/Catalyst-View-XSLT/t/lib/TestApp.pm
===================================================================
--- trunk/Catalyst-View-XSLT/t/lib/TestApp.pm 2008-12-06 16:35:22 UTC (rev 8768)
+++ trunk/Catalyst-View-XSLT/t/lib/TestApp.pm 2008-12-06 20:59:06 UTC (rev 8769)
@@ -5,6 +5,7 @@
use Catalyst; # qw/-Debug/;
use Path::Class;
+use IO::Handle;
our $VERSION = '0.04';
@@ -85,25 +86,112 @@
my ($self, $c) = @_;
my $message = $c->request->param('message') || $c->config->{default_message};
+ my $template = $c->request->param('template') || 'testRender.xsl';
$c->stash->{xml} = "<dummy-root>$message</dummy-root>";
- $c->stash->{template} = <<'EOXSL';
-<?xml version="1.0"?>
-<xsl:stylesheet
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- version="1.0">
+ open(my $fh, '<', $c->config->{root} . '/' . $template) or $c->error("$!: $template");
+ {
+ local($/) = undef;
- <xsl:output method="text" />
+ $c->stash->{template} = <$fh>;
+ }
+ close($fh);
+}
- <xsl:template match="/">
- <xsl:value-of select="dummy-root" />
- </xsl:template>
+sub test_template_fh : Local {
+ my ($self, $c) = @_;
-</xsl:stylesheet>
-EOXSL
+ my $message = $c->request->param('message') || $c->config->{default_message};
+ my $template = $c->request->param('template') || 'testRender.xsl';
+
+ $c->stash->{xml} = "<dummy-root>$message</dummy-root>";
+
+ open(my $fh, '<', $c->config->{root} . '/' . $template) or $c->error("$!: $template");
+ $c->stash->{template} = $fh;
}
+sub test_xml_fh : Local {
+ my ($self, $c) = @_;
+
+ my $message = $c->request->param('message') || $c->config->{default_message};
+ my $template = $c->request->param('template') || 'testRender.xsl';
+ my $xmlfile = 'test.xml';
+ my $fh;
+
+ my $xml = "<dummy-root>$message</dummy-root>";
+
+ open($fh, '+>', $c->config->{root} . '/' . $xmlfile) or $c->error("$!: $xmlfile");
+ print $fh $xml;
+ seek($fh, 0, 0);
+
+ $c->stash->{xml} = $fh;
+ $c->stash->{template} = $template;
+}
+
+sub test_xml_io_handle : Local {
+ my ($self, $c) = @_;
+
+ my $message = $c->request->param('message') || $c->config->{default_message};
+ my $template = $c->request->param('template') || 'testRender.xsl';
+ my $xmlfile = 'test.xml';
+
+ my $xml = "<dummy-root>$message</dummy-root>";
+
+ my $fh = IO::File->new($c->config->{root}.'/'.$xmlfile, '+>') or $c->error("$!: $xmlfile");
+ print $fh $xml;
+ seek($fh, 0, 0);
+
+ $c->stash->{xml} = $fh;
+ $c->stash->{template} = $template;
+}
+
+sub test_xml_libxml_document : Local {
+ my ($self, $c) = @_;
+
+ my $message = $c->request->param('message') || $c->config->{default_message};
+ my $template = $c->request->param('template') || 'testRender.xsl';
+
+ require XML::LibXML;
+
+ my $doc = XML::LibXML::Document->new();
+ my $root = $doc->createElement('dummy-root');
+ $doc->setDocumentElement($root);
+ $root->appendText($message);
+
+ $c->stash->{xml} = $doc;
+ $c->stash->{template} = $template;
+}
+
+sub test_xml_path_class : Local {
+ my ($self, $c) = @_;
+
+ my $message = $c->request->param('message') || $c->config->{default_message};
+ my $template = $c->request->param('template') || 'testRender.xsl';
+ my $xmlfile = 'test.xml';
+ my $fh;
+
+ my $xml = "<dummy-root>$message</dummy-root>";
+
+ open($fh, '>', $c->config->{root} . '/' . $xmlfile) or $c->error("$!: $xmlfile");
+ print $fh $xml;
+ close($fh);
+
+ $c->stash->{xml} = file($xmlfile);
+ $c->stash->{template} = $template;
+}
+
+sub test_template_import : Local {
+ my ($self, $c) = @_;
+
+ my $message = $c->request->param('message') || $c->config->{default_message};
+ my $template = $c->request->param('template') || 'testImport.xsl';
+
+ $c->stash->{xml} = "<dummy-root>$message</dummy-root>";
+ $c->stash->{template} = $template;
+}
+
+
sub end : Private {
my ($self, $c) = @_;
More information about the Catalyst-commits
mailing list