48 lines
1.6 KiB
Ruby
48 lines
1.6 KiB
Ruby
module JamRuby
|
||
class UserAsset < ActiveRecord::Base
|
||
include JamRuby::S3ManagerMixin
|
||
|
||
self.table_name = "user_assets"
|
||
self.primary_key = 'id'
|
||
|
||
belongs_to :user, :inverse_of => :user_assets, :class_name => "JamRuby::User"
|
||
validates :asset_type, :filename, :uri, presence: true
|
||
|
||
#TODO: validate asset_type
|
||
#asset_type - a varchar - but effectively an enum in the ruby code. We should, but don’t have to set the list of valid types here. if we do, we might consider actually using Rails config instead of in the record code.
|
||
|
||
before_validation(on: :create) do
|
||
self.created_at ||= Time.now
|
||
self.id = SecureRandom.uuid
|
||
self.uri = "/user_assets/#{self.asset_type}/#{created_at.strftime('%Y-%m-%d')}/#{filename_no_ext}-#{self.id}#{filename_ext}"
|
||
end
|
||
|
||
def filename_no_ext
|
||
File.basename(filename, '.*')
|
||
end
|
||
|
||
def filename_ext
|
||
File.extname(filename)
|
||
end
|
||
|
||
def read_url
|
||
s3_manager.sign_url(self[:uri], { :expires => Time.now + 2.minutes,
|
||
:'response_content_type' => 'application/octet-stream'}, :read)
|
||
end
|
||
|
||
def write_url
|
||
s3_manager.sign_url(self[:uri], { :expires => Rails.application.config.user_asset_signed_url_timeout,
|
||
:'response_content_type' => 'application/octet-stream'}, :write)
|
||
end
|
||
|
||
private
|
||
|
||
def s3_bucket
|
||
s3 = AWS::S3.new(:access_key_id => Rails.application.config.aws_access_key_id,
|
||
:secret_access_key => Rails.application.config.aws_secret_access_key)
|
||
s3.buckets[Rails.application.config.aws_bucket]
|
||
end
|
||
|
||
end
|
||
end
|