Skip to content

Commit

Permalink
Rename Feeds::ChangesetCommentsController to ChangesetComments::Feeds…
Browse files Browse the repository at this point in the history
…Controller

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).
  • Loading branch information
gravitystorm committed Aug 28, 2024
1 parent a948f2b commit 10a4c5c
Show file tree
Hide file tree
Showing 10 changed files with 32 additions and 30 deletions.
2 changes: 1 addition & 1 deletion app/abilities/ability.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def initialize(user)

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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
module Feeds
class ChangesetCommentsController < ApplicationController
module ChangesetComments
class FeedsController < ApplicationController
before_action :authorize_web
before_action :set_locale

authorize_resource
authorize_resource :changeset_comment

before_action -> { check_database_readable(:need_api => true) }
around_action :web_timeout

##
# Get a feed of recent changeset comments
def index
def show
if params[:changeset_id]
# Extract the arguments
changeset_id = params[:changeset_id].to_i
Expand Down
24 changes: 12 additions & 12 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -246,18 +246,6 @@ en:
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:
Expand Down Expand Up @@ -426,6 +414,18 @@ en:
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}"
Expand Down
10 changes: 6 additions & 4 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,8 @@
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]
Expand Down Expand Up @@ -167,8 +167,10 @@
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"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
require "test_helper"

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 },
{ :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 },
{ :controller => "feeds/changeset_comments", :action => "index", :format => "rss" }
{ :controller => "changeset_comments/feeds", :action => "show", :format => "rss" }
)
end

Expand All @@ -21,7 +21,7 @@ def test_feed
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
Expand All @@ -30,7 +30,7 @@ def test_feed
end
end

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
Expand All @@ -39,7 +39,7 @@ def test_feed
end
end

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
Expand All @@ -62,10 +62,10 @@ def test_feed
##
# 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

get feeds_changeset_comments_path(:format => "rss", :limit => 100001)
get changesets_comments_feed_path(:format => "rss", :limit => 100001)
assert_response :bad_request
end
end
Expand Down

0 comments on commit 10a4c5c

Please sign in to comment.