[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