lib/zendesk_api/collection.rb in zendesk_api-0.4.0.rc2 vs lib/zendesk_api/collection.rb in zendesk_api-0.4.0.rc3
- old
+ new
@@ -124,12 +124,11 @@
@resources << item
else
raise "this collection is for #{@resource_class}"
end
else
- item.merge!(:association => @association) if item.is_a?(Hash)
- @resources << @resource_class.new(@client, item)
+ @resources << wrap_resource(item)
end
end
# The API path to this collection
def path
@@ -140,11 +139,11 @@
# @param [Boolean] reload Whether to disregard cache
def fetch!(reload = false)
if @resources && (!@fetchable || !reload)
return @resources
elsif association && association.options.parent && association.options.parent.new_record?
- return @resources = []
+ return (@resources = [])
end
@response = get_response(@query || self.path)
handle_response(@response.body.dup)
@@ -297,21 +296,23 @@
self.next
end
end
def _save(method = :save)
- if @resources
- @resources.map! do |item|
- if item.respond_to?(method) && !item.changes.empty?
- item.send(method)
- end
+ return self unless @resources
- item
+ result = true
+
+ @resources.map! do |item|
+ if item.respond_to?(method) && item.changed?
+ result &&= item.send(method)
end
+
+ item
end
- self
+ result
end
## Initialize
def join_special_params
@@ -349,13 +350,28 @@
end
end
def handle_response(body)
results = body.delete(@resource_class.model_key) || body.delete("results")
- @resources = results.map {|res| @resource_class.new(@client, res)}
+ @resources = results.map do |res|
+ wrap_resource(res)
+ end
+
set_page_and_count(body)
set_includes(@resources, @includes, body)
+ end
+
+ # Simplified Associations#wrap_resource
+ def wrap_resource(res)
+ case res
+ when Array
+ wrap_resource(Hash[*res])
+ when Hash
+ @resource_class.new(@client, res.merge(:association => association))
+ else
+ @resource_class.new(@client, :id => res, :association => association)
+ end
end
## Method missing
def array_method(name, *args, &block)