From c86f1415fdd23f7e5236747f1dde2cdd34e25030 Mon Sep 17 00:00:00 2001 From: Nate Date: Mon, 9 Nov 2015 11:41:14 -0500 Subject: [PATCH] rename ShowUser to FindUser and add error handling, start authentication_controller Not currently passing spec, our log_in before_action currently must take a User. --- app/controllers/authenticated_controller.rb | 3 +++ app/controllers/password_resets_controller.rb | 8 ++++---- app/controllers/sessions_controller.rb | 3 +-- app/controllers/users_controller.rb | 5 +---- app/interactors/find_user.rb | 11 +++++++++++ app/interactors/show_user.rb | 9 --------- app/interactors/validate_user.rb | 10 ++++++---- app/views/users/show.html.erb | 4 ++-- 8 files changed, 28 insertions(+), 25 deletions(-) create mode 100644 app/controllers/authenticated_controller.rb create mode 100644 app/interactors/find_user.rb delete mode 100644 app/interactors/show_user.rb diff --git a/app/controllers/authenticated_controller.rb b/app/controllers/authenticated_controller.rb new file mode 100644 index 0000000..25781f3 --- /dev/null +++ b/app/controllers/authenticated_controller.rb @@ -0,0 +1,3 @@ +class AuthenticatedController < ApplicationController + before_action :log_in +end diff --git a/app/controllers/password_resets_controller.rb b/app/controllers/password_resets_controller.rb index 1326edf..950defe 100644 --- a/app/controllers/password_resets_controller.rb +++ b/app/controllers/password_resets_controller.rb @@ -1,6 +1,7 @@ -class PasswordResetsController < ApplicationController - before_action :find_user, only: %i(edit update) - before_action :check_expiration, only: %i(edit update) +class PasswordResetsController < AuthenticatedController + before_action :find_user, only: %i(edit update) + before_action :check_expiration, only: %i(edit update) + skip_before_action :log_in, only: %i(new edit create) def new end @@ -25,7 +26,6 @@ def update update_password = UpdatePassword.call(user_params: user_params, user: @user) if update_password.success? - log_in update_password.user flash[:success] = "Password has been reset" redirect_to update_password.user else diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index f56a32a..39b8ab2 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -1,4 +1,4 @@ -class SessionsController < ApplicationController +class SessionsController < AuthenticatedController def new end @@ -7,7 +7,6 @@ def create password: params[:session][:password]) if valid_user.success? - log_in valid_user.user redirect_to valid_user.user else flash.now[:error] = "There was a problem signing in" diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 8d7e6a9..9458222 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -16,10 +16,7 @@ def create end def show - result = ShowUser.call(id: params[:id]) - @user = result.user - @todos = result.todos - @todo = result.todo + @user = FindUser.call(id: params[:id], current_id: session[:user_id]).user end private diff --git a/app/interactors/find_user.rb b/app/interactors/find_user.rb new file mode 100644 index 0000000..3d5335f --- /dev/null +++ b/app/interactors/find_user.rb @@ -0,0 +1,11 @@ +class FindUser + include Interactor + + def call + begin + context.user = User.find(context.id) + rescue ActiveRecord::RecordNotFound + context.user = User.find(context.current_id) + end + end +end diff --git a/app/interactors/show_user.rb b/app/interactors/show_user.rb deleted file mode 100644 index 63adea1..0000000 --- a/app/interactors/show_user.rb +++ /dev/null @@ -1,9 +0,0 @@ -class ShowUser - include Interactor - - def call - context.user = User.find(context.id) - context.todos = context.user.todos - context.todo = Todo.new - end -end diff --git a/app/interactors/validate_user.rb b/app/interactors/validate_user.rb index 810cc06..7a5c9fd 100644 --- a/app/interactors/validate_user.rb +++ b/app/interactors/validate_user.rb @@ -3,9 +3,11 @@ class ValidateUser def call context.user = User.find_by(email: context.email.downcase) - user = context.user - password = context.password - errors = context.user.errors - context.fail!(errors: errors) unless user && user.authenticate(password) + authenticate_user(context.user, context.password) + end + + def authenticate_user(user, password) + return if user && user.authenticate(password) + context.fail!(errors: user.errors) end end diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 643fbc3..255f7f9 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -2,6 +2,6 @@

<%= @user.name %>

<%= @user.email %>

Test subject since <%= @user.created_at.strftime("%B %d, %Y") %>

- <%= render @todos %> - <%= render partial: "todos/form", locals: { user: @user, todo: @todo } %> + <%= render @user.todos %> + <%= render partial: "todos/form", locals: { user: @user, todo: @user.todos.new } %>