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