[Jifty-commit] r6712 - in jifty/trunk/lib/Jifty: .
Jifty commits
jifty-commit at lists.jifty.org
Mon Mar 30 17:37:34 EDT 2009
Author: alexmv
Date: Mon Mar 30 17:37:33 2009
New Revision: 6712
Modified:
jifty/trunk/lib/Jifty/ClassLoader.pm
jifty/trunk/lib/Jifty/Script/Action.pm
Log:
AppClass::Action is now a mixin, and does not inherit from Jifty::Action
This removes a diamond inheritance pattern from autogenerated jifty
actions, and those made by `./bin/jifty action`. This is additionally
needed in order to allow `jifty action`-generated UpdateWidget actions
to inherit from a consistent and correct set of parents.
*** NOTE: This _will_ break existing actions which only inherit from
YourApp::Action and not Jifty::Action as well.
Modified: jifty/trunk/lib/Jifty/ClassLoader.pm
==============================================================================
--- jifty/trunk/lib/Jifty/ClassLoader.pm (original)
+++ jifty/trunk/lib/Jifty/ClassLoader.pm Mon Mar 30 17:37:33 2009
@@ -70,7 +70,8 @@
=item I<Application>::Action
-An empty class that descends from L<Jifty::Action>.
+An empty mixin class for all actions in your application. Should
+B<not> inherit from L<Jifty::Action>.
=item I<Application>::Action::I<[Verb]>I<[Something]>
@@ -177,14 +178,22 @@
# Handle most of the standard App::Class ISA Jifty::Class
elsif ( $module =~ /^(?:$base)::(Record|Collection|Notification|
Dispatcher|Bootstrap|Upgrade|CurrentUser|
- Handle|Event|Event::Model|Action|
+ Handle|Event|Event::Model|
Action::Record::\w+)$/x ) {
$AUTOGENERATED{$module} = 1;
return $self->return_class(
"package $module;\n"
. "use base qw/Jifty::$1/; \n"
);
- }
+ }
+
+ # Autogenerate empty Action mixin
+ elsif ( $module =~ /^(?:$base)::Action$/) {
+ $AUTOGENERATED{$module} = 1;
+ return $self->return_class(
+ "package $module;\n"
+ );
+ }
# Autogenerate an empty View if none is defined
elsif ( $module =~ /^(?:$base)::View$/ ) {
Modified: jifty/trunk/lib/Jifty/Script/Action.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Script/Action.pm (original)
+++ jifty/trunk/lib/Jifty/Script/Action.pm Mon Mar 30 17:37:33 2009
@@ -78,7 +78,16 @@
Jifty->new( no_handle => 1 );
my $root = Jifty::Util->app_root;
my $appclass = Jifty->config->framework("ApplicationClass");
- my $appclass_path = File::Spec->catfile(split(/::/,Jifty->config->framework("ApplicationClass")));
+ my $appclass_path = File::Spec->catfile(split(/::/,$appclass));
+
+ # Detect if they're creating an App::Action::UpdateWidget, for example
+ my $subclass = "Jifty::Action";
+ if ($action =~ /^(Create|Search|Execute|Update|Delete)(.+)$/) {
+ my($type, $model) = ($1, $2);
+ $model = Jifty->app_class( Model => $model );
+ $subclass = Jifty->app_class( Action => Record => $type )
+ if grep {$_ eq $model} Jifty->class_loader->models;
+ }
my $actionFile = <<"EOT";
use strict;
@@ -91,7 +100,7 @@
=cut
package @{[$appclass]}::Action::@{[$action]};
-use base qw/@{[$appclass]}::Action Jifty::Action/;
+use base qw/@{[$appclass]}::Action @{[$subclass]}/;
use Jifty::Param::Schema;
use Jifty::Action schema {
More information about the Jifty-commit
mailing list