Class: ActiveSupport::Cache::FileStore
- Defined in:
- activesupport/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"
- FILENAME_MAX_SIZE =
max filename size on file system is 255, minus room for timestamp and random characters appended by Tempfile (used by atomic write)
228
- EXCLUDED_DIRS =
['.', '..'].freeze
Instance Attribute Summary collapse
-
#cache_path ⇒ Object
readonly
Returns the value of attribute cache_path.
Attributes inherited from Store
Instance Method Summary collapse
-
#cleanup(options = nil) ⇒ Object
Premptively iterates through all stored keys and removes the ones which have expired.
-
#clear(options = nil) ⇒ Object
Deletes all items from the cache.
-
#decrement(name, amount = 1, options = nil) ⇒ Object
Decrements an already existing integer value that is stored in the cache.
- #delete_matched(matcher, options = nil) ⇒ Object
-
#increment(name, amount = 1, options = nil) ⇒ Object
Increments an already existing integer value that is stored in the cache.
-
#initialize(cache_path, options = nil) ⇒ FileStore
constructor
A new instance of FileStore.
Methods inherited from Store
#delete, #exist?, #fetch, #fetch_multi, instrument, instrument=, #mute, #read, #read_multi, #silence!, #write
Constructor Details
#initialize(cache_path, options = nil) ⇒ FileStore
Returns a new instance of FileStore.
19 20 21 22 23 |
# File 'activesupport/lib/active_support/cache/file_store.rb', line 19 def initialize(cache_path, = nil) super() @cache_path = cache_path.to_s extend Strategy::LocalCache end |
Instance Attribute Details
#cache_path ⇒ Object (readonly)
Returns the value of attribute cache_path
13 14 15 |
# File 'activesupport/lib/active_support/cache/file_store.rb', line 13 def cache_path @cache_path end |
Instance Method Details
#cleanup(options = nil) ⇒ Object
Premptively iterates through all stored keys and removes the ones which have expired.
34 35 36 37 38 39 40 |
# File 'activesupport/lib/active_support/cache/file_store.rb', line 34 def cleanup( = nil) = () each_key() do |key| entry = read_entry(key, ) delete_entry(key, ) if entry && entry.expired? end end |
#clear(options = nil) ⇒ Object
Deletes all items from the cache. In this case it deletes all the entries in the specified file store directory except for .gitkeep. Be careful which directory is specified in your config file when using FileStore
because everything in that directory will be deleted.
28 29 30 31 |
# File 'activesupport/lib/active_support/cache/file_store.rb', line 28 def clear( = nil) root_dirs = Dir.entries(cache_path).reject {|f| (EXCLUDED_DIRS + [".gitkeep"]).include?(f)} FileUtils.rm_r(root_dirs.collect{|f| File.join(cache_path, f)}) end |
#decrement(name, amount = 1, options = nil) ⇒ Object
Decrements an already existing integer value that is stored in the cache. If the key is not found nothing is done.
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'activesupport/lib/active_support/cache/file_store.rb', line 60 def decrement(name, amount = 1, = nil) file_name = key_file_path(namespaced_key(name, )) lock_file(file_name) do = () if num = read(name, ) num = num.to_i - amount write(name, num, ) num else nil end end end |
#delete_matched(matcher, options = nil) ⇒ Object
74 75 76 77 78 79 80 81 82 83 |
# File 'activesupport/lib/active_support/cache/file_store.rb', line 74 def delete_matched(matcher, = nil) = () instrument(:delete_matched, matcher.inspect) do matcher = key_matcher(matcher, ) search_dir(cache_path) do |path| key = file_path_key(path) delete_entry(key, ) if key.match(matcher) end end end |
#increment(name, amount = 1, options = nil) ⇒ Object
Increments an already existing integer value that is stored in the cache. If the key is not found nothing is done.
44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'activesupport/lib/active_support/cache/file_store.rb', line 44 def increment(name, amount = 1, = nil) file_name = key_file_path(namespaced_key(name, )) lock_file(file_name) do = () if num = read(name, ) num = num.to_i + amount write(name, num, ) num else nil end end end |