Class: Rack::State::Store::File
- Inherits:
-
Object
- Object
- Rack::State::Store::File
- Defined in:
- lib/rack/state.rb
Overview
File-based state storage adapter. The state token is the file name and the state object is Marshaled and stored in the file.
Instance Method Summary collapse
- #create(token, object) ⇒ Object
- #delete(token) ⇒ Object
-
#initialize(directory = Dir.tmpdir) ⇒ File
constructor
- directory
-
Storage directory for state files.
- #read(token) ⇒ Object
- #update(token, object) ⇒ Object
Constructor Details
#initialize(directory = Dir.tmpdir) ⇒ File
- directory
-
Storage directory for state files. It must exist and have proper permissions.
237 238 239 |
# File 'lib/rack/state.rb', line 237 def initialize(directory = Dir.tmpdir) @directory = directory end |
Instance Method Details
#create(token, object) ⇒ Object
241 242 243 244 245 246 247 248 249 250 |
# File 'lib/rack/state.rb', line 241 def create(token, object) flags = ::File::WRONLY|::File::CREAT|::File::EXCL ::File.open(state_file(token), flags, 0600) do |f| f.flock ::File::LOCK_EX f.write ::Marshal.dump(object) end rescue Errno::EEXIST raise KeyError end |
#delete(token) ⇒ Object
270 271 272 |
# File 'lib/rack/state.rb', line 270 def delete(token) ::File.unlink state_file(token) rescue nil end |
#read(token) ⇒ Object
252 253 254 255 256 257 |
# File 'lib/rack/state.rb', line 252 def read(token) ::File.open(state_file(token)) do |f| f.flock ::File::LOCK_SH ::Marshal.load(f) if f.size > 0 end rescue nil end |
#update(token, object) ⇒ Object
259 260 261 262 263 264 265 266 267 268 |
# File 'lib/rack/state.rb', line 259 def update(token, object) flags = ::File::WRONLY|::File::TRUNC ::File.open(state_file(token), flags) do |f| f.flock ::File::LOCK_EX f.write ::Marshal.dump(object) end rescue Errno::ENOENT raise KeyError end |