couchrest_model/lib/couchrest/model/casted_array.rb
Sam Lown c280b3a29b Renaming to CouchRest Model
Refactored basic directory structure.
Moved to ActiveSupport for Validations and Callbacks.
Cleaned up older code, and removed support for text property types.
2010-06-20 22:01:11 +02:00

40 lines
829 B
Ruby

#
# Wrapper around Array so that the casted_by attribute is set in all
# elements of the array.
#
module CouchRest::Model
class CastedArray < Array
attr_accessor :casted_by
attr_accessor :property
def initialize(array, property)
self.property = property
super(array)
end
def << obj
super(instantiate_and_cast(obj))
end
def push(obj)
super(instantiate_and_cast(obj))
end
def []= index, obj
super(index, instantiate_and_cast(obj))
end
protected
def instantiate_and_cast(obj)
if self.casted_by && self.property && obj.class != self.property.type_class
self.property.cast_value(self.casted_by, obj)
else
obj.casted_by = self.casted_by if obj.respond_to?(:casted_by)
obj
end
end
end
end