Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Use initialize_copy! to proper initialize now on clone.

  • Loading branch information...
commit 2f549b8bbd733ad0563d977e83a9b2a2b6b8e07c 1 parent 89ed9fb
@josevalim josevalim authored
Showing with 18 additions and 15 deletions.
  1. +18 −15 actionpack/lib/action_dispatch/middleware/flash.rb
View
33 actionpack/lib/action_dispatch/middleware/flash.rb
@@ -43,6 +43,8 @@ class Flash
KEY = 'action_dispatch.request.flash_hash'.freeze
class FlashNow #:nodoc:
+ attr_accessor :flash
+
def initialize(flash)
@flash = flash
end
@@ -66,14 +68,6 @@ def alert=(message)
def notice=(message)
self[:notice] = message
end
-
- def close!(new_flash)
- @flash = new_flash
- end
-
- def closed?
- @flash.closed?
- end
end
class FlashHash
@@ -86,6 +80,14 @@ def initialize #:nodoc:
@now = nil
end
+ def initialize_copy(other)
+ if other.now_is_loaded?
+ @now = other.now.dup
+ @now.flash = self
+ end
+ super
+ end
+
def []=(k, v) #:nodoc:
raise ClosedError, :flash if closed?
keep(k)
@@ -150,16 +152,12 @@ def replace(h) #:nodoc:
#
# Entries set via <tt>now</tt> are accessed the same way as standard entries: <tt>flash['my-key']</tt>.
def now
- @now = (!@now || @now.closed?) ? FlashNow.new(self) : @now
+ @now ||= FlashNow.new(self)
end
attr_reader :closed
alias :closed? :closed
-
- def close!
- @closed = true
- @now.close!(self) if @now
- end
+ def close!; @closed = true; end
# Keeps either the entire current flash or a specific flash entry available for the next action:
#
@@ -214,7 +212,12 @@ def notice=(message)
self[:notice] = message
end
- private
+ protected
+
+ def now_is_loaded?
+ !!@now
+ end
+
# Used internally by the <tt>keep</tt> and <tt>discard</tt> methods
# use() # marks the entire flash as used
# use('msg') # marks the "msg" entry as used

1 comment on commit 2f549b8

@flop

thx for this.. I didn't know that you can add behavior on dup with initialize_copy.

Please sign in to comment.
Something went wrong with that request. Please try again.