jam-cloud/ruby/lib/jam_ruby/models/music_notation.rb

55 lines
1.6 KiB
Ruby

module JamRuby
class MusicNotation < ActiveRecord::Base
include JamRuby::S3ManagerMixin
NOTATION_FILE_DIR = "music_session_notations"
self.primary_key = 'id'
attr_accessible :file_url, :size, :file_name
belongs_to :user, :class_name => "JamRuby::User", foreign_key: :user_id
belongs_to :music_session, :class_name => "JamRuby::MusicSession", foreign_key: :music_session_id
mount_uploader :file_url, MusicNotationUploader
before_destroy :delete_s3_files
#validates :file_url, :presence => true
validates :size, :presence => true
def self.create(session_id, file, current_user)
music_notation = MusicNotation.new
music_notation.file_name = file.original_filename
music_notation.music_session_id = session_id
music_notation.user = current_user
music_notation.size = file.size
# save first to get a valid created_at time
music_notation.save!
# now that the model exists (created_at exists), we can save the file in the correct path
music_notation.file_url = file
music_notation.save
music_notation
end
def filename
MusicNotation.construct_filename(self)
end
def sign_url(expiration_time = 120)
s3_manager.sign_url(self[:file_url], {:expires => expiration_time, :secure => true})
end
private
def self.construct_filename(notation)
"#{NOTATION_FILE_DIR}/#{notation.created_at.strftime('%Y%m%d%H%M%S')}/#{notation.user.id}/#{notation.file_name}"
end
def delete_s3_files
s3_manager({:public => true}).delete(self[:file_url]) if self[:file_url]
end
end
end