lib/fog/azurerm/models/storage/files.rb in fog-azure-rm-0.1.0 vs lib/fog/azurerm/models/storage/files.rb in fog-azure-rm-0.1.1
- old
+ new
@@ -1,27 +1,182 @@
module Fog
module Storage
class AzureRM
# This class is giving implementation of listing blobs.
class Files < Fog::Collection
- model File
attribute :directory
+ attribute :delimiter, aliases: 'Delimiter'
+ attribute :marker, aliases: 'Marker'
+ attribute :max_results, aliases: %w(max-results MaxResults max_keys MaxKeys max-keys)
+ attribute :next_marker, aliases: %w(NextMarker next-marker)
+ attribute :prefix, aliases: 'Prefix'
- def all(options = { metadata: true })
- files = []
- service.list_blobs(directory, options).each do |blob|
- hash = File.parse blob
- hash['directory'] = directory
- files << hash
+ model Fog::Storage::AzureRM::File
+
+ # List all files(blobs) under the directory.
+ #
+ # required attributes: directory
+ #
+ # @param options [Hash]
+ # @option options [String] max_keys or
+ # max_results Sets the maximum number of files to return.
+ # @option options [String] delimiter Sets to cause that the operation returns a BlobPrefix element in the response body that acts
+ # as a placeholder for all files whose names begin with the same substring up to the appearance
+ # of the delimiter character. The delimiter may be a single character or a string.
+ # @option options [String] marker Sets the identifier that specifies the portion of the list to be returned.
+ # @option options [String] prefix Sets filters the results to return only files whose name begins with the specified prefix.
+ #
+ # @return [Fog::Storage::AzureRM::Files] Return nil if the directory does not exist.
+ #
+ def all(options = {})
+ requires :directory
+
+ options = {
+ max_results: max_results,
+ delimiter: delimiter,
+ marker: marker,
+ prefix: prefix
+ }.merge!(options)
+ options = options.reject { |_key, value| value.nil? || value.to_s.empty? }
+ merge_attributes(options)
+ parent = directory.collection.get(
+ directory.key,
+ options
+ )
+ return nil unless parent
+
+ merge_attributes(parent.files.attributes)
+ load(parent.files.map(&:attributes))
+ end
+
+ # Enumerate every file under the directory if block_given?
+ #
+ # @return [Fog::Storage::AzureRM::Files]
+ #
+ alias each_file_this_page each
+ def each
+ if block_given?
+ subset = dup.all
+
+ subset.each_file_this_page { |f| yield f }
+ while subset.next_marker
+ subset = subset.all(marker: subset.next_marker)
+ subset.each_file_this_page { |f| yield f }
+ end
end
- load files
+
+ self
end
- def get(directory, name)
- file = File.new(service: service)
- file.directory = directory
- file.key = name
- file
+ # Get the file(blob) with full content as :body with the given name.
+ #
+ # required attributes: directory
+ #
+ # @param key [String] Name of file
+ # @param options [Hash]
+ # @option options [String] block_size Sets buffer size when block_given? is true. Default is 32 MB
+ #
+ # @return [Fog::Storage::AzureRM::File] A file. Return nil if the file does not exist.
+ #
+ def get(key, options = {}, &block)
+ requires :directory
+
+ blob, content = service.get_blob(directory.key, key, options, &block)
+ data = parse_storage_object(blob)
+ file_data = data.merge(
+ body: content,
+ key: key
+ )
+ new(file_data)
+ rescue => error
+ return nil if error.message == 'NotFound'
+ raise error
+ end
+
+ # Get the URL of the file(blob) with the given name.
+ #
+ # required attributes: directory
+ #
+ # @param key [String] Name of file
+ # @param expires [Time] The time at which the shared access signature becomes invalid, in a UTC format.
+ # @param options [Hash]
+ # @option options [String] scheme Sets which URL to get, http or https. Options: https or http. Default is https.
+ #
+ # @return [String] A URL.
+ #
+ def get_url(key, expires, options = {})
+ requires :directory
+
+ if options[:scheme] == 'http'
+ get_http_url(key, expires, options)
+ else
+ get_https_url(key, expires, options)
+ end
+ end
+
+ # Get the http URL of the file(blob) with the given name.
+ #
+ # required attributes: directory
+ #
+ # @param key [String] Name of file
+ # @param expires [Time] The time at which the shared access signature becomes invalid, in a UTC format.
+ # @param options [Hash] Unused. To keep same interface as other providers.
+ #
+ # @return [String] A http URL.
+ #
+ def get_http_url(key, expires, _options = {})
+ requires :directory
+
+ service.get_blob_http_url(directory.key, key, expires)
+ end
+
+ # Get the https URL of the file(blob) with the given name.
+ #
+ # required attributes: directory
+ #
+ # @param key [String] Name of file
+ # @param expires [Time] The time at which the shared access signature becomes invalid, in a UTC format.
+ # @param options [Hash] Unused. To keep same interface as other providers.
+ #
+ # @return [String] A https URL.
+ #
+ def get_https_url(key, expires, _options = {})
+ requires :directory
+
+ service.get_blob_https_url(directory.key, key, expires)
+ end
+
+ # Get the file(blob) without content with the given name.
+ #
+ # required attributes: directory
+ #
+ # @param key [String] Name of file
+ # @param options [Hash]
+ #
+ # @return [Fog::Storage::AzureRM::File] A file. Return nil if the file does not exist.
+ #
+ def head(key, options = {})
+ requires :directory
+
+ blob = service.get_blob_properties(directory.key, key, options)
+ data = parse_storage_object(blob)
+ file_data = data.merge(key: key)
+ new(file_data)
+ rescue => error
+ return nil if error.message == 'NotFound'
+ raise error
+ end
+
+ # Create a new file.
+ #
+ # required attributes: directory
+ #
+ # @return [Fog::Storage::AzureRM::File] A file. You need to use File.save to upload this new file.
+ #
+ def new(attributes = {})
+ requires :directory
+
+ super({ directory: directory }.merge!(attributes))
end
end
end
end
end