Class: DataMapper::Repository

Inherits:
Object
  • Object
show all
Extended by:
Equalizer
Includes:
Extlib::Assertions
Defined in:
lib/dm-core/repository.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Equalizer

equalize

Instance Attribute Details

#nameObject (readonly)

TODO: document



47
48
49
# File 'lib/dm-core/repository.rb', line 47

def name
  @name
end

Class Method Details

.adaptersHash(Symbol => Adapters::AbstractAdapter)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Get the list of adapters registered for all Repositories, keyed by repository name.

TODO: create example

Returns:



17
18
19
# File 'lib/dm-core/repository.rb', line 17

def self.adapters
  @adapters ||= {}
end

.contextArray

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Get the stack of current repository contexts

TODO: create example

Returns:

  • (Array)

    List of Repository contexts for the current Thread



29
30
31
# File 'lib/dm-core/repository.rb', line 29

def self.context
  Thread.current[:dm_repository_contexts] ||= []
end

.default_nameSymbol

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Get the default name of this Repository

TODO: create example

Returns:

  • (Symbol)

    the default name of this repository



41
42
43
# File 'lib/dm-core/repository.rb', line 41

def self.default_name
  :default
end

Instance Method Details

#adapterAdapters::AbstractAdapter

Get the adapter for this repository

Lazy loads adapter setup from registered adapters

TODO: create example

Returns:

Raises:



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/dm-core/repository.rb', line 62

def adapter
  # Make adapter instantiation lazy so we can defer repository setup until it's actually
  # needed. Do not remove this code.
  @adapter ||=
    begin
      raise RepositoryNotSetupError, "Adapter not set: #{@name}. Did you forget to setup?" \
        unless self.class.adapters.key?(@name)

      self.class.adapters[@name]
    end
end

#create(resources) ⇒ Integer

Create one or more resource instances in this repository.

TODO: create example

Parameters:

  • resources (Enumerable(Resource))

    The list of resources (model instances) to create

Returns:

  • (Integer)

    The number of records that were actually saved into the data-store



124
125
126
# File 'lib/dm-core/repository.rb', line 124

def create(resources)
  adapter.create(resources)
end

#delete(collection) ⇒ Integer

Delete one or more resource instances

TODO: create example

Parameters:

  • collection (Collection)

    collection of records to be deleted

Returns:

  • (Integer)

    the number of records deleted



173
174
175
176
# File 'lib/dm-core/repository.rb', line 173

def delete(collection)
  return 0 unless collection.query.valid?
  adapter.delete(collection)
end

#identity_map(model) ⇒ IdentityMap

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Get the identity for a particular model within this repository.

If one doesn’t yet exist, create a new default in-memory IdentityMap for the requested model.

TODO: create example

Parameters:

  • model (Model)

    Model whose identity map should be returned

Returns:

  • (IdentityMap)

    The IdentityMap for model in this Repository



88
89
90
# File 'lib/dm-core/repository.rb', line 88

def identity_map(model)
  @identity_maps[model.base_model] ||= IdentityMap.new
end

#inspectString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return a human readable representation of the repository

TODO: create example

Returns:

  • (String)

    human readable representation of the repository



186
187
188
# File 'lib/dm-core/repository.rb', line 186

def inspect
  "#<#{self.class.name} @name=#{@name}>"
end

#read(query) ⇒ Array

Retrieve a collection of results of a query

TODO: create example

Parameters:

  • query (Query)

    composition of the query to perform

Returns:

  • (Array)

    result set of the query



139
140
141
142
# File 'lib/dm-core/repository.rb', line 139

def read(query)
  return [] unless query.valid?
  query.model.load(adapter.read(query), query)
end

#scope {|repository| ... } ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Executes a block in the scope of this Repository

TODO: create example

Yields:

  • execute block in the scope of this Repository

Yield Parameters:

  • repository (Repository)

    yields self within the block



103
104
105
106
107
108
109
110
111
# File 'lib/dm-core/repository.rb', line 103

def scope
  Repository.context << self

  begin
    yield self
  ensure
    Repository.context.pop
  end
end

#update(attributes, collection) ⇒ Integer

Update the attributes of one or more resource instances

TODO: create example

Parameters:

  • attributes (Hash(Property => Object))

    hash of attribute values to set, keyed by Property

  • collection (Collection)

    collection of records to be updated

Returns:

  • (Integer)

    the number of records updated



157
158
159
160
# File 'lib/dm-core/repository.rb', line 157

def update(attributes, collection)
  return 0 unless collection.query.valid?
  adapter.update(attributes, collection)
end