aboutsummaryrefslogtreecommitdiffstats
path: root/activeresource/lib
diff options
context:
space:
mode:
Diffstat (limited to 'activeresource/lib')
-rw-r--r--activeresource/lib/active_resource/base.rb16
1 files changed, 16 insertions, 0 deletions
diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb
index 9a810e4adf..a8918b1eee 100644
--- a/activeresource/lib/active_resource/base.rb
+++ b/activeresource/lib/active_resource/base.rb
@@ -111,6 +111,22 @@ module ActiveResource
attributes[self.class.primary_key] = id
end
+ # True if and only if +other+ is the same object or is an instance of the same class, is not new?, and has the same id.
+ def ==(other)
+ other.equal?(self) || (other.instance_of?(self.class) && !other.new? && other.id == id)
+ end
+
+ # Delegates to ==
+ def eql?(other)
+ self == other
+ end
+
+ # Delegates to id in order to allow two resources of the same type and id to work with something like:
+ # [Person.find(1), Person.find(2)] & [Person.find(1), Person.find(4)] # => [Person.find(1)]
+ def hash
+ id.hash
+ end
+
def save
new? ? create : update
end