Class: FileStore::WebDAV::WebDAVStore
- Inherits:
-
Object
- Object
- FileStore::WebDAV::WebDAVStore
- Includes:
- Logger
- Defined in:
- lib/filestore/webdav_store.rb
Overview
Main library class implementing a WebDAV file store used for storing and managing arbitrary files
Instance Attribute Summary collapse
-
#connection ⇒ Object
readonly
Accessors for important properties.
-
#host ⇒ Object
readonly
Accessors for important properties.
-
#password ⇒ Object
readonly
Accessors for important properties.
-
#port ⇒ Object
readonly
Accessors for important properties.
-
#root_path ⇒ Object
readonly
Accessors for important properties.
-
#user ⇒ Object
readonly
Accessors for important properties.
Attributes included from Logger
Instance Method Summary collapse
-
#add(file) ⇒ Object
Adds a file to the store.
-
#get(file) ⇒ Object
Retrieves a file identified by it’s path.
-
#initialize(host, port, user, password, root_path = '/', logger = StdoutLogger) ⇒ WebDAVStore
constructor
Initializes a new instance of SimpleFileStore.
-
#remove(file) ⇒ Object
Deletes a file from the remote store.
-
#shutdown ⇒ Object
Shuts down the file store.
Constructor Details
#initialize(host, port, user, password, root_path = '/', logger = StdoutLogger) ⇒ WebDAVStore
Initializes a new instance of SimpleFileStore
Arguments: root_path: The path where the file store resides
logger: The logging facility
25 26 27 28 29 30 31 32 33 |
# File 'lib/filestore/webdav_store.rb', line 25 def initialize(host, port, user, password, root_path = '/', logger = StdoutLogger) @host = host @port = port @user = user @password = password @root_path = root_path initialize_connection end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Accessors for important properties
17 18 19 |
# File 'lib/filestore/webdav_store.rb', line 17 def connection @connection end |
#host ⇒ Object (readonly)
Accessors for important properties
17 18 19 |
# File 'lib/filestore/webdav_store.rb', line 17 def host @host end |
#password ⇒ Object (readonly)
Accessors for important properties
17 18 19 |
# File 'lib/filestore/webdav_store.rb', line 17 def password @password end |
#port ⇒ Object (readonly)
Accessors for important properties
17 18 19 |
# File 'lib/filestore/webdav_store.rb', line 17 def port @port end |
#root_path ⇒ Object (readonly)
Accessors for important properties
17 18 19 |
# File 'lib/filestore/webdav_store.rb', line 17 def root_path @root_path end |
#user ⇒ Object (readonly)
Accessors for important properties
17 18 19 |
# File 'lib/filestore/webdav_store.rb', line 17 def user @user end |
Instance Method Details
#add(file) ⇒ Object
Adds a file to the store
Arguments: file: The file to be stored
Returns:
The file path or nil
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/filestore/webdav_store.rb', line 43 def add(file) raise FileStoreException, "File #{file} not found" if not File.exists?(file) raise FileStoreException, "File #{file} isn't readable" if not File.readable?(file) f_path = File.basename file remote_path = File.join @root_path, f_path begin result = @connection.put remote_path, file raise "Couldn't upload file, response code isn't of type 2xx" unless (result[:header].status.to_s =~ /2\d{2}/) inform ObserverAction.new(:type => ObserverAction::TYPE_DAV_ADD, :objects => { :file => remote_path, :meta => }, :msg => "Added file to remote file store") if self.is_a?(ObservedSubject) rescue Exception => e raise FileStoreException, "Couldn't put file '#{file}' to remote store URL '#{remote_path}'.\n#{e.backtrace.join("\n")}" end return remote_path end |
#get(file) ⇒ Object
Retrieves a file identified by it’s path
Arguments: file: The file path to get from the remote store
Returns: A hash of file object (:path) and corresponding meta data (:data) representing the file in the store
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/filestore/webdav_store.rb', line 73 def get(file) raise FileStoreException, "No file given" if file.nil? or file == '' # Retrieve data from the store result = @connection.get file unless result[:body].nil? inform ObserverAction.new(:type => ObserverAction::TYPE_DAV_GET, :objects => [file], :msg => "Returning file from the remote store") if self.is_a?(ObservedSubject) return { :path => file, :data => result[:body] } else return {} end end |
#remove(file) ⇒ Object
Deletes a file from the remote store
Arguments: file: The remote file path
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/filestore/webdav_store.rb', line 95 def remove(file) raise FileStoreException, "No file given for removal" if (file == '' or file.nil?) begin result = @connection.delete file if result[:header].status.to_s =~ /2\d{2}/ inform ObserverAction.new(:type => ObserverAction::TYPE_DAV_REMOVE, :objects => [id], :msg => "Deleted file from remote store") if self.is_a?(ObservedSubject) else raise "Response code isn't of class 2xx" end rescue Exception => e raise FileStoreException, "Couldn't remove file '#{file}' from remote store.\n#{e.}" end end |
#shutdown ⇒ Object
Shuts down the file store
114 115 116 117 118 119 |
# File 'lib/filestore/webdav_store.rb', line 114 def shutdown @connection.close inform ObserverAction.new(:type => ObserverAction::TYPE_DAV_SHUTDOWN, :msg => "WebDAV store shutdown") if self.is_a?(ObservedSubject) end |