commit: 0ebe7d6d236d47bf805a920dc722897bafec7459
parent: 23081bb2994b34108fb06e15d3101849a3077cf9
Author: Matt Jankowski <mjankowski@thoughtbot.com>
Date: Tue, 30 May 2017 13:06:01 -0400
Remove exports/base controller in favor of shared concern (#3444)
Diffstat:
7 files changed, 84 insertions(+), 55 deletions(-)
diff --git a/app/controllers/concerns/export_controller_concern.rb b/app/controllers/concerns/export_controller_concern.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+module ExportControllerConcern
+ extend ActiveSupport::Concern
+
+ included do
+ before_action :authenticate_user!
+ before_action :load_export
+ end
+
+ private
+
+ def load_export
+ @export = Export.new(current_account)
+ end
+
+ def send_export_file
+ respond_to do |format|
+ format.csv { send_data export_data, filename: export_filename }
+ end
+ end
+
+ def export_data
+ raise 'Override in controller'
+ end
+
+ def export_filename
+ "#{controller_name}.csv"
+ end
+end
diff --git a/app/controllers/settings/exports/base_controller.rb b/app/controllers/settings/exports/base_controller.rb
@@ -1,23 +0,0 @@
-# frozen_string_literal: true
-
-module Settings
- module Exports
- class BaseController < ApplicationController
- before_action :authenticate_user!
-
- def index
- @export = Export.new(current_account)
-
- respond_to do |format|
- format.csv { send_data export_data, filename: export_filename }
- end
- end
-
- private
-
- def export_filename
- "#{controller_name}.csv"
- end
- end
- end
-end
diff --git a/app/controllers/settings/exports/blocked_accounts_controller.rb b/app/controllers/settings/exports/blocked_accounts_controller.rb
@@ -2,7 +2,13 @@
module Settings
module Exports
- class BlockedAccountsController < BaseController
+ class BlockedAccountsController < ApplicationController
+ include ExportControllerConcern
+
+ def index
+ send_export_file
+ end
+
private
def export_data
diff --git a/app/controllers/settings/exports/following_accounts_controller.rb b/app/controllers/settings/exports/following_accounts_controller.rb
@@ -2,7 +2,13 @@
module Settings
module Exports
- class FollowingAccountsController < BaseController
+ class FollowingAccountsController < ApplicationController
+ include ExportControllerConcern
+
+ def index
+ send_export_file
+ end
+
private
def export_data
diff --git a/app/controllers/settings/exports/muted_accounts_controller.rb b/app/controllers/settings/exports/muted_accounts_controller.rb
@@ -2,7 +2,13 @@
module Settings
module Exports
- class MutedAccountsController < BaseController
+ class MutedAccountsController < ApplicationController
+ include ExportControllerConcern
+
+ def index
+ send_export_file
+ end
+
private
def export_data
diff --git a/spec/controllers/concerns/export_controller_concern_spec.rb b/spec/controllers/concerns/export_controller_concern_spec.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe ApplicationController, type: :controller do
+ controller do
+ include ExportControllerConcern
+ def index
+ send_export_file
+ end
+ def export_data
+ @export.account.username
+ end
+ end
+
+ describe 'GET #index' do
+ it 'returns a csv of the exported data when signed in' do
+ user = Fabricate(:user)
+ sign_in user
+ get :index, format: :csv
+
+ expect(response).to have_http_status(:success)
+ expect(response.content_type).to eq 'text/csv'
+ expect(response.headers['Content-Disposition']).to eq 'attachment; filename="anonymous.csv"'
+ expect(response.body).to eq user.account.username
+ end
+
+ it 'returns unauthorized when not signed in' do
+ get :index, format: :csv
+ expect(response).to have_http_status(:unauthorized)
+ end
+ end
+end
diff --git a/spec/controllers/settings/exports/base_controller_spec.rb b/spec/controllers/settings/exports/base_controller_spec.rb
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-describe Settings::Exports::BaseController do
- controller do
- def export_data
- @export.account.username
- end
- end
-
- describe 'GET #index' do
- it 'returns a csv of the exported data when signed in' do
- user = Fabricate(:user)
- sign_in user
- get :index, format: :csv
-
- expect(response).to have_http_status(:success)
- expect(response.content_type).to eq 'text/csv'
- expect(response.headers['Content-Disposition']).to eq 'attachment; filename="base.csv"'
- expect(response.body).to eq user.account.username
- end
-
- it 'returns unauthorized when not signed in' do
- get :index, format: :csv
- expect(response).to have_http_status(:unauthorized)
- end
- end
-end