diff --git a/app/controllers/boards_controller.rb b/app/controllers/boards_controller.rb index 8d53f81e4..eaac14e5b 100644 --- a/app/controllers/boards_controller.rb +++ b/app/controllers/boards_controller.rb @@ -35,19 +35,29 @@ class BoardsController < ApplicationController end def show - sort_init 'updated_on', 'desc' - sort_update 'created_on' => "#{Message.table_name}.created_on", - 'replies' => "#{Message.table_name}.replies_count", - 'updated_on' => "#{Message.table_name}.updated_on" - - @topic_count = @board.topics.count - @topic_pages = Paginator.new self, @topic_count, per_page_option, params['page'] - @topics = @board.topics.find :all, :order => ["#{Message.table_name}.sticky DESC", sort_clause].compact.join(', '), - :include => [:author, {:last_reply => :author}], - :limit => @topic_pages.items_per_page, - :offset => @topic_pages.current.offset - @message = Message.new - render :action => 'show', :layout => !request.xhr? + respond_to do |format| + format.html { + sort_init 'updated_on', 'desc' + sort_update 'created_on' => "#{Message.table_name}.created_on", + 'replies' => "#{Message.table_name}.replies_count", + 'updated_on' => "#{Message.table_name}.updated_on" + + @topic_count = @board.topics.count + @topic_pages = Paginator.new self, @topic_count, per_page_option, params['page'] + @topics = @board.topics.find :all, :order => ["#{Message.table_name}.sticky DESC", sort_clause].compact.join(', '), + :include => [:author, {:last_reply => :author}], + :limit => @topic_pages.items_per_page, + :offset => @topic_pages.current.offset + @message = Message.new + render :action => 'show', :layout => !request.xhr? + } + format.atom { + @messages = @board.messages.find :all, :order => 'created_on DESC', + :include => [:author, :board], + :limit => Setting.feeds_limit.to_i + render_feed(@messages, :title => "#{@project}: #{@board}") + } + end end verify :method => :post, :only => [ :destroy ], :redirect_to => { :action => :index } diff --git a/app/models/board.rb b/app/models/board.rb index 3bc18efec..ada138375 100644 --- a/app/models/board.rb +++ b/app/models/board.rb @@ -27,6 +27,10 @@ class Board < ActiveRecord::Base validates_length_of :name, :maximum => 30 validates_length_of :description, :maximum => 255 + def to_s + name + end + def reset_counters! self.class.reset_counters!(id) end diff --git a/app/views/boards/show.rhtml b/app/views/boards/show.rhtml index 011a25e06..7f1600af0 100644 --- a/app/views/boards/show.rhtml +++ b/app/views/boards/show.rhtml @@ -59,4 +59,12 @@

<%= l(:label_no_data) %>

<% end %> +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> +<% end %> + <% html_title h(@board.name) %> + +<% content_for :header_tags do %> + <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@project}: #{@board}") %> +<% end %> diff --git a/config/routes.rb b/config/routes.rb index 2a4800612..bfacb1d3a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -86,6 +86,7 @@ ActionController::Routing::Routes.draw do |map| board_views.connect 'projects/:project_id/boards', :action => 'index' board_views.connect 'projects/:project_id/boards/new', :action => 'new' board_views.connect 'projects/:project_id/boards/:id', :action => 'show' + board_views.connect 'projects/:project_id/boards/:id.:format', :action => 'show' board_views.connect 'projects/:project_id/boards/:id/edit', :action => 'edit' end board_routes.with_options :conditions => {:method => :post} do |board_actions| diff --git a/test/functional/boards_controller_test.rb b/test/functional/boards_controller_test.rb index b9df5517f..01db0f94b 100644 --- a/test/functional/boards_controller_test.rb +++ b/test/functional/boards_controller_test.rb @@ -84,6 +84,10 @@ class BoardsControllerTest < Test::Unit::TestCase {:method => :get, :path => '/projects/world_domination/boards/44'}, :controller => 'boards', :action => 'show', :id => '44', :project_id => 'world_domination' ) + assert_routing( + {:method => :get, :path => '/projects/world_domination/boards/44.atom'}, + :controller => 'boards', :action => 'show', :id => '44', :project_id => 'world_domination', :format => 'atom' + ) end def test_show @@ -95,6 +99,15 @@ class BoardsControllerTest < Test::Unit::TestCase assert_not_nil assigns(:topics) end + def test_show_atom + get :show, :project_id => 1, :id => 1, :format => 'atom' + assert_response :success + assert_template 'common/feed.atom' + assert_not_nil assigns(:board) + assert_not_nil assigns(:project) + assert_not_nil assigns(:messages) + end + def test_edit_routing assert_routing( {:method => :get, :path => '/projects/world_domination/boards/44/edit'},