Introduce panda flavour has_panda_original_file method for setting up panda paperclip original_file attachments
This commit is contained in:
@@ -1,5 +1,12 @@
|
|||||||
module Dunlop::SourceFileModel
|
module Dunlop::SourceFileModel
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
PAPERCLIP_S3_HEADERS = Proc.new do |attachment|
|
||||||
|
if attachment.persisted?
|
||||||
|
{}
|
||||||
|
else
|
||||||
|
{'Content-Disposition' => %|attachment; filename="#{attachment.pre_set_original_file&.original_filename.presence || attachment.class.name + Time.now.getutc.iso8601}"|}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
include Dunlop::SourceFileModel::ConversionHelpers
|
include Dunlop::SourceFileModel::ConversionHelpers
|
||||||
|
|
||||||
@@ -9,7 +16,8 @@ module Dunlop::SourceFileModel
|
|||||||
attr_accessor :working_file
|
attr_accessor :working_file
|
||||||
belongs_to :creator, polymorphic: true, optional: true
|
belongs_to :creator, polymorphic: true, optional: true
|
||||||
|
|
||||||
mount_uploader :original_file, Dunlop::SourceFileUploader
|
mount_uploader :original_file, Dunlop::SourceFileUploader unless defined?(Paperclip) # CarrierWave still default.
|
||||||
|
|
||||||
# used by dunlop-file_transfer
|
# used by dunlop-file_transfer
|
||||||
def default_file
|
def default_file
|
||||||
original_file
|
original_file
|
||||||
@@ -209,6 +217,43 @@ module Dunlop::SourceFileModel
|
|||||||
classes.map{|klass| [klass.model_name.human, klass.name]}
|
classes.map{|klass| [klass.model_name.human, klass.name]}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def has_panda_original_file(options = {})
|
||||||
|
environments = Array.wrap(options.delete(:environments)) || %w[production staging]
|
||||||
|
if environments.include?(Rails.env)
|
||||||
|
has_attached_file :original_file,
|
||||||
|
#url: '/system/organization/:id/logos/:style.:extension',
|
||||||
|
storage: :s3,
|
||||||
|
path: ':rails_env/:class/:id/:filename',
|
||||||
|
hash_secret: '8da20e64945d2164c31357c6052be2a5',
|
||||||
|
s3_credentials: {
|
||||||
|
bucket: ENV['S3_FILES_BUCKET'],
|
||||||
|
access_key_id: ENV['S3_ACCESS_KEY_ID'],
|
||||||
|
secret_access_key: ENV['S3_SECRET_ACCESS_KEY'],
|
||||||
|
s3_region: ENV['AWS_REGION'],
|
||||||
|
},
|
||||||
|
s3_headers: paperclip_s3_headers,
|
||||||
|
s3_permissions: :private,
|
||||||
|
s3_protocol: :https
|
||||||
|
else
|
||||||
|
has_attached_file :original_file,
|
||||||
|
url: '/system/:class/:attachment/:id/:filename',
|
||||||
|
hash_secret: 'dunlop-source-files-for-panda'
|
||||||
|
end
|
||||||
|
do_not_validate_attachment_file_type :original_file
|
||||||
|
|
||||||
|
attr_accessor :pre_set_original_file
|
||||||
|
# overload original_file assignment since on attachment initialization the file is not yet 'known' for the s3 headers
|
||||||
|
define_method :original_file= do |file|
|
||||||
|
self.pre_set_original_file = file
|
||||||
|
original_file.assign(file)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def paperclip_s3_headers
|
||||||
|
binding.pry
|
||||||
|
PAPERCLIP_S3_HEADERS
|
||||||
|
end
|
||||||
|
|
||||||
def activate_dunlop!
|
def activate_dunlop!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
module Dunlop::TargetFileModel
|
module Dunlop::TargetFileModel
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
extend Memoist
|
extend Memoist
|
||||||
|
PAPERCLIP_S3_HEADERS = Proc.new do |attachment|
|
||||||
|
if attachment.persisted?
|
||||||
|
{}
|
||||||
|
else
|
||||||
|
{'Content-Disposition' => %|attachment; filename="#{attachment.target_basename}"|} # can be resource based and only available on initialization. Therefore persisted?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
included do
|
included do
|
||||||
include Dunlop::Loggable
|
include Dunlop::Loggable
|
||||||
@@ -8,7 +15,7 @@ module Dunlop::TargetFileModel
|
|||||||
attr_accessor :working_file, :original_file
|
attr_accessor :working_file, :original_file
|
||||||
attr_accessor :resource
|
attr_accessor :resource
|
||||||
|
|
||||||
mount_uploader :original_file, Dunlop::TargetFileUploader
|
mount_uploader :original_file, Dunlop::TargetFileUploader unless defined?(Paperclip) # CarrierWave still default.
|
||||||
# used by dunlop-file_transfer
|
# used by dunlop-file_transfer
|
||||||
def default_file
|
def default_file
|
||||||
original_file
|
original_file
|
||||||
@@ -213,6 +220,35 @@ module Dunlop::TargetFileModel
|
|||||||
def builder_class
|
def builder_class
|
||||||
"#{name}CsvBuilder".safe_constantize || ::CsvBuilder
|
"#{name}CsvBuilder".safe_constantize || ::CsvBuilder
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def paperclip_s3_headers
|
||||||
|
PAPERCLIP_S3_HEADERS
|
||||||
|
end
|
||||||
|
|
||||||
|
def has_panda_original_file(options = {})
|
||||||
|
environments = Array.wrap(options.delete(:environments)) || %w[production staging]
|
||||||
|
if environments.include?(Rails.env)
|
||||||
|
has_attached_file :original_file,
|
||||||
|
#url: '/system/organization/:id/logos/:style.:extension',
|
||||||
|
storage: :s3,
|
||||||
|
path: ':rails_env/:class/:id/:filename',
|
||||||
|
hash_secret: '8da20e64945d2164c31357c6052be2a5',
|
||||||
|
s3_credentials: {
|
||||||
|
bucket: ENV['S3_FILES_BUCKET'],
|
||||||
|
access_key_id: ENV['S3_ACCESS_KEY_ID'],
|
||||||
|
secret_access_key: ENV['S3_SECRET_ACCESS_KEY'],
|
||||||
|
s3_region: ENV['AWS_REGION'],
|
||||||
|
},
|
||||||
|
s3_headers: paperclip_s3_headers,
|
||||||
|
s3_permissions: :private,
|
||||||
|
s3_protocol: :https
|
||||||
|
else
|
||||||
|
has_attached_file :original_file,
|
||||||
|
url: '/system/:class/:attachment/:id/:filename',
|
||||||
|
hash_secret: 'dunlop-target-files-for-panda'
|
||||||
|
end
|
||||||
|
do_not_validate_attachment_file_type :original_file
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
Reference in New Issue
Block a user