Class: DataMapper::Repository

Inherits:
Object
  • Object
show all
Extended by:
Equalizer
Includes:
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

Methods included from Assertions

#assert_kind_of

Instance Attribute Details

#nameObject (readonly) Also known as: to_sym



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

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


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


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


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

Raises:



64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/dm-core/repository.rb', line 64

def adapter
  # Make adapter instantiation lazy so we can defer repository setup until it's actually
  # needed. Do not remove this code.
  @adapter ||=
    begin
      adapters = self.class.adapters

      unless adapters.key?(@name)
        raise RepositoryNotSetupError, "Adapter not set: #{@name}. Did you forget to setup?"
      end

      adapters[@name]
    end
end

#create(resources) ⇒ Integer

Create one or more resource instances in this repository.

TODO: create example


145
146
147
# File 'lib/dm-core/repository.rb', line 145

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

#delete(collection) ⇒ Integer

Delete one or more resource instances

TODO: create example


194
195
196
197
# File 'lib/dm-core/repository.rb', line 194

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


93
94
95
# File 'lib/dm-core/repository.rb', line 93

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


207
208
209
# File 'lib/dm-core/repository.rb', line 207

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

#new_query(model, options = {}) ⇒ Query

Create a Query or subclass instance for this repository.



130
131
132
# File 'lib/dm-core/repository.rb', line 130

def new_query(model, options = {})
  adapter.new_query(self, model, options)
end

#read(query) ⇒ Array

Retrieve a collection of results of a query

TODO: create example


160
161
162
163
# File 'lib/dm-core/repository.rb', line 160

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



108
109
110
111
112
113
114
115
116
117
118
# File 'lib/dm-core/repository.rb', line 108

def scope
  context = Repository.context

  context << self

  begin
    yield self
  ensure
    context.pop
  end
end

#update(attributes, collection) ⇒ Integer

Update the attributes of one or more resource instances

TODO: create example


178
179
180
181
# File 'lib/dm-core/repository.rb', line 178

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