Merge pull request #881 from sgmap/add_uuid_to_logo_and_signature

AttestationTemplate: store logo and signature with uuid
This commit is contained in:
LeSim 2017-10-19 15:37:22 +02:00 committed by GitHub
commit 9cf02f77d0
7 changed files with 68 additions and 6 deletions

View file

@ -3,8 +3,8 @@ class AttestationTemplate < ApplicationRecord
belongs_to :procedure belongs_to :procedure
mount_uploader :logo, AttestationTemplateImageUploader mount_uploader :logo, AttestationTemplateLogoUploader
mount_uploader :signature, AttestationTemplateImageUploader mount_uploader :signature, AttestationTemplateSignatureUploader
validate :logo_signature_file_size validate :logo_signature_file_size
validates :footer, length: { maximum: 190 } validates :footer, length: { maximum: 190 }

View file

@ -1,4 +1,4 @@
class AttestationTemplateImageUploader < BaseUploader class AttestationTemplateLogoUploader < BaseUploader
def root def root
File.join(Rails.root, 'public') File.join(Rails.root, 'public')
end end
@ -23,4 +23,16 @@ class AttestationTemplateImageUploader < BaseUploader
def extension_white_list def extension_white_list
%w(jpg jpeg png) %w(jpg jpeg png)
end end
def filename
if file.present?
"attestation-template-logo-#{secure_token}.#{file.extension.downcase}"
end
end
private
def secure_token
model.logo_secure_token ||= SecureRandom.uuid
end
end end

View file

@ -0,0 +1,38 @@
class AttestationTemplateSignatureUploader < BaseUploader
def root
File.join(Rails.root, 'public')
end
# Choose what kind of storage to use for this uploader:
if Features.remote_storage
storage :fog
else
storage :file
end
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
unless Features.remote_storage
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
def extension_white_list
%w(jpg jpeg png)
end
def filename
if file.present?
"attestation-template-signature-#{secure_token}.#{file.extension.downcase}"
end
end
private
def secure_token
model.signature_secure_token ||= SecureRandom.uuid
end
end

View file

@ -0,0 +1,5 @@
class AddLogoSecureTokenColumnToAttestationTemplate < ActiveRecord::Migration[5.0]
def change
add_column :attestation_templates, :logo_secure_token, :string
end
end

View file

@ -0,0 +1,5 @@
class AddSignatureSecureTokenColumnToAttestationTemplate < ActiveRecord::Migration[5.0]
def change
add_column :attestation_templates, :signature_secure_token, :string
end
end

View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20171019085515) do ActiveRecord::Schema.define(version: 20171019113610) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -81,6 +81,8 @@ ActiveRecord::Schema.define(version: 20171019085515) do
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.integer "procedure_id" t.integer "procedure_id"
t.string "logo_secure_token"
t.string "signature_secure_token"
t.index ["procedure_id"], name: "index_attestation_templates_on_procedure_id", unique: true, using: :btree t.index ["procedure_id"], name: "index_attestation_templates_on_procedure_id", unique: true, using: :btree
end end

View file

@ -2,8 +2,8 @@ describe AttestationTemplate, type: :model do
describe 'validate' do describe 'validate' do
let(:logo_size) { AttestationTemplate::FILE_MAX_SIZE_IN_MB.megabyte } let(:logo_size) { AttestationTemplate::FILE_MAX_SIZE_IN_MB.megabyte }
let(:signature_size) { AttestationTemplate::FILE_MAX_SIZE_IN_MB.megabyte } let(:signature_size) { AttestationTemplate::FILE_MAX_SIZE_IN_MB.megabyte }
let(:fake_logo) { double(AttestationTemplateImageUploader, file: double(size: logo_size)) } let(:fake_logo) { double(AttestationTemplateLogoUploader, file: double(size: logo_size)) }
let(:fake_signature) { double(AttestationTemplateImageUploader, file: double(size: signature_size)) } let(:fake_signature) { double(AttestationTemplateSignatureUploader, file: double(size: signature_size)) }
let(:attestation_template) { AttestationTemplate.new } let(:attestation_template) { AttestationTemplate.new }
before do before do