Rename user_token to api_token

openid
Marcin Kulik 10 years ago
parent 33dabc56b2
commit 13544d9d04

@ -1,8 +1,8 @@
class UserTokensController < ApplicationController
class ApiTokensController < ApplicationController
before_filter :ensure_authenticated!
def create
claimed_num = user_token_creator.create(current_user, params[:user_token])
claimed_num = api_token_creator.create(current_user, params[:api_token])
if claimed_num
redirect_to_profile(claimed_num)
@ -23,8 +23,8 @@ class UserTokensController < ApplicationController
redirect_to profile_path(current_user), :notice => notice
end
def user_token_creator
@user_token_creator ||= UserTokenCreator.new
def api_token_creator
@api_token_creator ||= ApiTokenCreator.new
end
end

@ -1,4 +1,4 @@
class UserToken < ActiveRecord::Base
class ApiToken < ActiveRecord::Base
belongs_to :user
validates :user, :token, :presence => true

@ -45,12 +45,12 @@ class AsciicastParams
token = meta['user_token']
if token.present?
user_token = UserToken.find_by_token(token)
api_token = ApiToken.find_by_token(token)
if user_token
attributes[:user_id] = user_token.user_id
if api_token
attributes[:user_id] = api_token.user_id
else
attributes[:user_token] = token
attributes[:api_token] = token
end
end
end

@ -1,10 +1,10 @@
class User < ActiveRecord::Base
has_many :user_tokens, :dependent => :destroy
has_many :api_tokens, :dependent => :destroy
has_many :asciicasts, :dependent => :destroy
has_many :comments, :dependent => :destroy
has_many :likes, :dependent => :destroy
has_many :user_tokens, :dependent => :destroy
has_many :api_tokens, :dependent => :destroy
has_many :asciicasts, :dependent => :destroy
has_many :comments, :dependent => :destroy
@ -38,8 +38,8 @@ class User < ActiveRecord::Base
nickname
end
def add_user_token(token)
user_tokens.where(:token => token).first_or_create
def add_api_token(token)
api_tokens.where(:token => token).first_or_create
end
def asciicast_count

@ -0,0 +1,25 @@
class ApiTokenCreator
def initialize(clock = DateTime)
@clock = clock
end
def create(user, token)
api_token = user.add_api_token(token)
if api_token.persisted?
update_asciicasts(api_token.token, user)
end
end
private
attr_reader :clock
def update_asciicasts(token, user)
Asciicast.where(:user_id => nil, :api_token => token).
update_all(:user_id => user.id, :api_token => nil,
:updated_at => clock.now)
end
end

@ -1,25 +0,0 @@
class UserTokenCreator
def initialize(clock = DateTime)
@clock = clock
end
def create(user, token)
user_token = user.add_user_token(token)
if user_token.persisted?
update_asciicasts(user_token.token, user)
end
end
private
attr_reader :clock
def update_asciicasts(token, user)
Asciicast.where(:user_id => nil, :user_token => token).
update_all(:user_id => user.id, :user_token => nil,
:updated_at => clock.now)
end
end

@ -23,7 +23,7 @@ Asciinema::Application.routes.draw do
get "/login" => "sessions#new"
get "/logout" => "sessions#destroy"
get "/connect/:user_token" => "user_tokens#create"
get "/connect/:api_token" => "api_tokens#create"
resource :user

@ -0,0 +1,6 @@
class RenameUserTokensToApiTokens < ActiveRecord::Migration
def change
rename_table :user_tokens, :api_tokens
rename_column :asciicasts, :user_token, :api_token
end
end

