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

data[R]

@!attribute [rw] data @return [Hash] underlying data store for metadata class

parent[R]

@!attribute [rw] parent @return [Fog::Storage::Rackspace::Directory,Fog::Storage::Rackspace::File] the parent object of the metadata

Public Class Methods

from_headers(parent, headers) click to toggle source

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
new(parent, hash={}) click to toggle source

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) click to toggle source

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
method_missing(method, *args, &block) click to toggle source

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
respond_to?(method_sym, include_private = false) click to toggle source

Returns true if method is implemented by Metadata class @param [Symbol] method_sym @param [Boolean] include_private

Calls superclass method
# 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
to_headers() click to toggle source

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

directory?() click to toggle source
# 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?() click to toggle source
# File lib/fog/rackspace/models/storage/metadata.rb, line 95
def file?
  [Fog::Storage::Rackspace::File, Fog::Storage::Rackspace::Files].include? parent_class
end
meta_prefix() click to toggle source
# 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
meta_prefix_regex() click to toggle source
# 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
parent_class() click to toggle source
# File lib/fog/rackspace/models/storage/metadata.rb, line 99
def parent_class
  parent.is_a?(Class) ? parent : parent.class
end
remove_meta_prefix() click to toggle source
# 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
to_header_key(key, value) click to toggle source
# 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
to_key(key) click to toggle source
# 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