Class: Storage

Inherits:
Object
  • Object
show all
Defined in:
lib/storage.rb

Overview

use it like

Class Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Storage

Open a storage file or create it if it doesn’t exist.

Parameters:

  • a (String)

    (short) name, should be suitable for use as a filename



15
16
17
18
19
20
21
# File 'lib/storage.rb', line 15

def initialize(name)
  @name    = name
  unless File.exists?(Storage.storage_dir)
    FileUtils.mkdir_p(Storage.storage_dir)
  end
  rollback
end

Class Attribute Details

.storage_dirObject



8
9
10
# File 'lib/storage.rb', line 8

def self.storage_dir
  @user_dir ||= File.join(File.expand_path('~'), ".storage")
end

Instance Method Details

#[](key) ⇒ Object

retrieve key value note: it does not re-read from disk before returning you this value



45
46
47
48
49
50
51
52
# File 'lib/storage.rb', line 45

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



56
57
58
59
60
# File 'lib/storage.rb', line 56

def []=(key, value)
  @storage[key] = value
  save
  value
end

#keysObject



69
70
71
# File 'lib/storage.rb', line 69

def keys
  @storage.keys
end

#rollbackObject

Rollback the storage to the latest revision saved to disk or empty it if it hasn’t been saved.



32
33
34
35
36
37
38
39
40
41
# File 'lib/storage.rb', line 32

def rollback
  if File.exists?(path)
    @storage = YAML.load_file(path)
    raise 'storage file is corrupted--please delete ' + path unless @storage.is_a? Hash
    update_timestamp
  else
    @storage = {}
  end
  self
end

#saveObject

Save the storage to disk.



24
25
26
27
28
# File 'lib/storage.rb', line 24

def save
				File.open(path, "w") { |f| YAML.dump(@storage, f) }
  update_timestamp
  self
end

#set_default(key, value) ⇒ Object



62
63
64
65
66
67
# File 'lib/storage.rb', line 62

def set_default(key, value)
  unless @storage.has_key?(key)
    self[key] = value
  end
  value
end