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.
231 232 233 |
# File 'lib/rack/state.rb', line 231 def initialize(directory = Dir.tmpdir) @directory = directory end |
Instance Method Details
#create(token, object) ⇒ Object
235 236 237 238 239 240 241 242 243 244 |
# File 'lib/rack/state.rb', line 235 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
264 265 266 |
# File 'lib/rack/state.rb', line 264 def delete(token) ::File.unlink state_file(token) rescue nil end |
#read(token) ⇒ Object
246 247 248 249 250 251 |
# File 'lib/rack/state.rb', line 246 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
253 254 255 256 257 258 259 260 261 262 |
# File 'lib/rack/state.rb', line 253 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 |