[Rt-commit] r18252 - in rt/3.999/branches/lorzy: etc lib/RT lib/RT/Model t/lorzy
clkao at bestpractical.com
clkao at bestpractical.com
Thu Feb 5 07:31:27 EST 2009
Author: clkao
Date: Thu Feb 5 07:31:27 2009
New Revision: 18252
Added:
rt/3.999/branches/lorzy/lib/RT/Lorzy/Package/
rt/3.999/branches/lorzy/lib/RT/Lorzy/Package/RT.pm
rt/3.999/branches/lorzy/t/lorzy/condition.t
Modified:
rt/3.999/branches/lorzy/etc/initialdata
rt/3.999/branches/lorzy/lib/RT/Lorzy.pm
rt/3.999/branches/lorzy/lib/RT/Model/Scrip.pm
rt/3.999/branches/lorzy/t/lorzy/basic.t
Log:
lorzy glue for RT.Condition.IsApplicable.
Modified: rt/3.999/branches/lorzy/etc/initialdata
==============================================================================
--- rt/3.999/branches/lorzy/etc/initialdata (original)
+++ rt/3.999/branches/lorzy/etc/initialdata Thu Feb 5 07:31:27 2009
@@ -107,7 +107,7 @@
@scrip_conditions = (
{ name => 'On Create', # loc
description => 'When a ticket is Created', # loc
- applicable_trans_types => 'Create',
+ applicable_trans_types => 'create',
exec_module => 'AnyTransaction', },
{ name => 'On Transaction', # loc
Modified: rt/3.999/branches/lorzy/lib/RT/Lorzy.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Lorzy.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Lorzy.pm Thu Feb 5 07:31:27 2009
@@ -35,12 +35,11 @@
sub on_condition {
my ($self, $ticket_obj, $transaction_obj) = @_;
- return RT::Lorzy->evaluate( $self->condition, ticket => $ticket_obj);
+ return RT::Lorzy->evaluate( $self->condition, ticket => $ticket_obj, transaction => $transaction_obj);
}
sub commit {
my ($self, $ticket_obj, $transaction_obj) = @_;
- warn "==> committing action $ticket_obj";
return RT::Lorzy->evaluate( $self->action, ticket => $ticket_obj);
}
Added: rt/3.999/branches/lorzy/lib/RT/Lorzy/Package/RT.pm
==============================================================================
--- (empty file)
+++ rt/3.999/branches/lorzy/lib/RT/Lorzy/Package/RT.pm Thu Feb 5 07:31:27 2009
@@ -0,0 +1,33 @@
+package RT::Lorzy::Package::RT;
+use strict;
+use base 'Lorzy::Package';
+
+__PACKAGE__->defun( 'Condition.Applicable',
+ signature => {
+ 'name' => Lorzy::FunctionArgument->new( name => 'name' ),
+ 'ticket' => Lorzy::FunctionArgument->new( name => 'ticket', type => 'RT::Model::Ticket' ),
+ 'transaction' => Lorzy::FunctionArgument->new( name => 'transaction', type => 'RT::Model::Transaction' ),
+ },
+ native => sub {
+ my $args = shift;
+ my $scrip_condition = RT::Model::ScripCondition->new;
+ $scrip_condition->load($args->{name}) or die "Can't load scrip condition: $args->{name}";
+ $scrip_condition->load_condition(
+ ticket_obj => $args->{'ticket'},
+ transaction_obj => $args->{'transaction'},
+ ) or die "Can't load condition: $args->{name}";
+
+
+ # XXX: this is so wrong, the applicable_trans_type check is
+ # done in scrip level rather than condition level. see
+ # RT::Model::Scrip.
+
+ my $txn_type = $args->{transaction}->type;
+ return 0
+ unless ( $scrip_condition->applicable_trans_types =~ /(?:^|,)(?:Any|\Q$txn_type\E)(?:,|$)/i );
+
+ return $scrip_condition->is_applicable();
+ },
+);
+
+1;
Modified: rt/3.999/branches/lorzy/lib/RT/Model/Scrip.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Model/Scrip.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Model/Scrip.pm Thu Feb 5 07:31:27 2009
@@ -367,7 +367,6 @@
# Load the scrip's Condition object
$condition->load_condition(
- scrip_obj => $self,
ticket_obj => $args{'ticket_obj'},
transaction_obj => $transaction_obj,
);
Modified: rt/3.999/branches/lorzy/t/lorzy/basic.t
==============================================================================
--- rt/3.999/branches/lorzy/t/lorzy/basic.t (original)
+++ rt/3.999/branches/lorzy/t/lorzy/basic.t Thu Feb 5 07:31:27 2009
@@ -1,4 +1,4 @@
-use Test::More tests => 28;
+use Test::More tests => 7;
use RT::Test;
use strict;
@@ -34,7 +34,8 @@
my $is_open = $builder->defun(
ops => $tree,
signature =>
- { ticket => Lorzy::FunctionArgument->new( name => 'ticket', type => 'RT::Model::Ticket' ) }
+ { ticket => Lorzy::FunctionArgument->new( name => 'ticket', type => 'RT::Model::Ticket' ),
+ transaction => Lorzy::FunctionArgument->new( name => 'transaction', type => 'RT::Model::Transaction' ) }
);
my $queue = RT::Model::Queue->new(current_user => RT->system_user);
@@ -46,25 +47,26 @@
my $ret;
lives_ok {
- $ret = $eval->apply_script( $is_open, { 'ticket' => $ticket } );
+ $ret = $eval->apply_script( $is_open, { 'ticket' => $ticket, transaction => $ticket->transactions->first } );
};
ok(!$ret);
$ticket->set_status('open');
lives_ok {
- $ret = $eval->apply_script( $is_open, { 'ticket' => $ticket } );
+ $ret = $eval->apply_script( $is_open, { 'ticket' => $ticket, transaction => $ticket->transactions->first } );
};
ok($ret);
use RT::Lorzy;
+my $action_is_run = 0;
+
RT::Lorzy::Dispatcher->add_rule(
RT::Lorzy::Rule->new( { condition => $is_open,
- action => sub { warn "rahh!"} } )
+ action => sub { $action_is_run++ } } )
);
-warn $ticket->comment(content => 'lorzy lorzy in the code');
-
-1;
+$ticket->comment(content => 'lorzy lorzy in the code');
+ok($action_is_run);
Added: rt/3.999/branches/lorzy/t/lorzy/condition.t
==============================================================================
--- (empty file)
+++ rt/3.999/branches/lorzy/t/lorzy/condition.t Thu Feb 5 07:31:27 2009
@@ -0,0 +1,62 @@
+use Test::More tests => 6;
+use RT::Test;
+
+use strict;
+use warnings;
+
+use RT::Model::Queue;
+use RT::Model::User;
+use RT::Model::Group;
+use RT::Model::Ticket;
+use RT::Model::ACE;
+use RT::CurrentUser;
+use Test::Exception;
+
+use_ok('Lorzy');
+
+my $eval = Lorzy::Evaluator->new();
+$eval->load_package($_) for qw(Str Native);
+$eval->load_package('RT', 'RT::Lorzy::Package::RT');
+
+my $tree = [ { name => 'IfThen',
+ args => { if_true => { name => 'True' },
+ if_false => { name => 'False' },
+ condition => { name => 'RT.Condition.Applicable',
+ args => {
+ name => "On Create",
+ ticket => { name => 'Symbol', args => { symbol => 'ticket' }},
+ transaction => { name => 'Symbol', args => { symbol => 'transaction' }},
+ }
+ }
+ } } ];
+
+my $builder = Lorzy::Builder->new();
+my $on_created = $builder->defun(
+ ops => $tree,
+ signature =>
+ { ticket => Lorzy::FunctionArgument->new( name => 'ticket', type => 'RT::Model::Ticket' ),
+ transaction => Lorzy::FunctionArgument->new( name => 'transaction', type => 'RT::Model::Transaction' ) }
+);
+
+my $queue = RT::Model::Queue->new(current_user => RT->system_user);
+my ($queue_id) = $queue->create( name => 'lorzy');
+ok( $queue_id, 'queue created' );
+
+my $ticket = RT::Model::Ticket->new(current_user => RT->system_user );
+my ($rv, $msg) = $ticket->create( subject => 'watcher tests', queue => $queue->name );
+
+my $txn = $ticket->transactions->first;
+
+my $ret;
+lives_ok {
+ $ret = $eval->apply_script( $on_created, { 'ticket' => $ticket, transaction => $txn } );
+};
+ok($ret);
+
+$ticket->set_status('open');
+
+lives_ok {
+ $ret = $eval->apply_script( $on_created, { 'ticket' => $ticket, transaction => $ticket->transactions->last } );
+};
+ok(!$ret);
+
More information about the Rt-commit
mailing list