feat(session): add flash messages spanning redirects
This commit is contained in:
1 parent
dd759f6a58
commit
56c01089db
1 file changed
+50
@@ -0,0 +1,50 @@
|
|||||||
|
module Prism
|
||||||
|
class Flash
|
||||||
|
SessionKey = '_flash'.freeze
|
||||||
|
|
||||||
|
def initialize(session)
|
||||||
|
@session = session
|
||||||
|
loaded = session[SessionKey]
|
||||||
|
@current = loaded ? Params.from(loaded) : Params.new
|
||||||
|
@pending = Params.new
|
||||||
|
session.delete(SessionKey)
|
||||||
|
end
|
||||||
|
|
||||||
|
def [](key)
|
||||||
|
@current[key]
|
||||||
|
end
|
||||||
|
|
||||||
|
def []=(key, value)
|
||||||
|
@pending[key] = value
|
||||||
|
end
|
||||||
|
|
||||||
|
def now
|
||||||
|
@current
|
||||||
|
end
|
||||||
|
|
||||||
|
def keep(key = nil)
|
||||||
|
if key
|
||||||
|
@pending[key] = @current[key] if @current.key?(key)
|
||||||
|
else
|
||||||
|
@current.each { |name, value| @pending[name] = value }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def discard(key = nil)
|
||||||
|
key ? @current.delete(key) : @current.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
def empty?
|
||||||
|
@current.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_h
|
||||||
|
@current.to_h
|
||||||
|
end
|
||||||
|
|
||||||
|
def sweep
|
||||||
|
@session.delete(SessionKey)
|
||||||
|
@session[SessionKey] = @pending.to_h unless @pending.empty?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in new issue
Block a user