Class: Storage
- Inherits:
-
Object
- Object
- Storage
- Defined in:
- lib/storage.rb
Overview
shamelessly stolen from the redcar project
Class Attribute Summary collapse
Instance Method Summary collapse
-
#[](key) ⇒ Object
retrieve key value note: it does not re-read from disk before returning you this value.
-
#[]=(key, value) ⇒ Object
set key to value note: it automatically saves this to disk.
-
#initialize(name) ⇒ Storage
constructor
Open a storage file or create it if it doesn’t exist.
- #keys ⇒ Object
-
#rollback ⇒ Object
Rollback the storage to the latest revision saved to disk or empty it if it hasn’t been saved.
-
#save ⇒ Object
Save the storage to disk.
- #set_default(key, value) ⇒ Object
Constructor Details
#initialize(name) ⇒ Storage
Open a storage file or create it if it doesn’t exist.
33 34 35 36 37 38 39 |
# File 'lib/storage.rb', line 33 def initialize(name) @name = name unless File.exists?(Storage.storage_dir) FileUtils.mkdir_p(Storage.storage_dir) end rollback end |
Class Attribute Details
Instance Method Details
#[](key) ⇒ Object
retrieve key value note: it does not re-read from disk before returning you this value
68 69 70 71 72 73 74 75 |
# File 'lib/storage.rb', line 68 def [](key) if @last_modified_time if File.exist?(path()) && (File.stat(path()).mtime != @last_modified_time) rollback end end @storage[key] end |
#[]=(key, value) ⇒ Object
set key to value note: it automatically saves this to disk
79 80 81 82 83 |
# File 'lib/storage.rb', line 79 def []=(key, value) @storage[key] = value save value end |
#keys ⇒ Object
92 93 94 |
# File 'lib/storage.rb', line 92 def keys @storage.keys end |
#rollback ⇒ Object
Rollback the storage to the latest revision saved to disk or empty it if it hasn’t been saved.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/storage.rb', line 50 def rollback if File.exists?(path) @storage = YAML.load_file(path) unless @storage.is_a? Hash $stderr.puts 'storage file is corrupted--deleting ' + path @storage = {} File.delete path end else @storage = {} end self end |
#save ⇒ Object
Save the storage to disk.
42 43 44 45 46 |
# File 'lib/storage.rb', line 42 def save File.open(path, "w") { |f| YAML.dump(@storage, f) } self end |
#set_default(key, value) ⇒ Object
85 86 87 88 89 90 |
# File 'lib/storage.rb', line 85 def set_default(key, value) unless @storage.has_key?(key) self[key] = value end value end |