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)