Permalink
Browse files

Avoid cloning in Base#attributes. Closes #11047 [juanjo.bazan]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8824 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 3d1a30b commit cadb087deb76e477d5bf557bd3ca67c569095706 @NZKoz NZKoz committed Feb 8, 2008
Showing with 10 additions and 7 deletions.
  1. +10 −7 activerecord/lib/active_record/base.rb
@@ -2212,21 +2212,24 @@ def attributes=(new_attributes, guard_protected_attributes = true)
end
- # Returns a hash of all the attributes with their names as keys and clones of their objects as values.
+ # Returns a hash of all the attributes with their names as keys and the values of the attributes as values.
def attributes(options = nil)
- attributes = clone_attributes :read_attribute
+ attrs = {}
+ self.attribute_names.each do |name|
+ attrs[name]=read_attribute(name)
+ end
if options.nil?
- attributes
+ attrs
else
if except = options[:except]
except = Array(except).collect { |attribute| attribute.to_s }
- except.each { |attribute_name| attributes.delete(attribute_name) }
- attributes
+ except.each { |attribute_name| attrs.delete(attribute_name) }
+ attrs
elsif only = options[:only]
only = Array(only).collect { |attribute| attribute.to_s }
- attributes.delete_if { |key, value| !only.include?(key) }
- attributes
+ attrs.delete_if { |key, value| !only.include?(key) }
+ attrs
else
raise ArgumentError, "Options does not specify :except or :only (#{options.keys.inspect})"
end

0 comments on commit cadb087

Please sign in to comment.