From 56c01089db991b20e94f1dd1c7fd78cb8f85507d Mon Sep 17 00:00:00 2001 From: DualFroz Date: Wed, 26 Aug 2026 11:40:00 +0200 Subject: [PATCH] feat(session): add flash messages spanning redirects --- lib/prism/flash.rb | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 lib/prism/flash.rb diff --git a/lib/prism/flash.rb b/lib/prism/flash.rb new file mode 100644 index 0000000..93a906b --- /dev/null +++ b/lib/prism/flash.rb @@ -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