From 6e638bba594b6164190d2a6fb96ffa07a20b11f3 Mon Sep 17 00:00:00 2001 From: Ernie Miller Date: Sat, 18 Aug 2012 22:33:25 -0400 Subject: Add equality to ALL THE THINGS (that matter) People are often trying to use ARel nodes inside ActiveRecord, and when they do so, lots of things can break, because ActiveRecord relies on Array#uniq and sometimes hash key equality to handle values that end up in wheres, havings, etc. By implementing equality for all the nodes, we should hopefully be able to prevent any nodes (even nodes containing other nodes) from failing an equality check they should otherwise pass, and alleviate many of these errors. Fixes #130 --- test/nodes/test_update_statement.rb | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'test/nodes/test_update_statement.rb') diff --git a/test/nodes/test_update_statement.rb b/test/nodes/test_update_statement.rb index 8920e977b5..920dc6e3ef 100644 --- a/test/nodes/test_update_statement.rb +++ b/test/nodes/test_update_statement.rb @@ -15,4 +15,44 @@ describe Arel::Nodes::UpdateStatement do dolly.values.wont_be_same_as statement.values end end + + describe 'equality' do + it 'is equal with equal ivars' do + statement1 = Arel::Nodes::UpdateStatement.new + statement1.relation = 'zomg' + statement1.wheres = 2 + statement1.values = false + statement1.orders = %w[x y z] + statement1.limit = 42 + statement1.key = 'zomg' + statement2 = Arel::Nodes::UpdateStatement.new + statement2.relation = 'zomg' + statement2.wheres = 2 + statement2.values = false + statement2.orders = %w[x y z] + statement2.limit = 42 + statement2.key = 'zomg' + array = [statement1, statement2] + assert_equal 1, array.uniq.size + end + + it 'is not equal with different ivars' do + statement1 = Arel::Nodes::UpdateStatement.new + statement1.relation = 'zomg' + statement1.wheres = 2 + statement1.values = false + statement1.orders = %w[x y z] + statement1.limit = 42 + statement1.key = 'zomg' + statement2 = Arel::Nodes::UpdateStatement.new + statement2.relation = 'zomg' + statement2.wheres = 2 + statement2.values = false + statement2.orders = %w[x y z] + statement2.limit = 42 + statement2.key = 'wth' + array = [statement1, statement2] + assert_equal 2, array.uniq.size + end + end end -- cgit v1.2.3