Skip to content

Commit

Permalink
25_rails
Browse files Browse the repository at this point in the history
  • Loading branch information
brockcp committed Oct 30, 2017
1 parent 8aef9ca commit a61fd0a
Show file tree
Hide file tree
Showing 13 changed files with 156 additions and 2 deletions.
2 changes: 2 additions & 0 deletions app/assets/javascripts/sessions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Place all the behaviors and hooks related to the matching controller here.
// All this logic will automatically be available in application.js.
6 changes: 6 additions & 0 deletions app/assets/stylesheets/sessions.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Place all the styles related to the Sessions controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: https://sass-lang.com/
.remember-checkbox{
margin-left: 10px;
}
1 change: 1 addition & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
include SessionsHelper
end
23 changes: 23 additions & 0 deletions app/controllers/sessions_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
class SessionsController < ApplicationController
def new
end

def create
user = User.find_by(email: params[:session][:email].downcase)

if user && user.authenticate(params[:session][:password])
create_session(user)
flash[:notice] = "Welcome, #{user.name}!"
redirect_to root_path
else
flash.now[:alert] = 'Invalid email/password combination'
render :new
end
end

def destroy
destroy_session(current_user)
flash[:notice] = "You've been signed out, come back soon!"
redirect_to root_path
end
end
1 change: 1 addition & 0 deletions app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ def create

if @user.save
flash[:notice] = "Welcome to Bloccit #{@user.name}!"
create_session(@user)
redirect_to root_path
else
flash.now[:alert] = "There was an error creating your account. Please try again."
Expand Down
14 changes: 14 additions & 0 deletions app/helpers/sessions_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module SessionsHelper
def create_session(user)
session[:user_id] = user.id
end

def destroy_session(user)
session[:user_id] = nil
end

def current_user
User.find_by(id: session[:user_id])
end

end
8 changes: 6 additions & 2 deletions app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,12 @@
<li><%= link_to "Bloccit", root_path %></li>
<li><%= link_to "Topics", topics_path %></li>
<li><%= link_to "About", about_path %></li>
<li class="pull-right"><%= link_to "Sign Up", new_user_path %></li>

<% if current_user %>
<li class="pull-right"><%= link_to "#{current_user.name} -Sign Out", session_path(current_user), method: :delete %></li>
<% else %>
<li class="pull-right"><%= link_to "Sign In", new_session_path %></li>
<li class="pull-right"><%= link_to "Sign Up", new_user_path %></li>
<% end %>
</ul>

<% if flash[:notice] %>
Expand Down
22 changes: 22 additions & 0 deletions app/views/sessions/new.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<h2>Sign in</h2>

<div class="row">
<div class="col-md-8">
<%= form_for :session, url: sessions_path do |f| %>
<div class="form-group">
<%= f.label :email %>
<%= f.email_field :email, autofocus: true, class: 'form-control', placeholder: "Enter email" %>
</div>
<div class="form-group">
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control', placeholder: "Enter password" %>
</div>
<div class="form-group">
<%= f.label :remember_me, class: 'checkbox' do %>
Remember Me <%= f.check_box :remember_me, class: "remember-checkbox" %>
<% end %>
<%= f.submit "Sign in", class: 'btn btn-success' %>
</div>
<% end %>
</div>
</div>
1 change: 1 addition & 0 deletions app/views/welcome/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<h1>Bloccit</h1>
<p>Bloccit is a resource for sharing links with your friends!</p>
<p>
<%= link_to "Sign In", new_session_path %> or
<%= link_to "Sign Up", new_user_path, class: 'btn btn-primary' %> today!
</p>
</div>
Expand Down
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
end

resources :users, only: [:new, :create]
resources :sessions, only: [:new, :create, :destroy]

get 'about' => 'welcome#about'

Expand Down
60 changes: 60 additions & 0 deletions spec/controllers/sessions_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
require 'rails_helper'

RSpec.describe SessionsController, type: :controller do
let(:my_user) { User.create!(name: "Blochead", email: "[email protected]", password: "password") }

describe "GET new" do
it "returns http success" do
get :new
expect(response).to have_http_status(:success)
end
end

describe "POST sessions" do
it "returns http success" do
post :create, params: { session: { email: my_user.email } }
expect(response).to have_http_status(:success)
end

it "initializes a session" do
post :create, params: { session: { email: my_user.email, password: my_user.password } }
expect(session[:user_id]).to eq my_user.id
end

it "does not add a user id to session due to missing password" do
post :create, params: { session: { email: my_user.email } }
expect(session[:user_id]).to be_nil
end

it "flashes #error with bad email address" do
post :create, params: { session: { email: "does not exist" } }
expect(flash.now[:alert]).to be_present
end

it "renders #new with bad email address" do
post :create, params: { session: { email: "does not exist" } }
expect(response).to render_template :new
end

it "redirects to the root view" do
post :create, params: { session: { email: my_user.email, password: my_user.password } }
expect(response).to redirect_to(root_path)
end
end
describe "DELETE sessions/id" do
it "render the #welcome view" do
delete :destroy, params: { id: my_user.id }
expect(response).to redirect_to root_path
end

it "deletes the user's session" do
delete :destroy, params: { id: my_user.id }
expect(assigns(:session)).to be_nil
end

it "flashes #notice" do
delete :destroy, params: { id: my_user.id }
expect(flash[:notice]).to be_present
end
end
end
4 changes: 4 additions & 0 deletions spec/controllers/users_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@
post :create, params: { user: new_user_attributes }
expect(assigns(:user).password_confirmation).to eq new_user_attributes[:password_confirmation]
end
it "logs the user in after sign up" do
post :create, params: { user: new_user_attributes }
expect(session[:user_id]).to eq assigns(:user).id
end
end

end
15 changes: 15 additions & 0 deletions spec/helpers/sessions_helper_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
require 'rails_helper'

# Specs in this file have access to a helper object that includes
# the SessionsHelper. For example:
#
# describe SessionsHelper do
# describe "string concat" do
# it "concats two strings with spaces" do
# expect(helper.concat_strings("this","that")).to eq("this that")
# end
# end
# end
RSpec.describe SessionsHelper, type: :helper do
pending "add some examples to (or delete) #{__FILE__}"
end

0 comments on commit a61fd0a

Please sign in to comment.