Class: CouchRest::Model::CollectionOfProxy

Inherits:
CastedArray
  • Object
show all
Defined in:
lib/couchrest/model/associations.rb

Overview

Special proxy for a collection of items so that adding and removing to the list automatically updates the associated property.

Instance Attribute Summary

Attributes inherited from CastedArray

#casted_by_property

Instance Method Summary collapse

Methods inherited from CastedArray

#as_couch_json, #build, #clear, #delete, #delete_at, #insert

Methods included from Dirty

#couchrest_attribute_will_change!, #couchrest_parent_will_change!, #use_dirty?

Methods included from CastedBy

#base_doc, #base_doc?

Constructor Details

#initialize(array, property, parent) ⇒ CollectionOfProxy

Returns a new instance of CollectionOfProxy



183
184
185
186
187
188
189
190
191
# File 'lib/couchrest/model/associations.rb', line 183

def initialize(array, property, parent)
  (array ||= []).compact!
  super(array, property, parent)
  casted_by[casted_by_property.to_s] = [] # replace the original array!
  array.compact.each do |obj|
    check_obj(obj)
    casted_by[casted_by_property.to_s] << obj.id
  end
end

Instance Method Details

#<<(obj) ⇒ Object



193
194
195
196
197
# File 'lib/couchrest/model/associations.rb', line 193

def << obj
  check_obj(obj)
  casted_by[casted_by_property.to_s] << obj.id
  super(obj)
end

#[]=(index, obj) ⇒ Object



211
212
213
214
215
# File 'lib/couchrest/model/associations.rb', line 211

def []= index, obj
  check_obj(obj)
  casted_by[casted_by_property.to_s][index] = obj.id
  super(index, obj)
end

#popObject



217
218
219
220
# File 'lib/couchrest/model/associations.rb', line 217

def pop
  casted_by[casted_by_property.to_s].pop
  super
end

#push(obj) ⇒ Object



199
200
201
202
203
# File 'lib/couchrest/model/associations.rb', line 199

def push(obj)
  check_obj(obj)
  casted_by[casted_by_property.to_s].push obj.id
  super(obj)
end

#shiftObject



222
223
224
225
# File 'lib/couchrest/model/associations.rb', line 222

def shift
  casted_by[casted_by_property.to_s].shift
  super
end

#unshift(obj) ⇒ Object



205
206
207
208
209
# File 'lib/couchrest/model/associations.rb', line 205

def unshift(obj)
  check_obj(obj)
  casted_by[casted_by_property.to_s].unshift obj.id
  super(obj)
end