Prompt for username after login
parent
5cb64f0fda
commit
427c19638c
@ -0,0 +1,34 @@
|
||||
class UsernamesController < ApplicationController
|
||||
|
||||
before_filter :ensure_authenticated!
|
||||
|
||||
def new
|
||||
@user = load_user
|
||||
end
|
||||
|
||||
def create
|
||||
@user = load_user
|
||||
|
||||
if @user.update(username: params[:user][:username].strip)
|
||||
redirect_to_profile(@user)
|
||||
else
|
||||
@invalid_username = true
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
def skip
|
||||
redirect_to_profile(current_user)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_user
|
||||
User.find(current_user.id)
|
||||
end
|
||||
|
||||
def redirect_to_profile(user)
|
||||
redirect_back_or_to profile_path(user)
|
||||
end
|
||||
|
||||
end
|
@ -0,0 +1,28 @@
|
||||
.container
|
||||
.row
|
||||
.col-md-12
|
||||
h1 Choose your username
|
||||
|
||||
br
|
||||
|
||||
p
|
||||
' Every Asciinema user gets a profile page at
|
||||
a href="#"
|
||||
| #{root_url}~
|
||||
strong username
|
||||
' .
|
||||
|
||||
= form_for @user, url: username_path, method: :post, html: { class: "username-form" } do |f|
|
||||
.form-group
|
||||
= f.label :username, 'Your username:'
|
||||
= f.text_field :username, class: 'form-control', 'data-behavior' => 'focus'
|
||||
- if @invalid_username
|
||||
br
|
||||
p.text-danger
|
||||
' Use only letters, digits and "-" character.
|
||||
' Examples:
|
||||
em johnny-knoxville, destroyer666
|
||||
.form-group
|
||||
= f.submit 'Continue', class: 'btn btn-primary'
|
||||
a.btn href=skip_username_path I'll do it later
|
||||
|
@ -0,0 +1,50 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe UsernamesController do
|
||||
|
||||
let(:user) { stub_model(User) }
|
||||
|
||||
before do
|
||||
login_as user
|
||||
allow(User).to receive(:find) { user }
|
||||
end
|
||||
|
||||
describe "#new" do
|
||||
subject { get :new }
|
||||
|
||||
it "renders 'new' template" do
|
||||
should render_template('new')
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
subject { post :create, user: { username: 'doppelganger' } }
|
||||
|
||||
|
||||
before do
|
||||
allow(user).to receive(:update).with(username: 'doppelganger') { success }
|
||||
subject
|
||||
end
|
||||
|
||||
context "when username is updated" do
|
||||
let(:success) { true }
|
||||
|
||||
it "redirects to user's profile" do
|
||||
should redirect_to(unnamed_user_path(user))
|
||||
end
|
||||
end
|
||||
|
||||
context "when username is not updated" do
|
||||
let(:success) { false }
|
||||
|
||||
it "displays error" do
|
||||
should render_template('new')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#skip" do
|
||||
pending
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in New Issue