aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xactiverecord/lib/active_record/base.rb27
-rwxr-xr-xactiverecord/test/cases/base_test.rb17
2 files changed, 5 insertions, 39 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index cd33c8891c..94ff704b25 100755
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -2214,35 +2214,18 @@ module ActiveRecord #:nodoc:
# Returns a hash of all the attributes with their names as keys and the values of the attributes as values.
def attributes(options = nil)
- attrs = {}
- self.attribute_names.each do |name|
- attrs[name]=read_attribute(name)
- end
-
- if options.nil?
+ self.attribute_names.inject({}) do |attrs, name|
+ attrs[name] = read_attribute(name)
attrs
- else
- if except = options[:except]
- except = Array(except).collect { |attribute| attribute.to_s }
- except.each { |attribute_name| attrs.delete(attribute_name) }
- attrs
- elsif only = options[:only]
- only = Array(only).collect { |attribute| attribute.to_s }
- attrs.delete_if { |key, value| !only.include?(key) }
- attrs
- else
- raise ArgumentError, "Options does not specify :except or :only (#{options.keys.inspect})"
- end
end
end
# Returns a hash of attributes before typecasting and deserialization.
def attributes_before_type_cast
- attrs = {}
- self.attribute_names.each do |name|
- attrs[name]=read_attribute_before_type_cast(name)
+ self.attribute_names.inject({}) do |attrs, name|
+ attrs[name] = read_attribute_before_typecast(name)
+ attrs
end
- attrs
end
# Format attributes nicely for inspect.
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index e98a756870..9fde3130bd 100755
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -1778,23 +1778,6 @@ class BasicsTest < ActiveRecord::TestCase
assert xml.include?(%(<arbitrary-element>#{value}</arbitrary-element>))
end
- def test_except_attributes
- assert_equal(
- %w( author_name type id approved replies_count bonus_time written_on content author_email_address parent_id last_read).sort,
- topics(:first).attributes(:except => :title).keys.sort
- )
-
- assert_equal(
- %w( replies_count bonus_time written_on content author_email_address parent_id last_read).sort,
- topics(:first).attributes(:except => [ :title, :id, :type, :approved, :author_name ]).keys.sort
- )
- end
-
- def test_include_attributes
- assert_equal(%w( title ), topics(:first).attributes(:only => :title).keys)
- assert_equal(%w( title author_name type id approved ).sort, topics(:first).attributes(:only => [ :title, :id, :type, :approved, :author_name ]).keys.sort)
- end
-
def test_type_name_with_module_should_handle_beginning
assert_equal 'ActiveRecord::Person', ActiveRecord::Base.send(:type_name_with_module, 'Person')
assert_equal '::Person', ActiveRecord::Base.send(:type_name_with_module, '::Person')