Settings export refactor (#1646)
* Refactor Export to take an account and know about the export types * Use Export instance in settings/exports#show
This commit is contained in:
		| @@ -6,7 +6,7 @@ module Settings | ||||
|       before_action :authenticate_user! | ||||
|  | ||||
|       def index | ||||
|         export_data = Export.new(export_accounts).to_csv | ||||
|         @export = Export.new(current_account) | ||||
|  | ||||
|         respond_to do |format| | ||||
|           format.csv { send_data export_data, filename: export_filename } | ||||
|   | ||||
| @@ -5,8 +5,8 @@ module Settings | ||||
|     class BlockedAccountsController < BaseController | ||||
|       private | ||||
|  | ||||
|       def export_accounts | ||||
|         current_account.blocking | ||||
|       def export_data | ||||
|         @export.to_blocked_accounts_csv | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|   | ||||
| @@ -5,8 +5,8 @@ module Settings | ||||
|     class FollowingAccountsController < BaseController | ||||
|       private | ||||
|  | ||||
|       def export_accounts | ||||
|         current_account.following | ||||
|       def export_data | ||||
|         @export.to_following_accounts_csv | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|   | ||||
| @@ -5,8 +5,8 @@ module Settings | ||||
|     class MutedAccountsController < BaseController | ||||
|       private | ||||
|  | ||||
|       def export_accounts | ||||
|         current_account.muting | ||||
|       def export_data | ||||
|         @export.to_muted_accounts_csv | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|   | ||||
| @@ -6,9 +6,6 @@ class Settings::ExportsController < ApplicationController | ||||
|   before_action :authenticate_user! | ||||
|  | ||||
|   def show | ||||
|     @total_storage = current_account.media_attachments.sum(:file_file_size) | ||||
|     @total_follows = current_account.following.count | ||||
|     @total_blocks  = current_account.blocking.count | ||||
|     @total_mutes = current_account.muting.count | ||||
|     @export = Export.new(current_account) | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -2,13 +2,43 @@ | ||||
| require 'csv' | ||||
|  | ||||
| class Export | ||||
|   attr_reader :accounts | ||||
|   attr_reader :account | ||||
|  | ||||
|   def initialize(accounts) | ||||
|     @accounts = accounts | ||||
|   def initialize(account) | ||||
|     @account = account | ||||
|   end | ||||
|  | ||||
|   def to_csv | ||||
|   def to_blocked_accounts_csv | ||||
|     to_csv account.blocking | ||||
|   end | ||||
|  | ||||
|   def to_muted_accounts_csv | ||||
|     to_csv account.muting | ||||
|   end | ||||
|  | ||||
|   def to_following_accounts_csv | ||||
|     to_csv account.following | ||||
|   end | ||||
|  | ||||
|   def total_storage | ||||
|     account.media_attachments.sum(:file_file_size) | ||||
|   end | ||||
|  | ||||
|   def total_follows | ||||
|     account.following.count | ||||
|   end | ||||
|  | ||||
|   def total_blocks | ||||
|     account.blocking.count | ||||
|   end | ||||
|  | ||||
|   def total_mutes | ||||
|     account.muting.count | ||||
|   end | ||||
|  | ||||
|   private | ||||
|  | ||||
|   def to_csv(accounts) | ||||
|     CSV.generate do |csv| | ||||
|       accounts.each do |account| | ||||
|         csv << [(account.local? ? account.local_username_and_domain : account.acct)] | ||||
|   | ||||
| @@ -5,17 +5,17 @@ | ||||
|   %tbody | ||||
|     %tr | ||||
|       %th= t('exports.storage') | ||||
|       %td= number_to_human_size @total_storage | ||||
|       %td= number_to_human_size @export.total_storage | ||||
|       %td | ||||
|     %tr | ||||
|       %th= t('exports.follows') | ||||
|       %td= @total_follows | ||||
|       %td= @export.total_follows | ||||
|       %td= table_link_to 'download', t('exports.csv'), settings_exports_follows_path(format: :csv) | ||||
|     %tr | ||||
|       %th= t('exports.blocks') | ||||
|       %td= @total_blocks | ||||
|       %td= @export.total_blocks | ||||
|       %td= table_link_to 'download', t('exports.csv'), settings_exports_blocks_path(format: :csv) | ||||
|     %tr | ||||
|       %th= t('exports.mutes') | ||||
|       %td= @total_mutes | ||||
|       %td= @export.total_mutes | ||||
|       %td= table_link_to 'download', t('exports.csv'), settings_exports_mutes_path(format: :csv) | ||||
|   | ||||
| @@ -1,6 +1,8 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| describe Settings::ExportsController do | ||||
|   render_views | ||||
|  | ||||
|   before do | ||||
|     sign_in Fabricate(:user), scope: :user | ||||
|   end | ||||
| @@ -8,6 +10,7 @@ describe Settings::ExportsController do | ||||
|   describe 'GET #show' do | ||||
|     it 'returns http success' do | ||||
|       get :show | ||||
|  | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
|   | ||||
		Reference in New Issue
	
	Block a user