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
# 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

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

      adapters[@name]
    end
end

#create(resources) ⇒ Integer

Create one or more resource instances in this repository.

TODO: create example


143
144
145
# File 'lib/dm-core/repository.rb', line 143

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

#delete(collection) ⇒ Integer

Delete one or more resource instances

TODO: create example


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

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


91
92
93
# File 'lib/dm-core/repository.rb', line 91

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


209
210
211
# File 'lib/dm-core/repository.rb', line 209

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

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

Create a Query or subclass instance for this repository.



128
129
130
# File 'lib/dm-core/repository.rb', line 128

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

#read(query) ⇒ Mixed

Retrieve a collection of results of a query

TODO: create example


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

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



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

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
182
# 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