[jifty-devel] Re: [Jifty-commit] r3915 - in jifty/trunk: lib/Jifty t

Jesse Vincent jesse at bestpractical.com
Sun Aug 19 19:02:43 EDT 2007


This feels like a weird thing. it's just not much syntactic sugar for  
what it gives you. I wonder if it belongs in the CRUD stuff or if we  
should be improving new_action...

On Aug 19, 2007, at 6:39 AM, jifty-commit at lists.jifty.org wrote:

> Author: sterling
> Date: Sun Aug 19 09:39:34 2007
> New Revision: 3915
>
> Modified:
>    jifty/trunk/   (props changed)
>    jifty/trunk/lib/Jifty/Web.pm
>    jifty/trunk/t/01-test-web.t
>
> Log:
>  r8812 at riddle:  andrew | 2007-08-19 08:38:43 -0500
>  Added a new helper, new_record_action(), that wraps new_action()  
> with additional help creating Create, Update, Delete, and Search  
> actions for models.
>
>
> Modified: jifty/trunk/lib/Jifty/Web.pm
> ====================================================================== 
> ========
> --- jifty/trunk/lib/Jifty/Web.pm	(original)
> +++ jifty/trunk/lib/Jifty/Web.pm	Sun Aug 19 09:39:34 2007
> @@ -9,13 +9,11 @@
>
>  =cut
>
> -
> -
> -
>  use CGI::Cookie;
>  use XML::Writer;
>  use CSS::Squish;
>  use Digest::MD5 qw(md5_hex);
> +use Scalar::Util qw(blessed);
>  use Carp qw(carp);
>  use base qw/Class::Accessor::Fast Class::Data::Inheritable  
> Jifty::Object/;
>
> @@ -566,6 +564,50 @@
>      );
>  }
>
> +=head3 new_record_action model => MODELCLASS, record_action =>  
> RECORD_ACTION, PARAMHASH
> +
> +This takes all the same arguments as L</new_action>, except that  
> you specify the C<model> and C<record_action> rather than the  
> C<class>. This helps you create a record action.
> +
> +You must give the C<model> argument, which may either be an  
> instance of the model or the class name.
> +
> +The C<record_action> is optional and defaults to 'Update' if not  
> given. It can be set to 'Create', 'Update', 'Delete', or 'Search'.
> +
> +For example:
> +
> +  my $record = MyApp::Model::Employee->new;
> +  $record->load(14);
> +
> +  my $action = Jifty->web->new_record_action(
> +      model         => $record,
> +      record_action => 'Delete',
> +      record        => $record,
> +  );
> +
> +  # $action is now an instance of MyApp::Model::DeleteEmployee
> +
> +=cut
> +
> +sub new_record_action {
> +    my $self = shift;
> +    my %args = (
> +        model         => undef,
> +        record_action => 'Update',
> +        @_
> +    );
> +
> +    # Get the name of the model class and action
> +    my $model         = delete $args{model};
> +    my $action_class  = blessed $model || $model;
> +    my $record_action = delete $args{record_action};
> +
> +    # Convert it to the action
> +    $action_class =~ s/::Model::/::Action::$record_action/;
> +
> +    # Add it to the arguments and call new_action()
> +    $args{class} = $action_class;
> +    return $self->new_action( %args );
> +}
> +
>  =head3 failed_actions
>
>  Returns an array of L<Jifty::Action> objects, one for each
>
> Modified: jifty/trunk/t/01-test-web.t
> ====================================================================== 
> ========
> --- jifty/trunk/t/01-test-web.t	(original)
> +++ jifty/trunk/t/01-test-web.t	Sun Aug 19 09:39:34 2007
> @@ -1,6 +1,6 @@
>  #!/usr/bin/perl -w
>
> -use Jifty::Test tests => 5;
> +use Jifty::Test tests => 9;
>
>  my $web = Jifty::Test->web;
>  isa_ok( $web->request,  "Jifty::Request"  );
> @@ -36,3 +36,39 @@
>  $web = Jifty::Test->web;
>  isa_ok( $web->request,  "Jifty::Request::Subclass"  );
>  isa_ok( $web->response, "Jifty::Response::Subclass" );
> +
> +# Testing new_record_action()
> +{
> +    no warnings 'redefine';
> +
> +    # Create a mock new_action()
> +    $orig_new_action = \&Jifty::Web::new_action;
> +    *Jifty::Web::new_action = sub {
> +        is($args{class}, $args{expected});
> +    };
> +
> +    Jifty->web->new_record_action(
> +        model         => 'Jifty::Model::ModelClass',
> +        expected      => 'Jifty::Action::UpdateModelClass',
> +    );
> +
> +    Jifty->web->new_record_action(
> +        model         => 'Jifty::Model::ModelClass',
> +        record_action => 'Delete',
> +        expected      => 'Jifty::Action::DeleteModelClass',
> +    );
> +
> +    Jifty->web->new_record_action(
> +        model         => 'TestApp::Model::Employee',
> +        expected      => 'TestApp::Action::UpdateEmployee',
> +    );
> +
> +    Jifty->web->new_record_action(
> +        model         => 'TestApp::Model::Employee',
> +        record_action => 'Search',
> +        expected      => 'TestApp::Action::SearchEmployee',
> +    );
> +
> +    # Restore the original
> +    *Jifty::Web::new_action = $orig_new_action;
> +}
> _______________________________________________
> Jifty-commit mailing list
> Jifty-commit at lists.jifty.org
> http://lists.jifty.org/cgi-bin/mailman/listinfo/jifty-commit
>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: This is a digitally signed message part
Url : http://lists.bestpractical.com/pipermail/jifty-devel/attachments/20070819/2a74ca8e/PGP.pgp


More information about the jifty-devel mailing list