We usually create nested controllers with the main controller as the module,
and the nested controller as the specialization, e.g. Users::DeletionsController
or Traces::IconsController.
This then leaves the topic of whether the feed resource is plural, and whether we
are then showing a singular feed or showing a list (index) of objects.
The routes are carefully named so that we have `changesets_comments_feed_path` (the
comments feed for all changesets) vs `changeset_comment_feed_path(changeset)` (the
comments for a singular changeset).
if Settings.status != "database_offline"
can [:index, :feed, :show], Changeset
if Settings.status != "database_offline"
can [:index, :feed, :show], Changeset
- can :index, ChangesetComment
+ can :show, ChangesetComment
can [:confirm, :confirm_resend, :confirm_email], :confirmation
can [:index, :rss, :show], DiaryEntry
can :index, DiaryComment
can [:confirm, :confirm_resend, :confirm_email], :confirmation
can [:index, :rss, :show], DiaryEntry
can :index, DiaryComment
-module Feeds
- class ChangesetCommentsController < ApplicationController
+module ChangesetComments
+ class FeedsController < ApplicationController
before_action :authorize_web
before_action :set_locale
before_action :authorize_web
before_action :set_locale
+ authorize_resource :changeset_comment
before_action -> { check_database_readable(:need_api => true) }
around_action :web_timeout
##
# Get a feed of recent changeset comments
before_action -> { check_database_readable(:need_api => true) }
around_action :web_timeout
##
# Get a feed of recent changeset comments
if params[:changeset_id]
# Extract the arguments
changeset_id = params[:changeset_id].to_i
if params[:changeset_id]
# Extract the arguments
changeset_id = params[:changeset_id].to_i
entry:
comment: Comment
full: Full note
entry:
comment: Comment
full: Full note
- feeds:
- changeset_comments:
- comment:
- comment: "New comment on changeset #%{changeset_id} by %{author}"
- commented_at_by_html: "Updated %{when} by %{user}"
- comments:
- comment: "New comment on changeset #%{changeset_id} by %{author}"
- index:
- title_all: OpenStreetMap changeset discussion
- title_particular: "OpenStreetMap changeset #%{changeset_id} discussion"
- timeout:
- sorry: "Sorry, the list of changeset comments you requested took too long to retrieve."
account:
deletions:
show:
account:
deletions:
show:
old_relations:
not_found:
sorry: "Sorry, relation #%{id} version %{version} could not be found."
old_relations:
not_found:
sorry: "Sorry, relation #%{id} version %{version} could not be found."
+ changeset_comments:
+ feeds:
+ comment:
+ comment: "New comment on changeset #%{changeset_id} by %{author}"
+ commented_at_by_html: "Updated %{when} by %{user}"
+ comments:
+ comment: "New comment on changeset #%{changeset_id} by %{author}"
+ show:
+ title_all: OpenStreetMap changeset discussion
+ title_particular: "OpenStreetMap changeset #%{changeset_id} discussion"
+ timeout:
+ sorry: "Sorry, the list of changeset comments you requested took too long to retrieve."
changesets:
changeset_paging_nav:
showing_page: "Page %{page}"
changesets:
changeset_paging_nav:
showing_page: "Page %{page}"
resources :changesets, :path => "changeset", :id => /\d+/, :only => :show do
match :subscribe, :unsubscribe, :on => :member, :via => [:get, :post]
resources :changesets, :path => "changeset", :id => /\d+/, :only => :show do
match :subscribe, :unsubscribe, :on => :member, :via => [:get, :post]
- namespace :feeds, :path => "" do
- resources :changeset_comments, :path => "comments/feed", :only => :index, :defaults => { :format => "rss" }
+ namespace :changeset_comments, :as => :comments, :path => :comments do
+ resource :feed, :only => :show, :defaults => { :format => "rss" }
end
end
resources :notes, :path => "note", :id => /\d+/, :only => [:show, :new]
end
end
resources :notes, :path => "note", :id => /\d+/, :only => [:show, :new]
get "/communities" => "site#communities"
get "/history" => "changesets#index"
get "/history/feed" => "changesets#feed", :defaults => { :format => :atom }
get "/communities" => "site#communities"
get "/history" => "changesets#index"
get "/history/feed" => "changesets#feed", :defaults => { :format => :atom }
- namespace :feeds, :path => "" do
- resources :changeset_comments, :path => "/history/comments/feed", :only => :index, :defaults => { :format => "rss" }
+ scope "/history" do
+ namespace :changeset_comments, :path => :comments, :as => :changesets_comments do
+ resource :feed, :only => :show, :defaults => { :format => "rss" }
+ end
end
get "/export" => "site#export"
get "/login" => "sessions#new"
end
get "/export" => "site#export"
get "/login" => "sessions#new"
-module Feeds
- class ChangesetCommentsControllerTest < ActionDispatch::IntegrationTest
+module ChangesetComments
+ class FeedsControllerTest < ActionDispatch::IntegrationTest
##
# test all routes which lead to this controller
def test_routes
assert_routing(
{ :path => "/changeset/1/comments/feed", :method => :get },
##
# test all routes which lead to this controller
def test_routes
assert_routing(
{ :path => "/changeset/1/comments/feed", :method => :get },
- { :controller => "feeds/changeset_comments", :action => "index", :changeset_id => "1", :format => "rss" }
+ { :controller => "changeset_comments/feeds", :action => "show", :changeset_id => "1", :format => "rss" }
)
assert_routing(
{ :path => "/history/comments/feed", :method => :get },
)
assert_routing(
{ :path => "/history/comments/feed", :method => :get },
- { :controller => "feeds/changeset_comments", :action => "index", :format => "rss" }
+ { :controller => "changeset_comments/feeds", :action => "show", :format => "rss" }
changeset = create(:changeset, :closed)
create_list(:changeset_comment, 3, :changeset => changeset)
changeset = create(:changeset, :closed)
create_list(:changeset_comment, 3, :changeset => changeset)
- get feeds_changeset_comments_path(:format => "rss")
+ get changesets_comments_feed_path(:format => "rss")
assert_response :success
assert_equal "application/rss+xml", @response.media_type
assert_select "rss", :count => 1 do
assert_response :success
assert_equal "application/rss+xml", @response.media_type
assert_select "rss", :count => 1 do
- get feeds_changeset_comments_path(:format => "rss", :limit => 2)
+ get changesets_comments_feed_path(:format => "rss", :limit => 2)
assert_response :success
assert_equal "application/rss+xml", @response.media_type
assert_select "rss", :count => 1 do
assert_response :success
assert_equal "application/rss+xml", @response.media_type
assert_select "rss", :count => 1 do
- get changeset_feeds_changeset_comments_path(changeset, :format => "rss")
+ get changeset_comments_feed_path(changeset, :format => "rss")
assert_response :success
assert_equal "application/rss+xml", @response.media_type
last_comment_id = -1
assert_response :success
assert_equal "application/rss+xml", @response.media_type
last_comment_id = -1
##
# test comments feed
def test_feed_bad_limit
##
# test comments feed
def test_feed_bad_limit
- get feeds_changeset_comments_path(:format => "rss", :limit => 0)
+ get changesets_comments_feed_path(:format => "rss", :limit => 0)
assert_response :bad_request
assert_response :bad_request
- get feeds_changeset_comments_path(:format => "rss", :limit => 100001)
+ get changesets_comments_feed_path(:format => "rss", :limit => 100001)
assert_response :bad_request
end
end
assert_response :bad_request
end
end