Class: Rack::State::Store::File

Inherits:
Object
  • Object
show all
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

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