@ -11,7 +11,20 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20131022171709) do
ActiveRecord::Schema.define(version: 20140209133703) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "api_tokens", force: true do |t|
t.integer "user_id", null: false
t.string "token", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "api_tokens", ["token"], name: "index_api_tokens_on_token", using: :btree
add_index "api_tokens", ["user_id"], name: "index_api_tokens_on_user_id", using: :btree
create_table "asciicasts", force: true do |t|
t.integer "user_id"
@ -30,7 +43,7 @@ ActiveRecord::Schema.define(version: 20131022171709) do
t.string "stdin_timing"
t.string "stdout_data"
t.string "stdout_timing"
t.string "user_token"
t.string "api_token"
t.text "description"
t.boolean "featured", default: false
t.string "username"
@ -43,12 +56,12 @@ ActiveRecord::Schema.define(version: 20131022171709) do
t.string "user_agent"
end
add_index "asciicasts", ["api_token"], name: "index_asciicasts_on_api_token", using: :btree
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", ["recorded_at"], name: "index_asciicasts_on_recorded_at", using: :btree
add_index "asciicasts", ["user_id"], name: "index_asciicasts_on_user_id", using: :btree
add_index "asciicasts", ["user_token"], name: "index_asciicasts_on_user_token", using: :btree
add_index "asciicasts", ["views_count"], name: "index_asciicasts_on_views_count", using: :btree
create_table "comments", force: true do |t|
@ -74,16 +87,6 @@ ActiveRecord::Schema.define(version: 20131022171709) do
add_index "likes", ["user_id", "asciicast_id"], name: "index_likes_on_user_id_and_asciicast_id", using: :btree
add_index "likes", ["user_id"], name: "index_likes_on_user_id", using: :btree
create_table "user_tokens", force: true do |t|
t.integer "user_id", null: false
t.string "token", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "user_tokens", ["token"], name: "index_user_tokens_on_token", using: :btree
add_index "user_tokens", ["user_id"], name: "index_user_tokens_on_user_id", using: :btree
create_table "users", force: true do |t|
t.string "provider"
t.string "uid"

@ -1,23 +1,23 @@
require 'spec_helper'
describe UserTokensController do
describe ApiTokensController do
let(:user_token_creator) { double('user_token_creator') }
let(:api_token_creator) { double('api_token_creator') }
before do
allow(controller).to receive(:user_token_creator) { user_token_creator }
allow(controller).to receive(:api_token_creator) { api_token_creator }
end
describe '#create' do
let(:claimed_num) { 0 }
let(:user_token) { build(:user_token, :user => nil) }
let(:api_token) { build(:api_token, :user => nil) }
let(:user) { create(:user) }
before do
login_as user
allow(user_token_creator).to receive(:create).
with(user, user_token.token) { claimed_num }
get :create, user_token: user_token.token
allow(api_token_creator).to receive(:create).
with(user, api_token.token) { claimed_num }
get :create, api_token: api_token.token
end
context 'for guest user' do

@ -1,7 +1,7 @@
# Read about factories at http://github.com/thoughtbot/factory_girl
FactoryGirl.define do
factory :user_token do
factory :api_token do
association :user
sequence(:token) do |n|
"2b4b4e02-6613-11e1-9be5-#{Kernel.format('%012i', n)}"

@ -0,0 +1,7 @@
require 'spec_helper'
describe ApiToken do
it "has valid factory" do
expect(build(:api_token)).to be_valid
end
end

@ -44,7 +44,7 @@ describe AsciicastParams do
}
let(:expected_attrs) { required_attrs.merge({
:user_token => token,
:api_token => token,
:uname => 'Linux 3.9.9-302.fc19.x86_64 #1 SMP ' +
'Sat Jul 6 13:41:07 UTC 2013 x86_64'
}) }
@ -56,7 +56,7 @@ describe AsciicastParams do
it { should eq(expected_attrs) }
end
context "when no user_token given" do
context "when no api_token given" do
let(:meta_file) { fixture_file_upload('spec/fixtures/meta-no-token.json',
'application/json') }
let(:expected_attrs) { required_attrs }
@ -64,20 +64,20 @@ describe AsciicastParams do
it { should eq(expected_attrs) }
end
context "when user_token given" do
context "when api_token given" do
let(:meta_file) { fixture_file_upload('spec/fixtures/meta.json',
'application/json') }
context "and user with this token exists" do
let(:user) { create(:user) }
let!(:user_token) { create(:user_token, token: token, user: user) }
let!(:api_token) { create(:api_token, token: token, user: user) }
let(:expected_attrs) { required_attrs.merge(user_id: user.id) }
it { should eq(expected_attrs) }
end
context "and user with this token doesn't exist" do
let(:expected_attrs) { required_attrs.merge(user_token: token) }
let(:expected_attrs) { required_attrs.merge(api_token: token) }
it { should eq(expected_attrs) }
end

