asciinema.org/app/models/asciicast.rb

70 lines
2.1 KiB
Ruby
Raw Normal View History

2011-11-23 21:30:09 +00:00
class Asciicast < ActiveRecord::Base
MAX_DELAY = 5.0
mount_uploader :stdin, BasicUploader
mount_uploader :stdin_timing, BasicUploader
mount_uploader :stdout, BasicUploader
mount_uploader :stdout_timing, BasicUploader
serialize :snapshot, Snapshot
2013-07-08 22:55:31 +00:00
validates :stdout, :stdout_timing, :presence => true
validates :terminal_columns, :terminal_lines, :duration, :presence => true
2012-01-14 20:26:07 +00:00
belongs_to :user
has_many :comments, :order => :created_at, :dependent => :destroy
2012-04-06 12:06:40 +00:00
has_many :likes, :dependent => :destroy
2012-03-03 16:38:29 +00:00
2012-03-11 14:29:31 +00:00
scope :featured, where(:featured => true)
2012-08-22 18:13:31 +00:00
scope :popular, where("views_count > 0").order("views_count DESC")
scope :newest, order("created_at DESC")
2012-03-11 14:29:31 +00:00
2012-12-09 20:22:12 +00:00
scope(:newest_paginated, lambda do |page, per_page|
newest.includes(:user).page(page).per(per_page)
end)
scope(:popular_paginated, lambda do |page, per_page|
popular.includes(:user).page(page).per(per_page)
end)
before_create :assign_user, :unless => :user
2012-04-03 18:47:59 +00:00
attr_accessible :meta, :stdout, :stdout_timing, :stdin, :stdin_timing,
2012-05-04 19:21:05 +00:00
:title, :description, :time_compression
2012-03-04 14:18:09 +00:00
2012-03-04 19:28:30 +00:00
def self.assign_user(user_token, user)
where(:user_id => nil, :user_token => user_token).
update_all(:user_id => user.id, :user_token => nil)
end
2012-08-22 18:00:31 +00:00
def self.cache_key
timestamps = scoped.select(:updated_at).map { |o| o.updated_at.to_i }
Digest::MD5.hexdigest timestamps.join('/')
end
2012-01-14 20:26:07 +00:00
def meta=(file)
data = JSON.parse(file.tempfile.read)
self.username = data['username']
self.user_token = data['user_token']
2012-01-14 20:26:07 +00:00
self.duration = data['duration']
self.recorded_at = data['recorded_at']
self.title = data['title']
self.command = data['command']
self.shell = data['shell']
self.uname = data['uname']
self.terminal_lines = data['term']['lines']
self.terminal_columns = data['term']['columns']
self.terminal_type = data['term']['type']
end
2012-03-03 17:38:11 +00:00
def assign_user
if user_token.present?
if ut = UserToken.find_by_token(user_token)
self.user = ut.user
self.user_token = nil
end
end
end
2011-11-23 21:30:09 +00:00
end