diff options
Diffstat (limited to 'actionpack/lib/action_dispatch/middleware/flash.rb')
| -rw-r--r-- | actionpack/lib/action_dispatch/middleware/flash.rb | 66 | 
1 files changed, 38 insertions, 28 deletions
| diff --git a/actionpack/lib/action_dispatch/middleware/flash.rb b/actionpack/lib/action_dispatch/middleware/flash.rb index 59639a010e..c51dcd542a 100644 --- a/actionpack/lib/action_dispatch/middleware/flash.rb +++ b/actionpack/lib/action_dispatch/middleware/flash.rb @@ -1,15 +1,6 @@  require 'active_support/core_ext/hash/keys'  module ActionDispatch -  class Request < Rack::Request -    # Access the contents of the flash. Use <tt>flash["notice"]</tt> to -    # read a notice you put there or <tt>flash["notice"] = "hello"</tt> -    # to put a new one. -    def flash -      @env[Flash::KEY] ||= Flash::FlashHash.from_session_value(session["flash"]) -    end -  end -    # The flash provides a way to pass temporary primitive-types (String, Array, Hash) between actions. Anything you place in the flash will be exposed    # to the very next action and then cleared out. This is a great way of doing notices and alerts, such as a create    # action that sets <tt>flash[:notice] = "Post successfully created"</tt> before redirecting to a display action that can @@ -47,6 +38,40 @@ module ActionDispatch    class Flash      KEY = 'action_dispatch.request.flash_hash'.freeze +    module RequestMethods +      # Access the contents of the flash. Use <tt>flash["notice"]</tt> to +      # read a notice you put there or <tt>flash["notice"] = "hello"</tt> +      # to put a new one. +      def flash +        flash = flash_hash +        return flash if flash +        self.flash = Flash::FlashHash.from_session_value(session["flash"]) +      end + +      def flash=(flash) +        set_header Flash::KEY, flash +      end + +      def flash_hash # :nodoc: +        get_header Flash::KEY +      end + +      def commit_flash # :nodoc: +        session    = self.session || {} +        flash_hash = self.flash_hash + +        if flash_hash && (flash_hash.present? || session.key?('flash')) +          session["flash"] = flash_hash.to_session_value +          self.flash = flash_hash.dup +        end + +        if (!session.respond_to?(:loaded?) || session.loaded?) && # (reset_session uses {}, which doesn't implement #loaded?) +            session.key?('flash') && session['flash'].nil? +          session.delete('flash') +        end +      end +    end +      class FlashNow #:nodoc:        attr_accessor :flash @@ -258,25 +283,10 @@ module ActionDispatch        end      end -    def initialize(app) -      @app = app -    end - -    def call(env) -      @app.call(env) -    ensure -      session    = Request::Session.find(env) || {} -      flash_hash = env[KEY] - -      if flash_hash && (flash_hash.present? || session.key?('flash')) -        session["flash"] = flash_hash.to_session_value -        env[KEY] = flash_hash.dup -      end +    def self.new(app) app; end +  end -      if (!session.respond_to?(:loaded?) || session.loaded?) && # (reset_session uses {}, which doesn't implement #loaded?) -        session.key?('flash') && session['flash'].nil? -        session.delete('flash') -      end -    end +  class Request +    prepend Flash::RequestMethods    end  end | 
