Class: Storage

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

Overview

shamelessly stolen from the redcar project

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



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

.storage_dirObject



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

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

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

#keysObject



92
93
94
# File 'lib/storage.rb', line 92

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.



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
    update_timestamp
  else
    @storage = {}
  end
  self
end

#saveObject

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) }
  update_timestamp
  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