Class: FileStore::MemoryMetaManager
- Inherits:
-
MetaManager
- Object
- MetaManager
- FileStore::MemoryMetaManager
- Includes:
- Logger, OberservedSubject
- Defined in:
- lib/filestore/memory_meta.rb
Overview
Class implementing a memory based MetaManager
Constant Summary collapse
- FILE =
Constant defining the default file path
'meta.yaml'
Instance Attribute Summary collapse
-
#file ⇒ Object
readonly
Accessor for the file to store data to.
Attributes included from OberservedSubject
Attributes included from Logger
Instance Method Summary collapse
-
#add_or_update(id, metaData) ⇒ Object
see: MetaManager::add_or_update.
-
#get_data(id) ⇒ Object
see: MetaManager::get_data.
-
#has_id?(id) ⇒ Boolean
see: MetaManager::has_id?.
-
#initialize(persistentFile = '', logger) ⇒ MemoryMetaManager
constructor
Creates a new instance of MemoryMetaManager.
-
#remove(id) ⇒ Object
see: MetaManager::remove.
-
#restore(id) ⇒ Object
see: MetaManager::restore.
-
#shutdown ⇒ Object
see: MetaManager::shutdown.
Methods included from OberservedSubject
included, #inform, #initialize_obs, #register, #unregister
Constructor Details
#initialize(persistentFile = '', logger) ⇒ MemoryMetaManager
Creates a new instance of MemoryMetaManager
Arguments: persistentFile: The file where the manager class is persisted to
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/filestore/memory_meta.rb', line 25 def initialize(persistentFile = '', logger) @logger = logger @data = Hash.new @removed = Hash.new @file = (persistentFile.nil? or persistentFile == '')? MemoryMetaManager::FILE : persistentFile self.initialize_obs begin if File.exists?(@file) @logger.info "loading meta yaml from #{@file}" @mm = YAML.load_file(@file) if File.exists?(@file) @logger.info "Loaded meta yaml: #{@mm}" @data = @mm[:current] @removed = @mm[:removed] else @logger.info "Creating new meta store in #{@file}" end rescue Exception => e raise FileStoreException, "Couldn't load meta data from file #{@file}.\nCause: #{e}" end end |
Instance Attribute Details
#file ⇒ Object (readonly)
Accessor for the file to store data to
18 19 20 |
# File 'lib/filestore/memory_meta.rb', line 18 def file @file end |
Instance Method Details
#add_or_update(id, metaData) ⇒ Object
see: MetaManager::add_or_update
59 60 61 62 63 64 65 66 67 |
# File 'lib/filestore/memory_meta.rb', line 59 def add_or_update(id, ) raise FileStoreException, "Only hashsets can be added" if not .is_a?(Hash) raise FileStoreException, "Only Strings can be used as keys" if not id.is_a?(String) @data[id] = (@data.key?(id) ? @data[id].merge!() : @data[id] = ) self.inform ObserverAction.new(:type => ObserverAction::TYPE_META_ADD, :objects => [id, ], :msg => "Added/Updated file to meta store") end |
#get_data(id) ⇒ Object
see: MetaManager::get_data
51 52 53 54 55 |
# File 'lib/filestore/memory_meta.rb', line 51 def get_data(id) raise FileStoreException, "No meta data available for ID #{id}" if not @data.key?(id) return @data[id] end |
#has_id?(id) ⇒ Boolean
see: MetaManager::has_id?
114 115 116 |
# File 'lib/filestore/memory_meta.rb', line 114 def has_id?(id) @data.key?(id) end |
#remove(id) ⇒ Object
see: MetaManager::remove
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/filestore/memory_meta.rb', line 71 def remove(id) raise FileStoreException, "Only Strings can be used as keys" if not id.is_a?(String) raise FileStoreException, "ID #{id} not found in meta store" if not @data.key?(id) @removed[id] = @data[id] @data.delete(id) self.inform ObserverAction.new(:type => ObserverAction::TYPE_META_REMOVE, :objects => [id], :msg => "Removed file to meta store") end |
#restore(id) ⇒ Object
see: MetaManager::restore
84 85 86 87 88 89 90 91 92 93 |
# File 'lib/filestore/memory_meta.rb', line 84 def restore(id) raise FileStoreException, "Only Strings can be used as keys" if not id.is_a?(String) raise FileStoreException, "ID #{id} not found in deleted meta store" if not @removed.key?(id) @data[id] = @removed[id] @removed.delete(id) self.inform ObserverAction.new(:type => ObserverAction::TYPE_META_RESTORE, :objects => [id], :msg => "Restored file in meta store") end |
#shutdown ⇒ Object
see: MetaManager::shutdown
97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/filestore/memory_meta.rb', line 97 def shutdown begin File.open(@file, "wb+") do |fh| YAML.dump({:current => @data, :removed => @removed}, fh) end @data = nil self.inform ObserverAction.new(:type => ObserverAction::TYPE_META_SHUTDOWN, :msg => "Restored file in meta store") rescue Exception => e raise FileStoreException, "Couldn't serialize meta manager to file #{@file}.\n#{e.message}" end end |