Class: ActiveSupport::Cache::FileStore

Inherits:
Store show all
Defined in:
lib/active_support/cache/file_store.rb

Overview

A cache store implementation which stores everything on the filesystem.

FileStore implements the Strategy::LocalCache strategy which implements an in memory cache inside of a block.

Constant Summary collapse

DIR_FORMATTER =
"%03X"
ESCAPE_FILENAME_CHARS =
/[^a-z0-9_.-]/i
UNESCAPE_FILENAME_CHARS =
/%[0-9A-F]{2}/

Instance Attribute Summary collapse

Attributes inherited from Store

#options, #silence

Instance Method Summary collapse

Methods inherited from Store

#delete, #exist?, #fetch, instrument, instrument=, #mute, #read, #read_multi, #silence!, #write

Constructor Details

#initialize(cache_path, options = nil) ⇒ FileStore

Returns a new instance of FileStore.



17
18
19
20
21
# File 'lib/active_support/cache/file_store.rb', line 17

def initialize(cache_path, options = nil)
  super(options)
  @cache_path = cache_path
  extend Strategy::LocalCache
end

Instance Attribute Details

#cache_pathObject (readonly)

Returns the value of attribute cache_path.



11
12
13
# File 'lib/active_support/cache/file_store.rb', line 11

def cache_path
  @cache_path
end

Instance Method Details

#cleanup(options = nil) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/active_support/cache/file_store.rb', line 28

def cleanup(options = nil)
  options = merged_options(options)
  each_key(options) do |key|
    entry = read_entry(key, options)
    delete_entry(key, options) if entry && entry.expired?
  end
end

#clear(options = nil) ⇒ Object



23
24
25
26
# File 'lib/active_support/cache/file_store.rb', line 23

def clear(options = nil)
  root_dirs = Dir.entries(cache_path).reject{|f| ['.', '..'].include?(f)}
  FileUtils.rm_r(root_dirs.collect{|f| File.join(cache_path, f)})
end

#decrement(name, amount = 1, options = nil) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/active_support/cache/file_store.rb', line 50

def decrement(name, amount = 1, options = nil)
  file_name = key_file_path(namespaced_key(name, options))
  lock_file(file_name) do
    options = merged_options(options)
    if num = read(name, options)
      num = num.to_i - amount
      write(name, num, options)
      num
    else
      nil
    end
  end
end

#delete_matched(matcher, options = nil) ⇒ Object



64
65
66
67
68
69
70
71
72
73
# File 'lib/active_support/cache/file_store.rb', line 64

def delete_matched(matcher, options = nil)
  options = merged_options(options)
  instrument(:delete_matched, matcher.inspect) do
    matcher = key_matcher(matcher, options)
    search_dir(cache_path) do |path|
      key = file_path_key(path)
      delete_entry(key, options) if key.match(matcher)
    end
  end
end

#increment(name, amount = 1, options = nil) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/active_support/cache/file_store.rb', line 36

def increment(name, amount = 1, options = nil)
  file_name = key_file_path(namespaced_key(name, options))
  lock_file(file_name) do
    options = merged_options(options)
    if num = read(name, options)
      num = num.to_i + amount
      write(name, num, options)
      num
    else
      nil
    end
  end
end