]> source.dussan.org Git - redmine.git/commitdiff
Refactor: move IssuesController#changes to JournalsController#index.
authorEric Davis <edavis@littlestreamsoftware.com>
Mon, 23 Aug 2010 15:04:36 +0000 (15:04 +0000)
committerEric Davis <edavis@littlestreamsoftware.com>
Mon, 23 Aug 2010 15:04:36 +0000 (15:04 +0000)
Since #changes is only an Atom feed of journals of a query, it makes
more sense to have it on the JournalsController resource.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4034 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/issues_controller.rb
app/controllers/journals_controller.rb
app/views/issues/changes.rxml [deleted file]
app/views/issues/index.rhtml
app/views/journals/index.rxml [new file with mode: 0644]
config/routes.rb
test/functional/issues_controller_test.rb
test/functional/journals_controller_test.rb
test/integration/routing_test.rb

index 5f08224cc604c0fcdf5354df5fb0399e6c4d4b6a..dc1cef492dd1457b4996bfa4bb9ce47db213d498 100644 (file)
@@ -22,11 +22,11 @@ class IssuesController < ApplicationController
   before_filter :find_issue, :only => [:show, :edit, :update]
   before_filter :find_issues, :only => [:bulk_edit, :move, :perform_move, :destroy]
   before_filter :find_project, :only => [:new, :create]
-  before_filter :authorize, :except => [:index, :changes]
-  before_filter :find_optional_project, :only => [:index, :changes]
+  before_filter :authorize, :except => [:index]
+  before_filter :find_optional_project, :only => [:index]
   before_filter :check_for_default_issue_status, :only => [:new, :create]
   before_filter :build_new_issue_from_params, :only => [:new, :create]
-  accept_key_auth :index, :show, :changes
+  accept_key_auth :index, :show
 
   rescue_from Query::StatementInvalid, :with => :query_statement_invalid
   
@@ -95,21 +95,6 @@ class IssuesController < ApplicationController
     render_404
   end
   
-  def changes
-    retrieve_query
-    sort_init 'id', 'desc'
-    sort_update(@query.sortable_columns)
-    
-    if @query.valid?
-      @journals = @query.journals(:order => "#{Journal.table_name}.created_on DESC", 
-                                  :limit => 25)
-    end
-    @title = (@project ? @project.name : Setting.app_title) + ": " + (@query.new_record? ? l(:label_changes_details) : @query.name)
-    render :layout => false, :content_type => 'application/atom+xml'
-  rescue ActiveRecord::RecordNotFound
-    render_404
-  end
-  
   def show
     @journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
     @journals.each_with_index {|j,i| j.indice = i+1}
@@ -124,7 +109,7 @@ class IssuesController < ApplicationController
       format.html { render :template => 'issues/show.rhtml' }
       format.xml  { render :layout => false }
       format.json { render :text => @issue.to_json, :layout => false }
