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

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:



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

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



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

Parameters:

  • collection (Collection)

    collection of records to be deleted

Returns:

  • (Integer)

    the number of records deleted



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

Parameters:

  • model (Model)

    Model whose identity map should be returned

Returns:

  • (IdentityMap)

    The IdentityMap for model in this Repository



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

Returns:

  • (String)

    human readable representation of the repository



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.

Parameters:

  • model (Model)

    the Model to retrieve results from

  • options (Hash) (defaults to: {})

    the conditions and scope

Returns:



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

Parameters:

  • query (Query)

    composition of the query to perform

Returns:

  • (Array)

    result set of the query



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

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



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