Redmine Refactor #117: Split New Method in NewsController

Now that IssuesController, ProjectsController, and VersionsController have been refactored to resources, I’m moving on to the NewsController. This controller suffers from the same problem that the other ones did, using the #new and #edit actions for two different purposes. Using split method, I can start to separate these actions and start to convert NewsController to a REST resource.

Before

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class NewsController  [: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]
  before_filter :find_optional_project, :only => :index
  accept_key_auth :index
 
  def new
    @news = News.new(:project => @project, :author => User.current)
    if request.post?
      @news.attributes = params[:news]
      if @news.save
        flash[:notice] = l(:notice_successful_create)
        redirect_to :controller => 'news', :action => 'index', :project_id => @project
      end
    end
  end

After

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class NewsController  [:new, :create, :index, :preview]
  before_filter :find_project_from_association, :except => [:new, :create, :index, :preview]
  before_filter :find_project, :only => [:new, :create, :preview]
  before_filter :authorize, :except => [:index, :preview]
  before_filter :find_optional_project, :only => :index
  accept_key_auth :index
 
  def new
    @news = News.new(:project => @project, :author => User.current)
  end
 
  def create
    @news = News.new(:project => @project, :author => User.current)
    if request.post?
      @news.attributes = params[:news]
      if @news.save
        flash[:notice] = l(:notice_successful_create)
        redirect_to :controller => 'news', :action => 'index', :project_id => @project
      else
        render :action => 'new'
      end
    end
  end

In order for this refactoring to work, I had to duplicate the @news setup in #create. I’m not worried about removing that duplication yet because a simple extract method or two will fix it. NewsController‘s #edit method still needs to be refactored and there are several commenting methods that should be refactored also.

Reference commit

Share

  • Facebook
  • Twitter
  • HackerNews
  • Reddit
  • Tumblr
  • Delicious
  • Email
  • RSS

Related posts:

  1. Redmine Refactor #118: Split Edit Method in NewsController
  2. Redmine Refactor #115: Split Method in VersionsController
  3. Redmine Refactor #114: Split Method in VersionsController
  4. Redmine Refactor #112: Split Method in FilesController
  5. Redmine Refactor #140: Extract Method WikiController#edit to #update

About Eric Davis

I founded Little Stream Software where I provide Redmine and ChiliProject services to help projects teams. I also created an ebook, Redmine Tips, were I show you how to become more productive using Redmine. I am also the author of Refactoring Redmine, where I go about refactoring Rails using Redmine as an example.

, , , ,

Chirk HR     Reuse your existing job applicants »
WP Socializer Aakash Web