Class: FileStore::MultiTenantFileStore
- Inherits:
-
Object
- Object
- FileStore::MultiTenantFileStore
- Includes:
- Logger
- Defined in:
- lib/filestore/multitenant_store.rb
Overview
Class implementing a multitenant file store
Instance Attribute Summary collapse
-
#rootPath ⇒ Object
readonly
Accessors.
-
#stores ⇒ Object
Returns the value of attribute stores.
Attributes included from Logger
Instance Method Summary collapse
-
#add_to_tenant(tenant, file, md = {}) ⇒ Object
Adds a file to the tenant’s store.
-
#create_tenant_store(id = '') ⇒ Object
Creates a new file store for a tenant.
-
#get_from_tenant(tenant, id) ⇒ Object
Retrieves a file from the tenant’s store.
-
#get_tenant_store(id) ⇒ Object
Returns the complete file store for a given tenant.
-
#has_tenant?(id) ⇒ Boolean
Determines wether a tenant is registered.
-
#initialize(root_path = ".", logger = StdoutLogger) ⇒ MultiTenantFileStore
constructor
Initializes a new instance of MultiTenantFileStore.
-
#remove_from_tenant(tenant, id) ⇒ Object
Removes a file from the tenant’s store.
-
#remove_tenant_store(id) ⇒ Object
Permanently removes a tenant’s store.
-
#shutdown ⇒ Object
Shuts down this multitenant store.
Constructor Details
#initialize(root_path = ".", logger = StdoutLogger) ⇒ MultiTenantFileStore
Initializes a new instance of MultiTenantFileStore
19 20 21 22 23 |
# File 'lib/filestore/multitenant_store.rb', line 19 def initialize(root_path = ".", logger = StdoutLogger) @rootPath = root_path @stores = {} @logger = logger end |
Instance Attribute Details
#rootPath ⇒ Object (readonly)
Accessors
14 15 16 |
# File 'lib/filestore/multitenant_store.rb', line 14 def rootPath @rootPath end |
#stores ⇒ Object
Returns the value of attribute stores.
15 16 17 |
# File 'lib/filestore/multitenant_store.rb', line 15 def stores @stores end |
Instance Method Details
#add_to_tenant(tenant, file, md = {}) ⇒ Object
Adds a file to the tenant’s store
Arguments: tenant: The tenant’s ID file: The file to be added md: Optional meta data
Returns:
The file ID
93 94 95 96 97 98 99 100 101 102 |
# File 'lib/filestore/multitenant_store.rb', line 93 def add_to_tenant(tenant, file, md = {}) raise FileStoreException, "Tenant #{tenant} not registered. File #{file} can't be added." if not @stores.key?(tenant) f_id = @stores[tenant].add(file, md) inform ObserverAction.new(:type => ObserverAction::TYPE_MSTORE_ADD, :objects => [tenant, file, f_id], :msg => "Added file to tenant #{tenant} with ID #{f_id}") if self.is_a?(ObservedSubject) return f_id end |
#create_tenant_store(id = '') ⇒ Object
Creates a new file store for a tenant
Arguments: id: The optional ID of the tenant. If omitted, an ID will be created automatically
Returns: The tenants ID
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/filestore/multitenant_store.rb', line 34 def create_tenant_store(id = '') id = UUIDTools::UUID.random_create.to_s if id == '' or id.nil? begin path = File.join(@rootPath, id) FileUtils.mkdir path if not File.directory?(path) sfs = SimpleStoreFactory::create path, self.is_a?(ObservedSubject), @logger @stores[id] = sfs inform ObserverAction.new(:type => ObserverAction::TYPE_MSTORE_CREATE, :msg => "Created new tenant store") if self.is_a?(ObservedSubject) rescue Exception => e raise FileStoreException, "Couldn't create multitenant store.\n#{e.}" end return id end |
#get_from_tenant(tenant, id) ⇒ Object
Retrieves a file from the tenant’s store
Arguments: tenant: The tenant’s ID file: The file to be retrieved
Returns: A hash containing the file object (:path) and the corresponding meta data (:data)
126 127 128 129 130 |
# File 'lib/filestore/multitenant_store.rb', line 126 def get_from_tenant(tenant, id) raise FileStoreException, "Given tenant #{tenant} isn't registered" if not @stores.key?(tenant) return @stores[tenant].get(id) end |
#get_tenant_store(id) ⇒ Object
Returns the complete file store for a given tenant
Arguments: id: The tenant’s ID
Returns: An instance of FileStore::SimpleFileStore
77 78 79 80 81 |
# File 'lib/filestore/multitenant_store.rb', line 77 def get_tenant_store(id) raise FileStoreException, "Tenant #{id} not registered. No file store given." if not @stores.key?(id) return @stores[id] end |
#has_tenant?(id) ⇒ Boolean
Determines wether a tenant is registered
Arguments: tenant: The tenant’s ID to be tested
137 138 139 |
# File 'lib/filestore/multitenant_store.rb', line 137 def has_tenant?(id) return @stores.key?(id) end |
#remove_from_tenant(tenant, id) ⇒ Object
Removes a file from the tenant’s store
Arguments: tenant: The tenant’s ID id: The ID of the file to be removed
110 111 112 113 114 |
# File 'lib/filestore/multitenant_store.rb', line 110 def remove_from_tenant(tenant, id) raise FileStoreException, "Tenant #{tenant} not registered. File with ID {id} can't be removed." if not @stores.key?(tenant) @stores[tenant].remove(id) end |
#remove_tenant_store(id) ⇒ Object
Permanently removes a tenant’s store
Arguments: id: The tenant’s ID
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/filestore/multitenant_store.rb', line 58 def remove_tenant_store(id) raise FileStoreException, "Tenant #{id} can't be removed. Not registered." if not @stores.key?(id) begin @stores.delete(id) FileUtils.remove_dir File.join(@rootPath, id) rescue Exception => e raise FileStoreException, "Couldn't delete tenant #{id}.\n#{e.}" end end |
#shutdown ⇒ Object
Shuts down this multitenant store
143 144 145 146 147 148 149 |
# File 'lib/filestore/multitenant_store.rb', line 143 def shutdown # Shut down any tenant store @stores.each do |id, store| @logger.info "Shutting down file store for tenant #{id}" store.shutdown end end |