[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