From 194dab8e96f632c457e49cce60611c30af68ef5b Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 17 Mar 2010 15:41:58 +0000 Subject: [PATCH] Refactor: Change the different find_object filters to share a common method. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3597 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/application_controller.rb | 14 ++++++++++++++ app/controllers/documents_controller.rb | 9 ++------- app/controllers/issue_categories_controller.rb | 12 +++++++----- app/controllers/members_controller.rb | 9 ++------- app/controllers/news_controller.rb | 9 ++------- app/controllers/versions_controller.rb | 9 ++------- 6 files changed, 29 insertions(+), 33 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index da90e7564..f788c179d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -176,6 +176,20 @@ class ApplicationController < ActionController::Base render_404 end + def find_model_object + model = self.class.read_inheritable_attribute('model_object') + if model + @object = model.find(params[:id]) + self.instance_variable_set('@' + controller_name.singularize, @object) if @object + end + rescue ActiveRecord::RecordNotFound + render_404 + end + + def self.model_object(model) + write_inheritable_attribute('model_object', model) + end + # make sure that the user is a member of the project (or admin) if project is private # used as a before_filter for actions that do not require any particular permission on the project def check_project_privacy diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb index 6f2432386..118a7d99e 100644 --- a/app/controllers/documents_controller.rb +++ b/app/controllers/documents_controller.rb @@ -17,8 +17,9 @@ class DocumentsController < ApplicationController default_search_scope :documents + model_object Document before_filter :find_project, :only => [:index, :new] - before_filter :find_document, :except => [:index, :new] + before_filter :find_model_object, :except => [:index, :new] before_filter :find_project_from_association, :except => [:index, :new] before_filter :authorize @@ -82,10 +83,4 @@ private rescue ActiveRecord::RecordNotFound render_404 end - - def find_document - @document = @object = Document.find(params[:id]) - rescue ActiveRecord::RecordNotFound - render_404 - end end diff --git a/app/controllers/issue_categories_controller.rb b/app/controllers/issue_categories_controller.rb index 2904c2399..a43a767bb 100644 --- a/app/controllers/issue_categories_controller.rb +++ b/app/controllers/issue_categories_controller.rb @@ -17,7 +17,8 @@ class IssueCategoriesController < ApplicationController menu_item :settings - before_filter :find_category, :except => :new + model_object IssueCategory + before_filter :find_model_object, :except => :new before_filter :find_project_from_association, :except => :new before_filter :find_project, :only => :new before_filter :authorize @@ -73,10 +74,11 @@ class IssueCategoriesController < ApplicationController end private - def find_category - @category = @object = IssueCategory.find(params[:id]) - rescue ActiveRecord::RecordNotFound - render_404 + # Wrap ApplicationController's find_model_object method to set + # @category instead of just @issue_category + def find_model_object + super + @category = @object end def find_project diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 14c65d747..6de7f82d0 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -16,7 +16,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class MembersController < ApplicationController - before_filter :find_member, :except => [:new, :autocomplete_for_member] + model_object Member + before_filter :find_model_object, :except => [:new, :autocomplete_for_member] before_filter :find_project_from_association, :except => [:new, :autocomplete_for_member] before_filter :find_project, :only => [:new, :autocomplete_for_member] before_filter :authorize @@ -74,10 +75,4 @@ class MembersController < ApplicationController render :layout => false end -private - def find_member - @member = @object = Member.find(params[:id]) - rescue ActiveRecord::RecordNotFound - render_404 - end end diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb index 5ce216fb7..4d44158a4 100644 --- a/app/controllers/news_controller.rb +++ b/app/controllers/news_controller.rb @@ -17,7 +17,8 @@ class NewsController < ApplicationController default_search_scope :news - before_filter :find_news, :except => [:new, :index, :preview] + model_object News + before_filter :find_model_object, :except => [:new, :index, :preview] before_filter :find_project_from_association, :except => [:new, :index, :preview] before_filter :find_project, :only => [:new, :preview] before_filter :authorize, :except => [:index, :preview] @@ -89,12 +90,6 @@ class NewsController < ApplicationController end private - def find_news - @news = @object = News.find(params[:id]) - rescue ActiveRecord::RecordNotFound - render_404 - end - def find_project @project = Project.find(params[:project_id]) rescue ActiveRecord::RecordNotFound diff --git a/app/controllers/versions_controller.rb b/app/controllers/versions_controller.rb index 6625ff634..dc1b7eb2b 100644 --- a/app/controllers/versions_controller.rb +++ b/app/controllers/versions_controller.rb @@ -17,7 +17,8 @@ class VersionsController < ApplicationController menu_item :roadmap - before_filter :find_version, :except => [:new, :close_completed] + model_object Version + before_filter :find_model_object, :except => [:new, :close_completed] before_filter :find_project_from_association, :except => [:new, :close_completed] before_filter :find_project, :only => [:new, :close_completed] before_filter :authorize @@ -94,12 +95,6 @@ class VersionsController < ApplicationController end private - def find_version - @version = @object = Version.find(params[:id]) - rescue ActiveRecord::RecordNotFound - render_404 - end - def find_project @project = Project.find(params[:project_id]) rescue ActiveRecord::RecordNotFound -- 2.39.5