From b94c7922c55681e2b7cde52c90ecf58e74ea000e Mon Sep 17 00:00:00 2001
From: Arpit Jalan <arpit@techapj.com>
Date: Tue, 13 Jan 2015 23:52:21 +0530
Subject: [PATCH] :racehorse: gzip csv export files

---
 app/jobs/regular/export_csv_file.rb            | 6 ++++--
 spec/controllers/export_csv_controller_spec.rb | 6 +++---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/app/jobs/regular/export_csv_file.rb b/app/jobs/regular/export_csv_file.rb
index b0ae17c36..308d5d377 100644
--- a/app/jobs/regular/export_csv_file.rb
+++ b/app/jobs/regular/export_csv_file.rb
@@ -288,12 +288,14 @@ module Jobs
             csv << value
           end
         end
+        # compress CSV file
+        `gzip --best #{File.expand_path("#{UserExport.base_directory}/#{@file_name}", __FILE__)}`
       end
 
       def notify_user
         if @current_user
-          if @file_name != "" && File.exists?("#{UserExport.base_directory}/#{@file_name}")
-            SystemMessage.create_from_system_user(@current_user, :csv_export_succeeded, download_link: "#{Discourse.base_url}/export_csv/#{@file_name}", file_name: @file_name)
+          if @file_name != "" && File.exists?("#{UserExport.base_directory}/#{@file_name}.gz")
+            SystemMessage.create_from_system_user(@current_user, :csv_export_succeeded, download_link: "#{Discourse.base_url}/export_csv/#{@file_name}.gz", file_name: "#{@file_name}.gz")
           else
             SystemMessage.create_from_system_user(@current_user, :csv_export_failed)
           end
diff --git a/spec/controllers/export_csv_controller_spec.rb b/spec/controllers/export_csv_controller_spec.rb
index 49a9b36b9..16d3f5996 100644
--- a/spec/controllers/export_csv_controller_spec.rb
+++ b/spec/controllers/export_csv_controller_spec.rb
@@ -1,7 +1,7 @@
 require "spec_helper"
 
 describe ExportCsvController do
-  let(:export_filename) { "user-archive-999.csv" }
+  let(:export_filename) { "user-archive-999.csv.gz" }
 
 
   context "while logged in as normal user" do
@@ -30,7 +30,7 @@ describe ExportCsvController do
     describe ".download" do
       it "uses send_file to transmit the export file" do
         file = UserExport.create(export_type: "user", user_id: @user.id)
-        file_name = "user-archive-#{file.id}.csv"
+        file_name = "user-archive-#{file.id}.csv.gz"
         controller.stubs(:render)
         export = UserExport.new()
         UserExport.expects(:get_download_path).with(file_name).returns(export)
@@ -74,7 +74,7 @@ describe ExportCsvController do
     describe ".download" do
       it "uses send_file to transmit the export file" do
         file = UserExport.create(export_type: "admin", user_id: @admin.id)
-        file_name = "screened-email-#{file.id}.csv"
+        file_name = "screened-email-#{file.id}.csv.gz"
         controller.stubs(:render)
         export = UserExport.new()
         UserExport.expects(:get_download_path).with(file_name).returns(export)