Compute only requested attributes.

This commit is contained in:
Lucas Hosseini 2015-10-31 19:20:53 +01:00
parent ecc3b35517
commit 0948c4199a
3 changed files with 5 additions and 10 deletions

View File

@ -238,10 +238,9 @@ module ActiveModel
# Return the +attributes+ of +object+ as presented
# by the serializer.
def attributes
attributes = self.class._attributes.dup
attributes.each_with_object({}) do |name, hash|
def attributes(requested_attrs = nil)
self.class._attributes.each_with_object({}) do |name, hash|
next unless requested_attrs.nil? || requested_attrs.include?(name)
if self.class._fragmented
hash[name] = self.class._fragmented.public_send(name)
else

View File

@ -57,10 +57,7 @@ module ActiveModel
def resource_object_for(options)
cache_check(serializer) do
attributes = serializer.attributes
attributes.slice!(*options[:fields]) if options[:fields]
attributes
serializer.attributes(options[:fields])
end
end
end

View File

@ -140,8 +140,7 @@ module ActiveModel
cache_check(serializer) do
resource_object = resource_identifier_for(serializer)
requested_fields = fieldset && fieldset.fields_for(resource_object[:type])
attributes = serializer.attributes.except(:id)
attributes.slice!(*requested_fields) if requested_fields
attributes = serializer.attributes(requested_fields).except(:id)
resource_object[:attributes] = attributes if attributes.any?
resource_object
end