Skip to content

Commit 7580dfe

Browse files
committed
Alias #eql? to #== and define #hash on Protobuf::Message
1 parent b2b816f commit 7580dfe

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

lib/protobuf/message.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ def ==(other)
173173
end
174174
true
175175
end
176+
alias :eql? ==
176177

177178
def [](name)
178179
field = _protobuf_message_field[name]
@@ -196,6 +197,10 @@ def set_field(name, value, ignore_nil_for_repeated, field = nil)
196197
end
197198
end
198199

200+
def hash
201+
to_hash.hash
202+
end
203+
199204
##
200205
# Instance Aliases
201206
#

spec/lib/protobuf/message_spec.rb

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -911,4 +911,50 @@ class MapEntry < ::Protobuf::Message
911911
end
912912
end
913913
end
914+
915+
describe 'equality & hash codes' do
916+
let(:m1) { ::Test::Resource.new(:name => "Jim") }
917+
let(:m2) { ::Test::Resource.new(:date_created => nil, :name => "Jim") }
918+
let(:m3) { ::Test::Resource.new(:date_created => 55, :name => "Jim") }
919+
920+
let(:hash) do
921+
{ m1 => 4, m3 => 6 }
922+
end
923+
924+
it 'works with equality' do
925+
expect(m1.nil?).to eq(false)
926+
expect(m1 == 5).to eq(false)
927+
928+
expect(m1.equal?(m2)).to eq(false)
929+
expect(m1.equal?(m3)).to eq(false)
930+
expect(m2.equal?(m1)).to eq(false)
931+
expect(m2.equal?(m3)).to eq(false)
932+
expect(m3.equal?(m1)).to eq(false)
933+
expect(m3.equal?(m2)).to eq(false)
934+
935+
expect(m1 == m2).to eq(true)
936+
expect(m2 == m1).to eq(true)
937+
expect(m1.eql?(m2)).to eq(true)
938+
expect(m2.eql?(m1)).to eq(true)
939+
940+
expect(m1 == m3).to eq(false)
941+
expect(m2 == m3).to eq(false)
942+
expect(m3 == m1).to eq(false)
943+
expect(m3 == m2).to eq(false)
944+
end
945+
946+
it 'works with hash codes' do
947+
expect(m1.hash).to eq(m2.hash)
948+
expect(m1.hash).to_not eq(m3.hash)
949+
950+
expect([m1] == [m2]).to eq(true)
951+
expect([m1] - [m2]).to eq([])
952+
953+
expect([m1, m3] - [m2]).to eq([m3])
954+
955+
expect(hash[m1]).to eq(4)
956+
expect(hash[m2]).to eq(4)
957+
expect(hash[m3]).to eq(6)
958+
end
959+
end
914960
end

0 commit comments

Comments
 (0)