lib/goma/controllers.rb in goma-0.0.1.alpha vs lib/goma/controllers.rb in goma-0.0.1.beta

- old
+ new

@@ -29,11 +29,11 @@ class_eval <<-RUBY, __FILE__, __LINE__ + 1 def current_#{scope} warden.authenticate(scope: :#{scope}) rescue Goma::NotFound - #{scope}_logout + logout(:#{scope}) nil end def #{scope}_logged_in? !!current_#{scope} @@ -43,13 +43,17 @@ logout(:#{scope}) end def require_#{scope}_login return if #{scope}_logged_in? - #{config.save_return_to_url ? "session[:return_to_url] = request.url if request.get?" : ''} + #{config.save_return_to_url ? "store_return_to_url(:#{scope}, request.url) if request.get?" : ''} #{config.not_authenticated_action} end + + def #{scope}_redirect_back_or_to(url, options={}) + redirect_back_or_to(url, options.merge!(scope: :#{scope})) + end RUBY end class_eval <<-RUBY, __FILE__, __LINE__ + 1 alias logged_in? #{Goma.config.default_scope}_logged_in? @@ -68,11 +72,11 @@ def force_login(record, *) warden.set_user(record, scope: record.goma_scope) end - def logout(arg=nil) + def logout(arg=nil, *) scope = case arg when Symbol arg when nil Goma.config.default_scope @@ -81,16 +85,32 @@ end warden.logout(scope) instance_variable_set("@current_#{scope}", nil) end - def logout_all_scopes - Goma.config.scopes.each { |scope| logout(scope) } + def logout_all_scopes(timeout: false) + Goma.config.scopes.each { |scope| logout(scope, timeout: timeout) } end - def redirect_back_or_to(url, flash_hash={}) - redirect_to(session[:return_to_url] || url, flash: flash_hash) - session[:return_to_url] = nil + def redirect_back_or_to(url, options={}) + scope = options.delete(:scope) || Goma.config.default_scope + redirect_to(return_to_url(scope, clear: true) || url, flash: options) + end + + def store_return_to_url(scope, url) + session[return_to_url_key(scope)] = url + end + + def return_to_url(scope, clear: false) + if clear + session.delete(return_to_url_key(scope)) + else + session[return_to_url_key(scope)] + end + end + + def return_to_url_key(scope) + "#{scope}_return_to" end def not_authenticated redirect_to root_path end