aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-12-11 17:31:51 -0800
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-12-11 17:31:51 -0800
commitbdca6686742cecb6e198d2ddf0023189264d40fa (patch)
treebbf7ead3b7801622d1cad738ba755fac97caf285 /actionpack/lib/action_dispatch
parent134fa4f886e86d7eea87044ab5610bb70ff5ee24 (diff)
parent96a6703ed9c0e64a01ce729dc8c2c6c19bea7903 (diff)
downloadrails-bdca6686742cecb6e198d2ddf0023189264d40fa.tar.gz
rails-bdca6686742cecb6e198d2ddf0023189264d40fa.tar.bz2
rails-bdca6686742cecb6e198d2ddf0023189264d40fa.zip
Merge pull request #13279 from misfo/session-fetch-that-behaves-like-hash-fetch
Make ActionDispatch::Request::Session#fetch behave like Hash#fetch
Diffstat (limited to 'actionpack/lib/action_dispatch')
-rw-r--r--actionpack/lib/action_dispatch/request/session.rb16
1 files changed, 8 insertions, 8 deletions
diff --git a/actionpack/lib/action_dispatch/request/session.rb b/actionpack/lib/action_dispatch/request/session.rb
index 6d911a75f1..973627f106 100644
--- a/actionpack/lib/action_dispatch/request/session.rb
+++ b/actionpack/lib/action_dispatch/request/session.rb
@@ -7,6 +7,9 @@ module ActionDispatch
ENV_SESSION_KEY = Rack::Session::Abstract::ENV_SESSION_KEY # :nodoc:
ENV_SESSION_OPTIONS_KEY = Rack::Session::Abstract::ENV_SESSION_OPTIONS_KEY # :nodoc:
+ # Singleton object used to determine if an optional param wasn't specified
+ Unspecified = Object.new
+
def self.create(store, env, default_options)
session_was = find env
session = Request::Session.new(store, env)
@@ -127,15 +130,12 @@ module ActionDispatch
@delegate.delete key.to_s
end
- def fetch(key, default=nil)
- if self.key?(key)
- self[key]
- elsif default
- self[key] = default
- elsif block_given?
- self[key] = yield(key)
+ def fetch(key, default=Unspecified, &block)
+ load_for_read!
+ if default == Unspecified
+ @delegate.fetch(key.to_s, &block)
else
- raise KeyError
+ @delegate.fetch(key.to_s, default, &block)
end
end