current_view patch.
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index dd4607a..fc8f49e 100644 (file)
@@ -501,8 +501,11 @@ Gets a L<Catalyst::Model> instance by name.
 
     $c->model('Foo')->do_stuff;
 
-If the name is omitted, it will look for a config setting 'default_model',
-or check if there is only one view, and return it if that's the case.
+If the name is omitted, it will look for 
+ - a model object in $c->stash{current_model_instance}, then
+ - a model name in $c->stash->{current_model}, then
+ - a config setting 'default_model', or
+ - check if there is only one model, and return it if that's the case.
 
 =cut
 
@@ -511,8 +514,14 @@ sub model {
     return $c->_filter_component( $c->_comp_prefixes( $name, qw/Model M/ ),
         @args )
       if $name;
-    return $c->component( $c->config->{default_model} )
-      if $c->config->{default_model};
+    if (ref $c) {
+        return $c->stash->{current_model_instance} 
+          if $c->stash->{current_model_instance};
+        return $c->model( $c->stash->{current_model} )
+          if $c->stash->{current_model};
+        return $c->model( $c->config->{default_model} )
+          if $c->config->{default_model};
+    }
     return $c->_filter_component( $c->_comp_singular(qw/Model M/), @args );
 
 }
@@ -535,9 +544,11 @@ Gets a L<Catalyst::View> instance by name.
 
     $c->view('Foo')->do_stuff;
 
-If the name is omitted, it will look for a config setting
-'default_view', or check if there is only one view, and forward to it if
-that's the case.
+If the name is omitted, it will look for 
+ - a view object in $c->stash{current_view_instance}, then
+ - a view name in $c->stash->{current_view}, then
+ - a config setting 'default_view', or
+ - check if there is only one view, and return it if that's the case.
 
 =cut
 
@@ -546,8 +557,14 @@ sub view {
     return $c->_filter_component( $c->_comp_prefixes( $name, qw/View V/ ),
         @args )
       if $name;
-    return $c->component( $c->config->{default_view} )
-      if $c->config->{default_view};
+    if (ref $c) {
+        return $c->stash->{current_view_instance} 
+          if $c->stash->{current_view_instance};
+        return $c->view( $c->stash->{current_view} )
+          if $c->stash->{current_view};
+        return $c->view( $c->config->{default_view} )
+          if $c->config->{default_view};
+    }
     return $c->_filter_component( $c->_comp_singular(qw/View V/) );
 }