class Fog::Storage::Rackspace::Metadata
Constants
- CONTAINER_KEY_REGEX
- CONTAINER_META_PREFIX
- CONTAINER_REMOVE_META_PREFIX
- DUMMY_VALUE
Cloud
Files
will ignore headers without a value- OBJECT_KEY_REGEX
- OBJECT_META_PREFIX
- OBJECT_REMOVE_META_PREFIX
Attributes
@!attribute [rw] data @return [Hash] underlying data store for metadata class
@!attribute [rw] parent @return [Fog::Storage::Rackspace::Directory,Fog::Storage::Rackspace::File] the parent object of the metadata
Public Class Methods
Creates metadata object from Cloud File
Headers @param [Fog::Storage::Rackspace::Directory,Fog::Storage::Rackspace::File] parent object of the metadata @param [Hash] headers Cloud File
headers
# File lib/fog/rackspace/models/storage/metadata.rb, line 67 def self.from_headers(parent, headers) metadata = Metadata.new(parent) headers.each_pair do |k, v| key = metadata.send(:to_key, k) next unless key metadata.data[key] = v end metadata end
Initialize @param [Fog::Storage::Rackspace::Directory,Fog::Storage::Rackspace::File] parent object of the metadata @param [Hash] hash containing initial metadata values
# File lib/fog/rackspace/models/storage/metadata.rb, line 35 def initialize(parent, hash={}) @data = hash || {} @deleted_hash = {} @parent = parent end
Public Instance Methods
Delete key value pair from metadata @param [String] key to be deleted @return [Object] returns value for key @note Metadata
must be deleted using this method in order to properly remove it from Cloud Files
# File lib/fog/rackspace/models/storage/metadata.rb, line 46 def delete(key) data.delete(key) @deleted_hash[key] = nil end
Invoked by Ruby when obj is sent a message it cannot handle.
# File lib/fog/rackspace/models/storage/metadata.rb, line 85 def method_missing(method, *args, &block) data.send(method, *args, &block) end
Returns true if method is implemented by Metadata
class @param [Symbol] method_sym @param [Boolean] include_private
# File lib/fog/rackspace/models/storage/metadata.rb, line 80 def respond_to?(method_sym, include_private = false) super(method_sym, include_private) || data.respond_to?(method_sym, include_private) end
Returns metadata in a format expected by Cloud Files
@return [Hash] Metadata
in a format expected by Cloud Files
# File lib/fog/rackspace/models/storage/metadata.rb, line 53 def to_headers headers = {} h = data.merge(@deleted_hash) h.each_pair do |k,v| key = to_header_key(k,v) headers[key] = v || DUMMY_VALUE end headers end
Private Instance Methods
# File lib/fog/rackspace/models/storage/metadata.rb, line 91 def directory? [Fog::Storage::Rackspace::Directory, Fog::Storage::Rackspace::Directories].include? parent_class end
# File lib/fog/rackspace/models/storage/metadata.rb, line 95 def file? [Fog::Storage::Rackspace::File, Fog::Storage::Rackspace::Files].include? parent_class end
# File lib/fog/rackspace/models/storage/metadata.rb, line 103 def meta_prefix if directory? CONTAINER_META_PREFIX elsif file? OBJECT_META_PREFIX else raise "Metadata prefix is unknown for #{parent_class}" end end
# File lib/fog/rackspace/models/storage/metadata.rb, line 123 def meta_prefix_regex if directory? CONTAINER_KEY_REGEX elsif file? OBJECT_KEY_REGEX else raise "Metadata prefix is unknown for #{parent_class}" end end
# File lib/fog/rackspace/models/storage/metadata.rb, line 99 def parent_class parent.is_a?(Class) ? parent : parent.class end
# File lib/fog/rackspace/models/storage/metadata.rb, line 113 def remove_meta_prefix if directory? CONTAINER_REMOVE_META_PREFIX elsif file? OBJECT_REMOVE_META_PREFIX else raise "Remove Metadata prefix is unknown for #{parent_class}" end end
# File lib/fog/rackspace/models/storage/metadata.rb, line 143 def to_header_key(key, value) prefix = value.nil? ? remove_meta_prefix : meta_prefix prefix + key.to_s.split(/[-_]/).collect(&:capitalize).join('-') end
# File lib/fog/rackspace/models/storage/metadata.rb, line 133 def to_key(key) m = key.match meta_prefix_regex return nil unless m && m[1] a = m[1].split('-') a.collect!(&:downcase) str = a.join('_') str.to_sym end