Prompt for username after login
This commit is contained in:
parent
5cb64f0fda
commit
427c19638c
@ -16,12 +16,10 @@ $(function() {
|
||||
this.select();
|
||||
});
|
||||
|
||||
$('input[data-behavior=focus]:first').focus();
|
||||
$('input[data-behavior=focus]:first').focus().select();
|
||||
|
||||
$('#embed-link').click(function(e) {
|
||||
e.preventDefault();
|
||||
$('.embed-box').slideDown('fast');
|
||||
});
|
||||
|
||||
$('.login-form input[type=email]').focus();
|
||||
});
|
||||
|
@ -3,6 +3,10 @@
|
||||
width: 250px
|
||||
margin-right: 10px
|
||||
|
||||
.username-form
|
||||
input#user_username
|
||||
width: 200px
|
||||
|
||||
.profile-page
|
||||
.cinema
|
||||
.user-avatar
|
||||
|
@ -5,7 +5,7 @@ class SessionsController < ApplicationController
|
||||
|
||||
if user
|
||||
self.current_user = user
|
||||
redirect_back_or_to profile_path(user), notice: login_notice(user)
|
||||
redirect_to_profile(user)
|
||||
else
|
||||
render :error
|
||||
end
|
||||
@ -22,6 +22,14 @@ class SessionsController < ApplicationController
|
||||
EmailLoginService.new
|
||||
end
|
||||
|
||||
def redirect_to_profile(user)
|
||||
if user.username
|
||||
redirect_back_or_to profile_path(user), notice: login_notice(user)
|
||||
else
|
||||
redirect_to new_username_path, notice: login_notice(user)
|
||||
end
|
||||
end
|
||||
|
||||
def login_notice(user)
|
||||
if user.first_login?
|
||||
"Welcome to Asciinema!"
|
||||
|
34
app/controllers/usernames_controller.rb
Normal file
34
app/controllers/usernames_controller.rb
Normal file
@ -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
|
@ -43,7 +43,7 @@ class UserPagePresenter
|
||||
count = h.pluralize(user.asciicast_count, 'asciicast')
|
||||
"You have recorded #{count}"
|
||||
else
|
||||
"You haven't recorded anything yet"
|
||||
"Record your first asciicast"
|
||||
end
|
||||
else
|
||||
if user.asciicast_count > 0
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
= form_tag login_path, class: "form-inline login-form" do
|
||||
.form-group
|
||||
input.form-control.email name="email" type="email" placeholder="Enter email"
|
||||
input.form-control.email name="email" type="email" placeholder="Enter email" data-behavior="focus"
|
||||
button.btn.btn-primary type="submit" Log in
|
||||
|
||||
- if @invalid_email
|
||||
|
28
app/views/usernames/new.html.slim
Normal file
28
app/views/usernames/new.html.slim
Normal file
@ -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
|
||||
|
@ -1,7 +1,7 @@
|
||||
markdown:
|
||||
Make sure you have asciinema recorder [installed](#{docs_path(:installation)}).
|
||||
|
||||
To start recording go to your terminal and run the following command:
|
||||
To start recording run the following command in your terminal:
|
||||
|
||||
$ asciinema rec
|
||||
|
||||
|
@ -35,6 +35,10 @@ Rails.application.routes.draw do
|
||||
|
||||
resource :user
|
||||
|
||||
resource :username do
|
||||
get :skip
|
||||
end
|
||||
|
||||
root 'home#show'
|
||||
|
||||
get '/about' => 'pages#show', page: :about, as: :about
|
||||
|
@ -25,9 +25,24 @@ describe SessionsController do
|
||||
expect(controller).to have_received(:current_user=).with(user)
|
||||
end
|
||||
|
||||
it "redirects to the user's profile with a notice" do
|
||||
it "sets a notice" do
|
||||
expect(flash[:notice]).to_not be_blank
|
||||
should redirect_to(unnamed_user_path(user))
|
||||
end
|
||||
|
||||
context "when user has username" do
|
||||
let(:user) { User.new(username: "foobar") }
|
||||
|
||||
it "redirects to user's profile" do
|
||||
should redirect_to(public_profile_path(username: "foobar"))
|
||||
end
|
||||
end
|
||||
|
||||
context "when user has no username" do
|
||||
let(:user) { User.new }
|
||||
|
||||
it "redirects to new username page" do
|
||||
should redirect_to(new_username_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
50
spec/controllers/usernames_controller_spec.rb
Normal file
50
spec/controllers/usernames_controller_spec.rb
Normal file
@ -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
Block a user