module Beam::UploadControllerMethods
Attributes
model[RW]
upload_method[RW]
Public Class Methods
included(base)
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 19 def self.included(base) private # hook for post successful upload, in case additional parameters need to be send def additional_params_on_success {} end def zip_file?(file) ["application/zip", "application/x-zip-compressed", "application/octet-stream"].include?(file.content_type) && file.original_filename.include?(".zip") end def file_upload_status(params) file_obj = params[:upload] ? params[:upload][:upload_file] : params[:files][0] status = file_obj ? file_status(file_obj) : not_file_status status[:message] = status[:num_errors] && status[:num_errors].zero? ? status[:success_msg] : status[:error_msg] status[:status] = status[:message] == status[:success_msg] ? "success" : "failure" status[:status_code] = status[:message] == status[:success_msg] ? 200 : 500 status end def file_status(file) zip_file?(file) ? csv_file_status(file) : not_csv_file_status end def not_file_status {error_msg: "No file detected, please upload a file"} end def csv_file_status(file) response = upload_file(file) upload_status_by_response(response) end def upload_file(file) require 'fileutils' @model ||= controller_name.classify.constantize tmp = file.tempfile file_path = File.join(Beam.config[:data_upload_path], file.original_filename) FileUtils.cp_r tmp.path, file_path, remove_destination: true @upload_method ? @model.upload_file(file.original_filename, Beam.config[:data_upload_path], @upload_method) : @model.upload_file(file.original_filename, Beam.config[:data_upload_path]) end def not_csv_file_status {error_msg: "Only zipped csv files are allowed"} end def upload_status_by_response(response) if response[:status] == 500 failure_status else response[:errors].zero? ? upload_without_queue_success_status : upload_without_queue_failure_status(response[:errors]) end end def failure_status {num_errors: 1, controller_name: self.controller_name, error_msg: "Please check the format of zipped file"} end def upload_through_queue_status(errors) { num_errors: nil, controller_name: self.controller_name, success_msg: "In Progress" } end def upload_without_queue_success_status { num_errors: 0, controller_name: self.controller_name, success_msg: "File uploaded successfully" } end def upload_without_queue_failure_status(errors) { num_errors: errors, controller_name: self.controller_name, error_msg: "There are #{errors} row(s) with errors while uploading config file." + " Please check whether you have selected correct module or you have valid data in the file." } end end
Public Instance Methods
additional_params_on_success()
click to toggle source
hook for post successful upload, in case additional parameters need to be send
# File lib/beam/upload_controller_methods.rb, line 23 def additional_params_on_success {} end
csv_file_status(file)
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 49 def csv_file_status(file) response = upload_file(file) upload_status_by_response(response) end
error_file()
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 15 def error_file send_file "#{Beam.config[:data_upload_path]}/errors_#{self.controller_name.downcase}.csv" end
failure_status()
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 80 def failure_status {num_errors: 1, controller_name: self.controller_name, error_msg: "Please check the format of zipped file"} end
file_status(file)
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 41 def file_status(file) zip_file?(file) ? csv_file_status(file) : not_csv_file_status end
file_upload_status(params)
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 31 def file_upload_status(params) file_obj = params[:upload] ? params[:upload][:upload_file] : params[:files][0] status = file_obj ? file_status(file_obj) : not_file_status status[:message] = status[:num_errors] && status[:num_errors].zero? ? status[:success_msg] : status[:error_msg] status[:status] = status[:message] == status[:success_msg] ? "success" : "failure" status[:status_code] = status[:message] == status[:success_msg] ? 200 : 500 status end
not_csv_file_status()
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 66 def not_csv_file_status {error_msg: "Only zipped csv files are allowed"} end
not_file_status()
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 45 def not_file_status {error_msg: "No file detected, please upload a file"} end
upload()
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 5 def upload @upload_status = file_upload_status(params) @upload_status.merge!(additional_params_on_success) if @upload_status[:success_msg] respond_to do |format| format.json { render json: @upload_status } format.html { redirect_to :back } end end
upload_file(file)
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 54 def upload_file(file) require 'fileutils' @model ||= controller_name.classify.constantize tmp = file.tempfile file_path = File.join(Beam.config[:data_upload_path], file.original_filename) FileUtils.cp_r tmp.path, file_path, remove_destination: true @upload_method ? @model.upload_file(file.original_filename, Beam.config[:data_upload_path], @upload_method) : @model.upload_file(file.original_filename, Beam.config[:data_upload_path]) end
upload_status_by_response(response)
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 70 def upload_status_by_response(response) if response[:status] == 500 failure_status else response[:errors].zero? ? upload_without_queue_success_status : upload_without_queue_failure_status(response[:errors]) end end
upload_through_queue_status(errors)
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 84 def upload_through_queue_status(errors) { num_errors: nil, controller_name: self.controller_name, success_msg: "In Progress" } end
upload_without_queue_failure_status(errors)
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 100 def upload_without_queue_failure_status(errors) { num_errors: errors, controller_name: self.controller_name, error_msg: "There are #{errors} row(s) with errors while uploading config file." + " Please check whether you have selected correct module or you have valid data in the file." } end
upload_without_queue_success_status()
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 92 def upload_without_queue_success_status { num_errors: 0, controller_name: self.controller_name, success_msg: "File uploaded successfully" } end
zip_file?(file)
click to toggle source
# File lib/beam/upload_controller_methods.rb, line 27 def zip_file?(file) ["application/zip", "application/x-zip-compressed", "application/octet-stream"].include?(file.content_type) && file.original_filename.include?(".zip") end