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

48 lines
1.6 KiB
Ruby
Raw Normal View History

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 dont 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