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 82 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 27 def initialize(parent, hash={}) @data = hash || {} @deleted_hash = {} @parent = parent end
Public Instance Methods
Set value for key.
@param [#key] key @return [String]
# File lib/fog/rackspace/models/storage/metadata.rb, line 68 def []=(key, value) return nil unless key if @data[key.to_s] @data[key.to_s] = value elsif @data[key.to_sym] @data[key.to_sym] = value else @data[key] = value end end
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 37 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 100 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 95 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 44 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 106 def directory? [Fog::Storage::Rackspace::Directory, Fog::Storage::Rackspace::Directories].include? parent_class end
# File lib/fog/rackspace/models/storage/metadata.rb, line 110 def file? [Fog::Storage::Rackspace::File, Fog::Storage::Rackspace::Files].include? parent_class end
# File lib/fog/rackspace/models/storage/metadata.rb, line 118 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 138 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 114 def parent_class parent.is_a?(Class) ? parent : parent.class end
# File lib/fog/rackspace/models/storage/metadata.rb, line 128 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 158 def to_header_key(key, value) prefix = value.nil? ? remove_meta_prefix : meta_prefix prefix + key.to_s.split(/[-_]/).map(&:capitalize).join('-') end
# File lib/fog/rackspace/models/storage/metadata.rb, line 148 def to_key(key) m = key.match meta_prefix_regex return nil unless m && m[1] a = m[1].split('-') a.map!(&:downcase) str = a.join('_') str.to_sym end