update FlashHash for 3.2

This commit is contained in:
Greg Ose
2014-09-24 12:39:03 -05:00
parent 283923f530
commit e1c7a232ca
3 changed files with 19 additions and 31 deletions

View File

@@ -480,7 +480,8 @@ module ActionController
@request.assign_parameters(@routes, controller_class_name, action.to_s, parameters)
@request.session = ActionController::TestSession.new(session) if session
@request.flash.update(flash || {})
@request.session["flash"] = @request.flash.update(flash || {})
@request.session["flash"].sweep
@controller.request = @request
build_request_uri(action, parameters)

View File

@@ -78,32 +78,23 @@ module ActionDispatch
include Enumerable
def self.from_session_value(value)
flash = case value
when FlashHash # Before https://github.com/github/github-rails/pull/9
value
when Hash # After, read plain Hash from the session
flashes = value['flashes'] || {}
flashes.stringify_keys!
discard = value['discard'] || []
discard = discard.map do |item|
item.kind_of?(Symbol) ? item.to_s : item
end
new_from_values(flashes, Set.new(discard))
else
new
end
flash.tap(&:sweep)
case value
when Hash # After github/github-rails#9, only plain Hashes are in the session
new(value['flashes'], value['discard'])
else
new
end
end
def to_session_value
return nil if empty?
{'discard' => @used.to_a, 'flashes' => Hash[to_a]}
{'discard' => @used.to_a, 'flashes' => @flashes}
end
def initialize #:nodoc:
@used = Set.new
def initialize(flashes = {}, discard = []) #:nodoc:
@used = Set.new(discard)
@closed = false
@flashes = {}
@flashes = flashes
@now = nil
end
@@ -253,15 +244,6 @@ module ActionDispatch
Array(key || keys).each { |k| used ? @used << k : @used.delete(k) }
return key ? self[key] : self
end
def self.new_from_values(flashes, used)
new.tap do |flash_hash|
flashes.each do |k, v|
flash_hash[k] = v
end
flash_hash.instance_variable_set("@used", used)
end
end
end
def initialize(app)
@@ -269,6 +251,11 @@ module ActionDispatch
end
def call(env)
if (session = env['rack.session']) && (flash = Flash::FlashHash.from_session_value(session["flash"]))
flash.sweep
env[KEY] = flash
end
@app.call(env)
ensure
session = env['rack.session'] || {}
@@ -285,7 +272,7 @@ module ActionDispatch
env[KEY] = new_hash
end
if session.key?('flash') && session['flash'].nil?
if session.key?('flash') && session['flash'].blank?
session.delete('flash')
end
end

View File

@@ -43,7 +43,6 @@ module ActionDispatch
@hash['foo'] = 'bar'
assert_equal({'foo' => 'bar'}, @hash.to_hash)
skip "For Rails 3 we are modifying the actual hash, not a dup of the @flashes ivar"
@hash.to_hash['zomg'] = 'aaron'
assert !@hash.key?('zomg')
assert_equal({'foo' => 'bar'}, @hash.to_hash)
@@ -67,6 +66,7 @@ module ActionDispatch
decrypted_data = "{ \"session_id\":\"d98bdf6d129618fc2548c354c161cfb5\", \"flash\":{\"discard\":[], \"flashes\":{\"message\":\"hey you\"}} }"
session = ActiveSupport::JSON.decode(decrypted_data)
hash = Flash::FlashHash.from_session_value(session['flash'])
hash.sweep
assert_equal({'discard' => %w[message], 'flashes' => { 'message' => 'hey you'}}, hash.to_session_value)
assert_equal "hey you", hash[:message]