-      format.atom { render :action => 'changes', :layout => false, :content_type => 'application/atom+xml' }
+      format.atom { render :template => 'journals/index', :layout => false, :content_type => 'application/atom+xml' }
       format.pdf  { send_data(issue_to_pdf(@issue), :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") }
     end
   end
index 10450970c7b3ad53cb75f82825724bb6a5ff2cae..a3b1abde4d72c215437579aa7aabb680694b8e99 100644 (file)
 class JournalsController < ApplicationController
   before_filter :find_journal, :only => [:edit]
   before_filter :find_issue, :only => [:new]
+  before_filter :find_optional_project, :only => [:index]
+  accept_key_auth :index
+
+  helper :issues
+  helper :queries
+  include QueriesHelper
+  helper :sort
+  include SortHelper
+
+  def index
+    retrieve_query
+    sort_init 'id', 'desc'
+    sort_update(@query.sortable_columns)
+    
+    if @query.valid?
+      @journals = @query.journals(:order => "#{Journal.table_name}.created_on DESC", 
+                                  :limit => 25)
+    end
+    @title = (@project ? @project.name : Setting.app_title) + ": " + (@query.new_record? ? l(:label_changes_details) : @query.name)
+    render :layout => false, :content_type => 'application/atom+xml'
+  rescue ActiveRecord::RecordNotFound
+    render_404
+  end
   
   def new
     journal = Journal.find(params[:journal_id]) if params[:journal_id]
diff --git a/app/views/issues/changes.rxml b/app/views/issues/changes.rxml
deleted file mode 100644 (file)
index 4c1e678..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-xml.instruct!
-xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
-  xml.title   @title
-  xml.link    "rel" => "self", "href" => url_for(:format => 'atom', :key => User.current.rss_key, :only_path => false)
-  xml.link    "rel" => "alternate", "href" => home_url(:only_path => false)
-  xml.id      url_for(:controller => 'welcome', :only_path => false)
-  xml.updated((@journals.first ? @journals.first.event_datetime : Time.now).xmlschema)
-  xml.author  { xml.name "#{Setting.app_title}" }
-  @journals.each do |change|
-    issue = change.issue
-    xml.entry do
-      xml.title   "#{issue.project.name} - #{issue.tracker.name} ##{issue.id}: #{issue.subject}"
-      xml.link    "rel" => "alternate", "href" => url_for(:controller => 'issues' , :action => 'show', :id => issue, :only_path => false)
-      xml.id      url_for(:controller => 'issues' , :action => 'show', :id => issue, :journal_id => change, :only_path => false)
-      xml.updated change.created_on.xmlschema
-      xml.author do
-        xml.name change.user.name
-        xml.email(change.user.mail) if change.user.is_a?(User) && !change.user.mail.blank? && !change.user.pref.hide_mail
-      end
-      xml.content "type" => "html" do
-        xml.text! '<ul>'
-        change.details.each do |detail|
-          xml.text! '<li>' + show_detail(detail, false) + '</li>'
-        end
-        xml.text! '</ul>'
-        xml.text! textilizable(change, :notes, :only_path => false) unless change.notes.blank?
-      end
-    end
-  end
-end
\ No newline at end of file
index 04298b5ca49f691cb36d5909efc8be133ae230cb..ee6514d0b6709190035a50d4dcc255f7e5e9b2e0 100644 (file)
@@ -78,7 +78,7 @@
 
 <% content_for :header_tags do %>
     <%= auto_discovery_link_tag(:atom, {:query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_issue_plural)) %>
-    <%= auto_discovery_link_tag(:atom, {:action => 'changes', :query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_changes_details)) %>
+    <%= auto_discovery_link_tag(:atom, {:controller => 'journals', :action => 'index', :query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_changes_details)) %>
 <% end %>
 
 <%= context_menu issues_context_menu_path %>
diff --git a/app/views/journals/index.rxml b/app/views/journals/index.rxml
new file mode 100644 (file)
index 0000000..4c1e678
--- /dev/null
@@ -0,0 +1,30 @@
+xml.instruct!
+xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
+  xml.title   @title
+  xml.link    "rel" => "self", "href" => url_for(:format => 'atom', :key => User.current.rss_key, :only_path => false)
+  xml.link    "rel" => "alternate", "href" => home_url(:only_path => false)
+  xml.id      url_for(:controller => 'welcome', :only_path => false)
+  xml.updated((@journals.first ? @journals.first.event_datetime : Time.now).xmlschema)
+  xml.author  { xml.name "#{Setting.app_title}" }
+  @journals.each do |change|
+    issue = change.issue
+    xml.entry do
+      xml.title   "#{issue.project.name} - #{issue.tracker.name} ##{issue.id}: #{issue.subject}"
+      xml.link    "rel" => "alternate", "href" => url_for(:controller => 'issues' , :action => 'show', :id => issue, :only_path => false)
+      xml.id      url_for(:controller => 'issues' , :action => 'show', :id => issue, :journal_id => change, :only_path => false)
+      xml.updated change.created_on.xmlschema
+      xml.author do
+        xml.name change.user.name
+        xml.email(change.user.mail) if change.user.is_a?(User) && !change.user.mail.blank? && !change.user.pref.hide_mail
+      end
+      xml.content "type" => "html" do
+        xml.text! '<ul>'
+        change.details.each do |detail|
+          xml.text! '<li>' + show_detail(detail, false) + '</li>'
+        end
+        xml.text! '</ul>'
+        xml.text! textilizable(change, :notes, :only_path => false) unless change.notes.blank?
+      end
+    end
+  end
+end
\ No newline at end of file
index 7b22328bf936f8edc8c041478e7de3958939db83..b480a4900001cb5b273cf4e5d0695c616e6c160a 100644 (file)
@@ -108,6 +108,7 @@ ActionController::Routing::Routes.draw do |map|
   # TODO: would look nicer as /issues/:id/preview
   map.preview_issue '/issues/preview/:id', :controller => 'previews', :action => 'issue'
   map.issues_context_menu '/issues/context_menu', :controller => 'context_menus', :action => 'issues'
+  map.issue_changes '/issues/changes', :controller => 'journals', :action => 'index'
   
   map.with_options :controller => 'issues' do |issues_routes|
     issues_routes.with_options :conditions => {:method => :get} do |issues_views|
index dfdb74c42c729a4d1a9eb4e54b0d9a088c087297..7c00db708495fe5d07ee46477024237b8a6d936a 100644 (file)
@@ -231,13 +231,6 @@ class IssuesControllerTest < ActionController::TestCase
     assert_equal columns, session[:query][:column_names].map(&:to_s)
   end
 
-  def test_changes
-    get :changes, :project_id => 1
-    assert_response :success
-    assert_not_nil assigns(:journals)
-    assert_equal 'application/atom+xml', @response.content_type
-  end
-  
   def test_show_by_anonymous
     get :show, :id => 1
     assert_response :success
@@ -307,7 +300,7 @@ class IssuesControllerTest < ActionController::TestCase
   def test_show_atom
     get :show, :id => 2, :format => 'atom'
     assert_response :success
-    assert_template 'changes.rxml'
+    assert_template 'journals/index.rxml'
     # Inline image
     assert_select 'content', :text => Regexp.new(Regexp.quote('http://test.host/attachments/download/10'))
   end
index 7d8345b2889b1662db571f173d639950828379fe..83e015af6dd9e0752be3815b0257051a4b93324b 100644 (file)
@@ -31,6 +31,13 @@ class JournalsControllerTest < ActionController::TestCase
     User.current = nil
   end
   
+  def test_index
+    get :index, :project_id => 1
+    assert_response :success
+    assert_not_nil assigns(:journals)
+    assert_equal 'application/atom+xml', @response.content_type
+  end
+  
   def test_reply_to_issue
     @request.session[:user_id] = 2
     get :new, :id => 1
index 63293d594944af7e832eb3edaaf54c2b8d8ad808..b05a1285d1f9c0fa1988ae8b898671610f83fda4 100644 (file)
@@ -106,6 +106,8 @@ class RoutingTest < ActionController::IntegrationTest
     should_route :post, "/issues/preview/123", :controller => 'previews', :action => 'issue', :id => '123'
     should_route :get, "/issues/context_menu", :controller => 'context_menus', :action => 'issues'
     should_route :post, "/issues/context_menu", :controller => 'context_menus', :action => 'issues'
+
+    should_route :get, "/issues/changes", :controller => 'journals', :action => 'index'
   end
 
   context "issue categories" do