sign_in: extract the procedure context to a ProcedureContextConcern
This commit is contained in:
parent
e580d336e4
commit
4fd9fa6610
7 changed files with 147 additions and 54 deletions
34
app/controllers/concerns/procedure_context_concern.rb
Normal file
34
app/controllers/concerns/procedure_context_concern.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
module ProcedureContextConcern
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
include Devise::Controllers::StoreLocation
|
||||
include Devise::StoreLocationExtension
|
||||
|
||||
def restore_procedure_context
|
||||
if stored_procedure_id.present?
|
||||
@procedure = Procedure.publiees.find_by(id: stored_procedure_id)
|
||||
|
||||
if @procedure.blank?
|
||||
invalid_procedure_context
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def stored_procedure_id
|
||||
stored_location = get_stored_location_for(:user)
|
||||
|
||||
if stored_location.present? && stored_location.include?('procedure_id=')
|
||||
stored_location.split('procedure_id=').second
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def invalid_procedure_context
|
||||
clear_stored_location_for(:user)
|
||||
flash.alert = t('errors.messages.procedure_not_found')
|
||||
redirect_to root_path
|
||||
end
|
||||
end
|
|
@ -1,6 +1,15 @@
|
|||
module Devise
|
||||
# Useful helpers additions to Devise::Controllers::StoreLocation
|
||||
module StoreLocationExtension
|
||||
# A variant of `stored_location_key_for` which doesn't delete the stored path.
|
||||
def get_stored_location_for(resource_or_scope)
|
||||
location = stored_location_for(resource_or_scope)
|
||||
if location
|
||||
store_location_for(resource_or_scope, location)
|
||||
end
|
||||
location
|
||||
end
|
||||
|
||||
# Delete the url stored in the session for the given scope.
|
||||
def clear_stored_location_for(resource_or_scope)
|
||||
session_key = send(:stored_location_key_for, resource_or_scope)
|
||||
|
|
|
@ -1,18 +1,15 @@
|
|||
class Users::SessionsController < Sessions::SessionsController
|
||||
include ProcedureContextConcern
|
||||
include TrustedDeviceConcern
|
||||
include ActionView::Helpers::DateHelper
|
||||
|
||||
layout 'procedure_context', only: [:new, :create]
|
||||
|
||||
before_action :restore_procedure_context, only: [:new, :create]
|
||||
|
||||
# GET /resource/sign_in
|
||||
def new
|
||||
if user_return_to_procedure_id.present?
|
||||
@procedure = Procedure.active(user_return_to_procedure_id)
|
||||
end
|
||||
|
||||
@user = User.new
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
error_procedure
|
||||
end
|
||||
|
||||
# POST /resource/sign_in
|
||||
|
@ -80,7 +77,7 @@ class Users::SessionsController < Sessions::SessionsController
|
|||
end
|
||||
|
||||
def no_procedure
|
||||
session['user_return_to'] = nil
|
||||
clear_stored_location_for(:user)
|
||||
redirect_to new_user_session_path
|
||||
end
|
||||
|
||||
|
@ -112,20 +109,6 @@ class Users::SessionsController < Sessions::SessionsController
|
|||
end
|
||||
end
|
||||
|
||||
def error_procedure
|
||||
session["user_return_to"] = nil
|
||||
flash.alert = t('errors.messages.procedure_not_found')
|
||||
redirect_to url_for root_path
|
||||
end
|
||||
|
||||
def user_return_to_procedure_id
|
||||
if session["user_return_to"].nil?
|
||||
return nil
|
||||
end
|
||||
|
||||
NumberService.to_number session["user_return_to"].split("?procedure_id=").second
|
||||
end
|
||||
|
||||
def try_to_authenticate(klass, remember_me = false)
|
||||
resource = klass.find_for_database_authentication(email: params[:user][:email])
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
class NumberService
|
||||
def self.to_number(string)
|
||||
string.to_s
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue