aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-06-28 11:46:25 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-06-28 11:46:25 -0700
commita5cb5a5af611481e7a69b160983fcac68f37088c (patch)
treef79d9c929d616f0b0d6bd1233cc44bf4c673fc41 /activerecord
parent26caf32949f40993409f71887b2490722749022a (diff)
parenteb22c51173f3ebe0f5a53f8bc57ebc74e4f0a824 (diff)
downloadrails-a5cb5a5af611481e7a69b160983fcac68f37088c.tar.gz
rails-a5cb5a5af611481e7a69b160983fcac68f37088c.tar.bz2
rails-a5cb5a5af611481e7a69b160983fcac68f37088c.zip
Merge pull request #1860 from dmathieu/comparison
Allow comparison on model objects - Closes #1858
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/base.rb9
-rw-r--r--activerecord/test/cases/base_test.rb13
2 files changed, 22 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index ebea4252f9..fd52038647 100644
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -1811,6 +1811,15 @@ MSG
@attributes.frozen?
end
+ # Allows sort on objects
+ def <=>(other_object)
+ if other_object.is_a?(self.class)
+ self.to_key <=> other_object.to_key
+ else
+ nil
+ end
+ end
+
# Backport dup from 1.9 so that initialize_dup() gets called
unless Object.respond_to?(:initialize_dup)
def dup # :nodoc:
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index 2224097f04..5fef3faab9 100644
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -478,6 +478,19 @@ class BasicsTest < ActiveRecord::TestCase
def test_hashing
assert_equal [ Topic.find(1) ], [ Topic.find(2).topic ] & [ Topic.find(1) ]
end
+
+ def test_comparison
+ topic_1 = Topic.create!
+ topic_2 = Topic.create!
+
+ assert_equal [topic_2, topic_1].sort, [topic_1, topic_2]
+ end
+
+ def test_comparison_with_different_objects
+ topic = Topic.create
+ category = Category.create(:name => "comparison")
+ assert_nil topic <=> category
+ end
def test_readonly_attributes
assert_equal Set.new([ 'title' , 'comments_count' ]), ReadonlyTitlePost.readonly_attributes