@ -86,27 +86,27 @@ describe User do
end
end
describe '#add_user_token' do
describe '#add_api_token' do
let(:user) { build(:user) }
before { user.save }
context "when user doesn't have given token" do
let(:token) { attributes_for(:user_token)[:token] }
let(:token) { attributes_for(:api_token)[:token] }
it 'returns created UserToken' do
ut = user.add_user_token(token)
expect(ut).to be_kind_of(UserToken)
it 'returns created ApiToken' do
ut = user.add_api_token(token)
expect(ut).to be_kind_of(ApiToken)
expect(ut.id).not_to be(nil)
end
end
context "when user doesn't have given token" do
let(:existing_token) { create(:user_token, :user => user) }
let(:existing_token) { create(:api_token, :user => user) }
let(:token) { existing_token.token }
it 'returns existing UserToken' do
ut = user.add_user_token(token)
it 'returns existing ApiToken' do
ut = user.add_api_token(token)
expect(ut).to eq(existing_token)
end
end

@ -1,7 +0,0 @@
require 'spec_helper'
describe UserToken do
it "has valid factory" do
expect(build(:user_token)).to be_valid
end
end

@ -1,11 +1,11 @@
require 'spec_helper'
describe 'connect routing' do
it 'routes /connect/:user_token to user_tokens#create for user_token' do
it 'routes /connect/:api_token to api_tokens#create for api_token' do
expect({ :get => '/connect/jolka-misio' }).to route_to(
:controller => 'user_tokens',
:controller => 'api_tokens',
:action => 'create',
:user_token => 'jolka-misio'
:api_token => 'jolka-misio'
)
end
end

@ -1,21 +1,21 @@
require 'spec_helper'
describe UserTokenCreator do
describe ApiTokenCreator do
let(:user_token_creator) { described_class.new(clock) }
let(:api_token_creator) { described_class.new(clock) }
let(:clock) { double('clock', now: now) }
let(:now) { Time.now }
describe '#create' do
let(:user) { create(:user) }
let(:token) { 'a-toh-can' }
let(:user_token) { double('user_token', token: token,
let(:api_token) { double('api_token', token: token,
persisted?: persisted) }
subject { user_token_creator.create(user, token) }
subject { api_token_creator.create(user, token) }
before do
allow(user).to receive(:add_user_token) { user_token }
allow(user).to receive(:add_api_token) { api_token }
end
context "when token was persisted" do
@ -23,13 +23,13 @@ describe UserTokenCreator do
let(:old_updated_at) { 3.days.ago }
let!(:asciicast_1) { create(:asciicast, :user => nil,
:user_token => token,
:api_token => token,
:updated_at => old_updated_at) }
let!(:asciicast_2) { create(:asciicast, :user => nil,
:user_token => 'please',
:api_token => 'please',
:updated_at => old_updated_at) }
let!(:asciicast_3) { create(:asciicast, :user => create(:user),
:user_token => 'nonono',
:api_token => 'nonono',
:updated_at => old_updated_at) }
it { should be(1) }
@ -49,9 +49,9 @@ describe UserTokenCreator do
asciicast_1.reload; asciicast_2.reload; asciicast_3.reload
expect(asciicast_1.user_token).to be(nil)
expect(asciicast_2.user_token).not_to be(nil)
expect(asciicast_3.user_token).not_to be(nil)
expect(asciicast_1.api_token).to be(nil)
expect(asciicast_2.api_token).not_to be(nil)
expect(asciicast_3.api_token).not_to be(nil)
end
it 'updates the updated_at field on all matching asciicasts' do
Loading…
Cancel
Save