From c619aed8f9c5ddfa1fac5b2c273bae6bf64326f5 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Thu, 15 Jan 2015 23:00:59 +0530 Subject: [PATCH] :lipstick: add username and date-time in exported file name --- app/controllers/export_csv_controller.rb | 2 +- app/jobs/regular/export_csv_file.rb | 8 ++++++-- app/models/user_export.rb | 4 ++-- .../20150115172310_rename_user_export_column.rb | 5 +++++ spec/controllers/export_csv_controller_spec.rb | 14 +++++++------- 5 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 db/migrate/20150115172310_rename_user_export_column.rb diff --git a/app/controllers/export_csv_controller.rb b/app/controllers/export_csv_controller.rb index a8f875ede65..353ddcd9d39 100644 --- a/app/controllers/export_csv_controller.rb +++ b/app/controllers/export_csv_controller.rb @@ -15,7 +15,7 @@ class ExportCsvController < ApplicationController def show params.require(:id) filename = params.fetch(:id) - export_id = filename.split('-')[2].split('.')[0] + export_id = filename.split('-')[-1].split('.')[0] export_initiated_by_user_id = 0 export_initiated_by_user_id = UserExport.where(id: export_id)[0].user_id unless UserExport.where(id: export_id).empty? export_csv_path = UserExport.get_download_path(filename) diff --git a/app/jobs/regular/export_csv_file.rb b/app/jobs/regular/export_csv_file.rb index b0349bbdd05..9b2d3192612 100644 --- a/app/jobs/regular/export_csv_file.rb +++ b/app/jobs/regular/export_csv_file.rb @@ -260,8 +260,12 @@ module Jobs def set_file_path - file_name_prefix = @file_name.split('_').join('-') - @file = UserExport.create(export_type: file_name_prefix, user_id: @current_user.id) + if @entity == "user_archive" + file_name_prefix = "#{@file_name.split('_').join('-')}-#{current_user.username}-#{Time.now.strftime("%y%m%d-%H%M%S")}" + else + file_name_prefix = "#{@file_name.split('_').join('-')}-#{Time.now.strftime("%y%m%d-%H%M%S")}" + end + @file = UserExport.create(file_name: file_name_prefix, user_id: @current_user.id) @file_name = "#{file_name_prefix}-#{@file.id}.csv" # ensure directory exists diff --git a/app/models/user_export.rb b/app/models/user_export.rb index 8b01198cfaf..b69a98a27cb 100644 --- a/app/models/user_export.rb +++ b/app/models/user_export.rb @@ -12,7 +12,7 @@ class UserExport < ActiveRecord::Base def self.remove_old_exports expired_exports = UserExport.where('created_at < ?', 2.days.ago).to_a expired_exports.map do |expired_export| - file_name = "#{expired_export.export_type}-#{expired_export.id}.csv.gz" + file_name = "#{expired_export.file_name}-#{expired_export.id}.csv.gz" file_path = "#{UserExport.base_directory}/#{file_name}" if File.exist?(file_path) @@ -33,7 +33,7 @@ end # Table name: user_exports # # id :integer not null, primary key -# export_type :string(255) not null +# file_name :string(255) not null # user_id :integer not null # created_at :datetime # updated_at :datetime diff --git a/db/migrate/20150115172310_rename_user_export_column.rb b/db/migrate/20150115172310_rename_user_export_column.rb new file mode 100644 index 00000000000..604e2b0b1ec --- /dev/null +++ b/db/migrate/20150115172310_rename_user_export_column.rb @@ -0,0 +1,5 @@ +class RenameUserExportColumn < ActiveRecord::Migration + def change + rename_column :user_exports, :export_type, :file_name + end +end diff --git a/spec/controllers/export_csv_controller_spec.rb b/spec/controllers/export_csv_controller_spec.rb index 16d3f599644..9975b2cf299 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.gz" } + let(:export_filename) { "user-archive-codinghorror-150115-234817-999.csv.gz" } context "while logged in as normal user" do @@ -16,7 +16,7 @@ describe ExportCsvController do it "should not enqueue export job if rate limit is reached" do Jobs::ExportCsvFile.any_instance.expects(:execute).never - UserExport.create(export_type: "user", user_id: @user.id) + UserExport.create(file_name: "user-archive-codinghorror-150116-003249", user_id: @user.id) xhr :post, :export_entity, entity: "user_archive", entity_type: "user" expect(response).not_to be_success end @@ -29,8 +29,8 @@ 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.gz" + file = UserExport.create(file_name: "user-archive-codinghorror-150116-003249", user_id: @user.id) + file_name = "user-archive-codinghorror-150116-003249-#{file.id}.csv.gz" controller.stubs(:render) export = UserExport.new() UserExport.expects(:get_download_path).with(file_name).returns(export) @@ -65,7 +65,7 @@ describe ExportCsvController do it "should not rate limit export for staff" do Jobs.expects(:enqueue).with(:export_csv_file, has_entries(entity: "staff_action", user_id: @admin.id)) - UserExport.create(export_type: "admin", user_id: @admin.id) + UserExport.create(file_name: "screened-email-150116-010145", user_id: @admin.id) xhr :post, :export_entity, entity: "staff_action", entity_type: "admin" expect(response).to be_success end @@ -73,8 +73,8 @@ 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.gz" + file = UserExport.create(file_name: "screened-email-150116-010145", user_id: @admin.id) + file_name = "screened-email-150116-010145-#{file.id}.csv.gz" controller.stubs(:render) export = UserExport.new() UserExport.expects(:get_download_path).with(file_name).returns(export)