def initialize_sign_in_guard_stack
default_guard = DefaultSignInGuard.new(self)
guards = Clearance.configuration.sign_in_guards
guards.inject(default_guard) do |stack, guard_class|
guard_class.new(self, stack)
end
end
class DefaultSignInGuard < SignInGuard
def call
if session.signed_in?
success
else
failure default_failure_message.html_safe
end
end
end
class SignInGuard
def initialize(session, stack = [])
@session = session
@stack = stack
end
private
attr_reader :stack, :session
def signed_in?
session.signed_in?
end
def current_user
session.current_user
end
end
Pry(main)> Clearance.configuration.sign_in_guards # => []
1号
既然guards是一个空数组,那么guard_class
指的是什么?它如何运行新方法?你能解释一下这行代码是做什么的吗?
2号
signed_in
? 是 的私有方法SignInGuard
。我知道只有' self
'才能调用它。在这里,session.signed_in
?为什么有意义?