Class: Fog::Storage::Rackspace::Mock::MockContainer

Inherits:
Object
  • Object
show all
Defined in:
lib/fog/rackspace/storage.rb

Overview

An in-memory container for use with Rackspace storage mocks. Includes many ‘objects` mapped by (escaped) object name. Tracks container metadata.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(service) ⇒ MockContainer

Create a new container. Generally, you should call Rackspace::Storage#add_container instead.



132
133
134
135
# File 'lib/fog/rackspace/storage.rb', line 132

def initialize(service)
  @service = service
  @objects, @meta = {}, {}
end

Instance Attribute Details

#metaObject (readonly)

Returns the value of attribute meta.



128
129
130
# File 'lib/fog/rackspace/storage.rb', line 128

def meta
  @meta
end

#objectsObject (readonly)

Returns the value of attribute objects.



128
129
130
# File 'lib/fog/rackspace/storage.rb', line 128

def objects
  @objects
end

#serviceObject (readonly)

Returns the value of attribute service.



128
129
130
# File 'lib/fog/rackspace/storage.rb', line 128

def service
  @service
end

Instance Method Details

#add_object(name, data) ⇒ Object

Add a new MockObject to this container. An existing object with the same name will be overwritten.

Parameters:

  • name (String)

    The object’s name, unescaped.

  • data (String, #read)

    The contents of the object.



188
189
190
# File 'lib/fog/rackspace/storage.rb', line 188

def add_object(name, data)
  @objects[Fog::Rackspace.escape(name)] = MockObject.new(data, service)
end

#bytes_usedInteger

Total sizes of all objects added to this container.

Returns:

  • (Integer)

    The number of bytes occupied by each contained object.



148
149
150
# File 'lib/fog/rackspace/storage.rb', line 148

def bytes_used
  @objects.values.map { |o| o.bytes_used }.inject(0) { |a, b| a + b }
end

#empty?Boolean

Determine if this container contains any MockObjects or not.

Returns:

  • (Boolean)


140
141
142
# File 'lib/fog/rackspace/storage.rb', line 140

def empty?
  @objects.empty?
end

#mock_object(name) ⇒ MockObject?

Access a MockObject within this container by (unescaped) name.

Returns:

  • (MockObject, nil)

    Return the MockObject at this name if one exists; otherwise, ‘nil`.



169
170
171
# File 'lib/fog/rackspace/storage.rb', line 169

def mock_object(name)
  @objects[Fog::Rackspace.escape(name)]
end

#mock_object!(name) ⇒ MockObject

Access a MockObject with a specific name, raising a ‘Fog::Storage::Rackspace::NotFound` exception if none are present.

Parameters:

  • name (String)

    (Unescaped) object name.

Returns:

  • (MockObject)

    The object within this container with the specified name.



179
180
181
# File 'lib/fog/rackspace/storage.rb', line 179

def mock_object!(name)
  mock_object(name) or raise Fog::Storage::Rackspace::NotFound.new
end

#remove_object(name) ⇒ Object

Remove a MockObject from the container by name. No effect if the object is not present beforehand.

Parameters:

  • name (String)

    The (unescaped) object name to remove.



196
197
198
# File 'lib/fog/rackspace/storage.rb', line 196

def remove_object(name)
  @objects.delete Fog::Rackspace.escape(name)
end

#to_headersHash<String, String>

Render the HTTP headers that would be associated with this container.

Returns:

  • (Hash<String, String>)

    Any metadata supplied to this container, plus additional headers indicating the container’s size.



158
159
160
161
162
163
# File 'lib/fog/rackspace/storage.rb', line 158

def to_headers
  @meta.merge({
    'X-Container-Object-Count' => @objects.size,
    'X-Container-Bytes-Used' => bytes_used
  })
end