[jifty-devel] Re: [Jifty-commit] r3915 - in jifty/trunk:
lib/Jifty t
Andrew Sterling Hanenkamp
sterling at hanenkamp.com
Sun Aug 19 21:36:51 EDT 2007
I thought about rolling it into new_action directly (and it would be nicer
there in some respects since you get it for free in
Jifty::View::Declare::Helpers). I also thought about it as a method attached
to the model:
my $model = MyApp::Model::Employee->new;
$model->load(14);
my $action = $model->new_action('Create');
It was just something that I needed to patch CRUD to handle a wider range of
classes, but seemed like it was something that would have a wider
applicability. Whether it belongs with CRUD for now or just as an
enhancement of new_action(), I'm not sure I have a strong feeling either way
on it.
On 8/19/07, Jesse Vincent <jesse at bestpractical.com> wrote:
>
> 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
> >
>
>
> _______________________________________________
> jifty-devel mailing list
> jifty-devel at lists.jifty.org
> http://lists.jifty.org/cgi-bin/mailman/listinfo/jifty-devel
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.bestpractical.com/pipermail/jifty-devel/attachments/20070819/a5c5ce71/attachment-0001.htm
More information about the jifty-devel
mailing list