about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorMatt Jankowski <mjankowski@thoughtbot.com>2017-04-11 16:00:43 -0400
committerEugen <eugen@zeonfederated.com>2017-04-11 22:00:43 +0200
commit3ddd936b039474259cff3793c767ecb7f74e89e0 (patch)
treedef84f4d35f11defaeb779049fec3f45998d9135 /app
parent1921c5416b08d8374ee7aee6c072eed9b67c58c8 (diff)
Refactor exports controller (#1567)
* Add basic coverage for settings/exports controller

* Remove unused @account variable from settings/exports controller

* Add coverage for download export actions

* Remove deprecated `render :text` in favor of `send_data` for csv downloads

* Add model to handle exports

* Use Export class in settings/exports controller

* Simplify settings/exports controller methods

* Move settings/export to more restful routes
Diffstat (limited to 'app')
-rw-r--r--app/controllers/settings/exports/blocked_accounts_controller.rb17
-rw-r--r--app/controllers/settings/exports/following_accounts_controller.rb17
-rw-r--r--app/controllers/settings/exports_controller.rb33
-rw-r--r--app/models/export.rb18
-rw-r--r--app/views/settings/exports/show.html.haml4
5 files changed, 54 insertions, 35 deletions
diff --git a/app/controllers/settings/exports/blocked_accounts_controller.rb b/app/controllers/settings/exports/blocked_accounts_controller.rb
new file mode 100644
index 000000000..0bf8848b4
--- /dev/null
+++ b/app/controllers/settings/exports/blocked_accounts_controller.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module Settings
+  module Exports
+    class BlockedAccountsController < ApplicationController
+      before_action :authenticate_user!
+
+      def index
+        export_data = Export.new(current_account.blocking).to_csv
+
+        respond_to do |format|
+          format.csv { send_data export_data, filename: 'blocking.csv' }
+        end
+      end
+    end
+  end
+end
diff --git a/app/controllers/settings/exports/following_accounts_controller.rb b/app/controllers/settings/exports/following_accounts_controller.rb
new file mode 100644
index 000000000..a7f4344ca
--- /dev/null
+++ b/app/controllers/settings/exports/following_accounts_controller.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module Settings
+  module Exports
+    class FollowingAccountsController < ApplicationController
+      before_action :authenticate_user!
+
+      def index
+        export_data = Export.new(current_account.following).to_csv
+
+        respond_to do |format|
+          format.csv { send_data export_data, filename: 'following.csv' }
+        end
+      end
+    end
+  end
+end
diff --git a/app/controllers/settings/exports_controller.rb b/app/controllers/settings/exports_controller.rb
index ff688978c..e060f03d3 100644
--- a/app/controllers/settings/exports_controller.rb
+++ b/app/controllers/settings/exports_controller.rb
@@ -1,46 +1,13 @@
 # frozen_string_literal: true
 
-require 'csv'
-
 class Settings::ExportsController < ApplicationController
   layout 'admin'
 
   before_action :authenticate_user!
-  before_action :set_account
 
   def show
     @total_storage = current_account.media_attachments.sum(:file_file_size)
     @total_follows = current_account.following.count
     @total_blocks  = current_account.blocking.count
   end
-
-  def download_following_list
-    @accounts = current_account.following
-
-    respond_to do |format|
-      format.csv { render text: accounts_list_to_csv(@accounts) }
-    end
-  end
-
-  def download_blocking_list
-    @accounts = current_account.blocking
-
-    respond_to do |format|
-      format.csv { render text: accounts_list_to_csv(@accounts) }
-    end
-  end
-
-  private
-
-  def set_account
-    @account = current_user.account
-  end
-
-  def accounts_list_to_csv(list)
-    CSV.generate do |csv|
-      list.each do |account|
-        csv << [(account.local? ? account.local_username_and_domain : account.acct)]
-      end
-    end
-  end
 end
diff --git a/app/models/export.rb b/app/models/export.rb
new file mode 100644
index 000000000..cd1a58eb6
--- /dev/null
+++ b/app/models/export.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+require 'csv'
+
+class Export
+  attr_reader :accounts
+
+  def initialize(accounts)
+    @accounts = accounts
+  end
+
+  def to_csv
+    CSV.generate do |csv|
+      accounts.each do |account|
+        csv << [(account.local? ? account.local_username_and_domain : account.acct)]
+      end
+    end
+  end
+end
diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml
index 0a0ff8633..432a61b4a 100644
--- a/app/views/settings/exports/show.html.haml
+++ b/app/views/settings/exports/show.html.haml
@@ -10,8 +10,8 @@
     %tr
       %th= t('exports.follows')
       %td= @total_follows
-      %td= table_link_to 'download', t('exports.csv'), follows_settings_export_path(format: :csv)
+      %td= table_link_to 'download', t('exports.csv'), settings_exports_follows_path(format: :csv)
     %tr
       %th= t('exports.blocks')
       %td= @total_blocks
-      %td= table_link_to 'download', t('exports.csv'), blocks_settings_export_path(format: :csv)
+      %td= table_link_to 'download', t('exports.csv'), settings_exports_blocks_path(format: :csv)