[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