package Tree::Transform;
use strict;
use warnings;
use Sub::Exporter;
use Params::Validate ':all';
use Tree::Transform::Utils;
use Tree::Transform::Transformer;
our $VERSION='0.1';
Sub::Exporter::setup_exporter({
exports => [qw(tree_rule new_transformer)],
groups => {
default => [ 'tree_rule',
'new_transformer' => {-as => 'new'} ],
}
});
sub tree_rule {
my (%args)=validate(@_, {
match => { type => SCALAR, optional => 1 },
action => { type => CODEREF },
name => { type => SCALAR, optional => 1},
priority => { type => SCALAR, default => 1 },
});
my $store=Tree::Transform::Utils::_rules_store(scalar caller);
push @{$store->{by_match}},\%args;
if ($args{name}) {
push @{$store->{by_name}{$args{name}}},\%args;
}
return;
}
sub _transformer_class { 'Tree::Transform::Transformer' };
sub new_transformer {
my ($rules_package)=@_;
return _transformer_class->new(rules_package=>$rules_package);
}
1;
__END__