Parent

Class/Module Index [+]

Quicksearch

DataMapper::Adapters::InMemoryAdapter

This is probably the simplest functional adapter possible. It simply stores and queries from a hash containing the model classes as keys, and an array of hashes. It is not persistent whatsoever; when the Ruby process finishes, everything that was stored it lost. However, it doesn’t require any other external libraries, such as data_objects, so it is ideal for writing specs against. It also serves as an excellent example for budding adapter developers, so it is critical that it remains well documented and up to date.

Public Class Methods

new(name, options = {}) click to toggle source

Make a new instance of the adapter. The @records ivar is the ‘data-store’ for this adapter. It is not shared amongst multiple incarnations of this adapter, eg DataMapper.setup(:default, :adapter => :in_memory); DataMapper.setup(:alternate, :adapter => :in_memory) do not share the data-store between them.

@param [String, Symbol] name

The name of the Repository using this adapter.

@param [String, Hash] uri_or_options

The connection uri string, or a hash of options to set up
the adapter

@api semipublic

# File lib/dm-core/adapters/in_memory_adapter.rb, line 97
def initialize(name, options = {})
  super
  @records = {}
end

Public Instance Methods

create(resources) click to toggle source

Used by DataMapper to put records into a data-store: “INSERT” in SQL-speak. It takes an array of the resources (model instances) to be saved. Resources each have a key that can be used to quickly look them up later without searching, if the adapter supports it.

@param [Enumerable(Resource)] resources

The set of resources (model instances)

@api semipublic

# File lib/dm-core/adapters/in_memory_adapter.rb, line 21
def create(resources)
  records = records_for(resources.first.model)

  resources.each do |resource|
    initialize_serial(resource, records.size.succ)
    records << attributes_as_fields(resource.attributes(nil))
  end
end
delete(collection) click to toggle source

Destroys all the records matching the given query. “DELETE” in SQL.

@param [DataMapper::Collection] resources

The collection of resources to delete.

@return [Integer]

The number of records that were deleted.

@api semipublic

# File lib/dm-core/adapters/in_memory_adapter.rb, line 70
def delete(collection)
  records = records_for(collection.model)
  records_to_delete = collection.query.filter_records(records.dup)
  records.replace(records - records_to_delete)
  records_to_delete.size
end
read(query) click to toggle source

Looks up one record or a collection of records from the data-store: “SELECT” in SQL.

@param [Query] query

The query to be used to seach for the resources

@return [Array]

An Array of Hashes containing the key-value pairs for
each record

@api semipublic

# File lib/dm-core/adapters/in_memory_adapter.rb, line 41
def read(query)
  query.filter_records(records_for(query.model).dup)
end
reset() click to toggle source

TODO consider proper automigrate functionality

# File lib/dm-core/adapters/in_memory_adapter.rb, line 78
def reset
  @records = {}
end
update(attributes, collection) click to toggle source

Used by DataMapper to update the attributes on existing records in a data-store: “UPDATE” in SQL-speak. It takes a hash of the attributes to update with, as well as a collection object that specifies which resources should be updated.

@param [Hash] attributes

A set of key-value pairs of the attributes to update the resources with.

@param [DataMapper::Collection] resources

The collection of resources to update.

@api semipublic

# File lib/dm-core/adapters/in_memory_adapter.rb, line 56
def update(attributes, collection)
  attributes = attributes_as_fields(attributes)
  read(collection.query).each { |record| record.update(attributes) }.size
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.