summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2009-04-18 15:26:50 +0200
committerdakkar <dakkar@thenautilus.net>2009-04-18 15:26:50 +0200
commit43217e6ce9a7cae817d391e9bb10a3410c88e6e2 (patch)
tree1b5c17afb8992385cfb973c9802a65bf10fc1a83
parentdocumentation, and a few author-tests (diff)
downloadTree-Transform-XSLTish-43217e6ce9a7cae817d391e9bb10a3410c88e6e2.tar.gz
Tree-Transform-XSLTish-43217e6ce9a7cae817d391e9bb10a3410c88e6e2.tar.bz2
Tree-Transform-XSLTish-43217e6ce9a7cae817d391e9bb10a3410c88e6e2.zip
factories are inherited now, added test
-rw-r--r--lib/Tree/Transform/XSLTish.pm12
-rw-r--r--lib/Tree/Transform/XSLTish/Transformer.pm6
-rw-r--r--lib/Tree/Transform/XSLTish/Utils.pm13
-rw-r--r--t/02-inherit.t11
4 files changed, 26 insertions, 16 deletions
diff --git a/lib/Tree/Transform/XSLTish.pm b/lib/Tree/Transform/XSLTish.pm
index 2176aea..7053428 100644
--- a/lib/Tree/Transform/XSLTish.pm
+++ b/lib/Tree/Transform/XSLTish.pm
@@ -62,8 +62,10 @@ sub tree_rule {
sub engine_class {
my ($classname)=@_;
- my $factory=Tree::Transform::XSLTish::Utils::_engine_factory(scalar caller);
- $$factory=sub{$classname->new()};
+ Tree::Transform::XSLTish::Utils::_set_engine_factory(
+ scalar caller,
+ sub{$classname->new()},
+ );
return;
}
@@ -71,8 +73,10 @@ sub engine_class {
sub engine_factory(&) {
my ($new_factory)=@_;
- my $factory=Tree::Transform::XSLTish::Utils::_engine_factory(scalar caller);
- $$factory=$new_factory;
+ Tree::Transform::XSLTish::Utils::_set_engine_factory(
+ scalar caller,
+ $new_factory,
+ );
return;
}
diff --git a/lib/Tree/Transform/XSLTish/Transformer.pm b/lib/Tree/Transform/XSLTish/Transformer.pm
index c4ff53f..dae5821 100644
--- a/lib/Tree/Transform/XSLTish/Transformer.pm
+++ b/lib/Tree/Transform/XSLTish/Transformer.pm
@@ -44,9 +44,9 @@ sub _build_engine {
my ($self)=@_;
if ($self->rules_package) {
- my $factory=Tree::Transform::XSLTish::Utils::_engine_factory($self->rules_package);
- if ($$factory) {
- return $$factory->();
+ my $factory=$self->rules_package->can($Tree::Transform::XSLTish::Utils::ENGINE_FACTORY_NAME);
+ if ($factory) {
+ return $factory->();
}
}
return Tree::XPathEngine->new();
diff --git a/lib/Tree/Transform/XSLTish/Utils.pm b/lib/Tree/Transform/XSLTish/Utils.pm
index bfb438c..770426f 100644
--- a/lib/Tree/Transform/XSLTish/Utils.pm
+++ b/lib/Tree/Transform/XSLTish/Utils.pm
@@ -14,15 +14,14 @@ sub _rules_store {
return $pack->get_package_symbol($RULES_NAME);
}
-my $ENGINE_FACTORY_NAME='$_tree_transform_engine_factory';
+our $ENGINE_FACTORY_NAME='_tree_transform_engine_factory';
+my $ENGINE_FACTORY_NAME_WITH_SIGIL='&'.$ENGINE_FACTORY_NAME;
-sub _engine_factory {
- my $pack=Class::MOP::Class->initialize($_[0]);
+sub _set_engine_factory {
+ my ($pack_name,$factory)=@_;
+ my $pack=Class::MOP::Class->initialize($pack_name);
- if (! $pack->has_package_symbol($ENGINE_FACTORY_NAME) ) {
- $pack->add_package_symbol($ENGINE_FACTORY_NAME,undef);
- }
- return $pack->get_package_symbol($ENGINE_FACTORY_NAME);
+ $pack->add_package_symbol($ENGINE_FACTORY_NAME_WITH_SIGIL,$factory);
}
diff --git a/t/02-inherit.t b/t/02-inherit.t
index fb8e238..f11d116 100644
--- a/t/02-inherit.t
+++ b/t/02-inherit.t
@@ -1,8 +1,15 @@
#!perl
package TransformA;{
- use Tree::Transform::XSLTish;
+ use Tree::Transform::XSLTish ':engine';
use strict;
use warnings;
+ use Tree::XPathEngine;
+ use Test::Most;
+
+ engine_factory {
+ ok 1,'custom factory called';
+ Tree::XPathEngine->new();
+ };
default_rules;
@@ -29,7 +36,7 @@ package TransformB;{
}
package main;
-use Test::Most qw(no_plan die);
+use Test::Most tests=>2,'die';
use strict;
use warnings;
use Tree::DAG_Node::XPath;