def cast(parent, value)
return value unless casted
if array
if value.nil?
value = []
elsif value.is_a?(Hash)
value = parameter_hash_to_array(value)
elsif !value.is_a?(Array)
raise "Expecting an array or keyed hash for property #{parent.class.name}##{self.name}"
end
arr = value.collect { |data| cast_value(parent, data) }
arr.reject!{ |data| data.nil? } unless allow_blank
CastedArray.new(arr, self, parent)
elsif (type == Object || type == Hash) && (value.is_a?(Hash))
CastedHash[value, self, parent]
elsif !value.nil?
cast_value(parent, value)
end
end