lib/fog/azurerm/models/storage/directory.rb in fog-azure-rm-0.1.1 vs lib/fog/azurerm/models/storage/directory.rb in fog-azure-rm-0.1.2

- old
+ new

@@ -1,151 +1,151 @@ -module Fog - module Storage - class AzureRM - # This class is giving implementation of create and delete a container. - class Directory < Fog::Model - VALID_ACLS = ['container', 'blob', 'unknown', nil].freeze - - attr_writer :acl - - identity :key, aliases: %w(Name name) - attribute :etag, aliases: %w(Etag ETag) - attribute :last_modified, aliases: %w(Last-Modified LastModified), type: 'time' - attribute :lease_duration, aliases: %w(Lease-Duration LeaseDuration) - attribute :lease_state, aliases: %w(Lease-State LeaseState) - attribute :lease_status, aliases: %w(Lease-Status LeaseStatus) - - attribute :metadata - - # Set the the permission - # - # @param new_acl [String] permission. Options: container, blob or nil. unknown is for internal usage. - # container: Full public read access. Container and blob data can be read via anonymous request. - # Clients can enumerate blobs within the container via anonymous request, but cannot - # enumerate containers within the storage account. - # blob: Public read access for blobs only. Blob data within this container can be read via - # anonymous request, but container data is not available. Clients cannot enumerate blobs - # within the container via anonymous request. - # nil: No public read access. Container and blob data can be read by the account owner only. - # unknown: Internal usage in fog-azure-rm. - # - # @return [String] Permission. - # - # @exception ArgumentError Raised when new_acl is not 'container', 'blob', nil or 'unknown'. - # - # Reference: https://msdn.microsoft.com/en-us/library/azure/dd179391.aspx - # - def acl=(new_acl) - raise ArgumentError.new("acl must be one of [#{VALID_ACLS.join(', ')}nil]") unless VALID_ACLS.include?(new_acl) - - attributes[:acl] = new_acl - end - - # Get the the permission - # - # required attributes: key - # - # @return [String] Permission. - # - def acl - requires :key - - return attributes[:acl] if attributes[:acl] != 'unknown' || !persisted? - - data = service.get_container_acl(key) - attributes[:acl] = data[0] - end - - # Destroy directory. - # - # required attributes: key - # - # @return [Boolean] True if successful - # - def destroy - requires :key - - service.delete_container(key) - end - - # Get files under this directory. - # If you have set max_results or max_keys when getting this directory by directories.get, - # files may be incomplete. You need to use files.all to get all files under this directory. - # - # @return [Fog::Storage::AzureRM::Files] Files. - # - def files - @files ||= Fog::Storage::AzureRM::Files.new(directory: self, service: service) - end - - # Set the container permission to public or private - # - # @param [Boolean] True: public(container); False: private(nil) - # - # @return [Boolean] True if public; Otherwise return false. - # - def public=(new_public) - attributes[:acl] = new_public ? 'container' : nil - new_public - end - - # Get the public URL of the directory - # - # required attributes: key - # - # @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 public URL. - # - def public_url(options = {}) - requires :key - - service.get_container_url(key, options) if acl == 'container' - end - - # Create/Update the directory - # - # required attributes: key - # - # @param options [Hash] - # @option options [Boolean] is_create Sets whether to create or update the directory. Default is true(create). - # Will update metadata and acl when is_create is set to false. - # - # @return [Boolean] True if successful. - # - def save(options = {}) - requires :key - - is_create = options.delete(:is_create) - if is_create.nil? || is_create - options = {} - options[:public_access_level] = acl if acl != 'unknown' - options[:metadata] = metadata if metadata - - container = service.create_container(key, options) - else - service.put_container_acl(key, acl) if acl != 'unknown' - service.put_container_metadata(key, metadata) if metadata - container = service.get_container_properties(key) - end - - attributes[:is_persisted] = true - data = parse_storage_object(container) - merge_attributes(data) - - true - end - - # Check whether the directory is created. - # - # @return [Boolean] True if the file is created. Otherwise return false. - # - def persisted? - # is_persisted is true in case of directories.get or after #save - # last_modified is set in case of directories.all - attributes[:is_persisted] || !attributes[:last_modified].nil? - end - end - end - end -end +module Fog + module Storage + class AzureRM + # This class is giving implementation of create and delete a container. + class Directory < Fog::Model + VALID_ACLS = ['container', 'blob', 'unknown', nil].freeze + + attr_writer :acl + + identity :key, aliases: %w(Name name) + attribute :etag, aliases: %w(Etag ETag) + attribute :last_modified, aliases: %w(Last-Modified LastModified), type: 'time' + attribute :lease_duration, aliases: %w(Lease-Duration LeaseDuration) + attribute :lease_state, aliases: %w(Lease-State LeaseState) + attribute :lease_status, aliases: %w(Lease-Status LeaseStatus) + + attribute :metadata + + # Set the the permission + # + # @param new_acl [String] permission. Options: container, blob or nil. unknown is for internal usage. + # container: Full public read access. Container and blob data can be read via anonymous request. + # Clients can enumerate blobs within the container via anonymous request, but cannot + # enumerate containers within the storage account. + # blob: Public read access for blobs only. Blob data within this container can be read via + # anonymous request, but container data is not available. Clients cannot enumerate blobs + # within the container via anonymous request. + # nil: No public read access. Container and blob data can be read by the account owner only. + # unknown: Internal usage in fog-azure-rm. + # + # @return [String] Permission. + # + # @exception ArgumentError Raised when new_acl is not 'container', 'blob', nil or 'unknown'. + # + # Reference: https://msdn.microsoft.com/en-us/library/azure/dd179391.aspx + # + def acl=(new_acl) + raise ArgumentError.new("acl must be one of [#{VALID_ACLS.join(', ')}nil]") unless VALID_ACLS.include?(new_acl) + + attributes[:acl] = new_acl + end + + # Get the the permission + # + # required attributes: key + # + # @return [String] Permission. + # + def acl + requires :key + + return attributes[:acl] if attributes[:acl] != 'unknown' || !persisted? + + data = service.get_container_acl(key) + attributes[:acl] = data[0] + end + + # Destroy directory. + # + # required attributes: key + # + # @return [Boolean] True if successful + # + def destroy + requires :key + + service.delete_container(key) + end + + # Get files under this directory. + # If you have set max_results or max_keys when getting this directory by directories.get, + # files may be incomplete. You need to use files.all to get all files under this directory. + # + # @return [Fog::Storage::AzureRM::Files] Files. + # + def files + @files ||= Fog::Storage::AzureRM::Files.new(directory: self, service: service) + end + + # Set the container permission to public or private + # + # @param [Boolean] True: public(container); False: private(nil) + # + # @return [Boolean] True if public; Otherwise return false. + # + def public=(new_public) + attributes[:acl] = new_public ? 'container' : nil + new_public + end + + # Get the public URL of the directory + # + # required attributes: key + # + # @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 public URL. + # + def public_url(options = {}) + requires :key + + service.get_container_url(key, options) if acl == 'container' + end + + # Create/Update the directory + # + # required attributes: key + # + # @param options [Hash] + # @option options [Boolean] is_create Sets whether to create or update the directory. Default is true(create). + # Will update metadata and acl when is_create is set to false. + # + # @return [Boolean] True if successful. + # + def save(options = {}) + requires :key + + is_create = options.delete(:is_create) + if is_create.nil? || is_create + options = {} + options[:public_access_level] = acl if acl != 'unknown' + options[:metadata] = metadata if metadata + + container = service.create_container(key, options) + else + service.put_container_acl(key, acl) if acl != 'unknown' + service.put_container_metadata(key, metadata) if metadata + container = service.get_container_properties(key) + end + + attributes[:is_persisted] = true + data = parse_storage_object(container) + merge_attributes(data) + + true + end + + # Check whether the directory is created. + # + # @return [Boolean] True if the file is created. Otherwise return false. + # + def persisted? + # is_persisted is true in case of directories.get or after #save + # last_modified is set in case of directories.all + attributes[:is_persisted] || !attributes[:last_modified].nil? + end + end + end + end +end