Allow making asciicasts "private"

private-asciicasts
Marcin Kulik 10 years ago
parent ade94029d6
commit a30ee0d082

@ -29,6 +29,8 @@ class Asciicast < ActiveRecord::Base
featured.by_random.limit(n).includes(:user)
}
before_create :generate_secret_token
def self.cache_key
timestamps = scoped.select(:updated_at).map { |o| o.updated_at.to_i }
Digest::MD5.hexdigest timestamps.join('/')
@ -62,6 +64,10 @@ class Asciicast < ActiveRecord::Base
value ? super(value.strip[0...255]) : super
end
def self.generate_secret_token
SecureRandom.hex.to_i(16).to_s(36)
end
def stdout
return @stdout if @stdout
@stdout = Stdout::Buffered.new(get_stdout)
@ -103,4 +109,10 @@ class Asciicast < ActiveRecord::Base
Digest::SHA1.hexdigest(input)
end
def generate_secret_token
begin
self.secret_token = self.class.generate_secret_token
end while self.class.exists?(secret_token: secret_token)
end
end

@ -131,7 +131,7 @@ class User < ActiveRecord::Base
def generate_auth_token
begin
self[:auth_token] = self.class.generate_auth_token
end while User.exists?(auth_token: self[:auth_token])
end while self.class.exists?(auth_token: self[:auth_token])
end
end

@ -0,0 +1,11 @@
class AddSecretTokenToAsciicasts < ActiveRecord::Migration
def change
add_column :asciicasts, :secret_token, :string
Asciicast.find_each do |asciicast|
asciicast.update_attribute(:secret_token, SecureRandom.hex.to_i(16).to_s(36))
end
change_column :asciicasts, :secret_token, :string, null: false
end
end

@ -0,0 +1,5 @@
class AddPrivateToAsciicasts < ActiveRecord::Migration
def change
add_column :asciicasts, :private, :boolean, null: false, default: false
end
end

@ -0,0 +1,5 @@
class AddIndexOnAsciicastsPrivate < ActiveRecord::Migration
def change
add_index :asciicasts, :private
end
end

@ -0,0 +1,5 @@
class AddUniqueIndexToAsciicastsSecretToken < ActiveRecord::Migration
def change
add_index :asciicasts, :secret_token, unique: true
end
end

@ -59,11 +59,15 @@ ActiveRecord::Schema.define(version: 20150401161102) do
t.string "image"
t.integer "image_width"
t.integer "image_height"
t.string "secret_token", null: false
t.boolean "private", default: false, null: false
end
add_index "asciicasts", ["created_at"], name: "index_asciicasts_on_created_at", using: :btree
add_index "asciicasts", ["featured"], name: "index_asciicasts_on_featured", using: :btree
add_index "asciicasts", ["likes_count"], name: "index_asciicasts_on_likes_count", using: :btree
add_index "asciicasts", ["private"], name: "index_asciicasts_on_private", using: :btree
add_index "asciicasts", ["secret_token"], name: "index_asciicasts_on_secret_token", unique: true, using: :btree
add_index "asciicasts", ["user_id"], name: "index_asciicasts_on_user_id", using: :btree
add_index "asciicasts", ["views_count"], name: "index_asciicasts_on_views_count", using: :btree

Loading…
Cancel
Save