diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b9da1aa..0586c6ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- [#338](https://github.com/JsonApiClient/json_api_client/pull/338) - implement hash and eql? for builder class - [#351](https://github.com/JsonApiClient/json_api_client/pull/351) - Remove rudimental `last_result_set` relationship from serializer ## 1.13.0 diff --git a/lib/json_api_client/query/builder.rb b/lib/json_api_client/query/builder.rb index 7799e67c..0740bbb5 100644 --- a/lib/json_api_client/query/builder.rb +++ b/lib/json_api_client/query/builder.rb @@ -109,6 +109,20 @@ def method_missing(method_name, *args, &block) to_a.send(method_name, *args, &block) end + def hash + [ + klass, + params + ].hash + end + + def ==(other) + return false unless other.is_a?(self.class) + + hash == other.hash + end + alias_method :eql?, :== + protected def _fetch diff --git a/test/unit/query_builder_test.rb b/test/unit/query_builder_test.rb index 87a6233e..4fdeaa29 100644 --- a/test/unit/query_builder_test.rb +++ b/test/unit/query_builder_test.rb @@ -312,4 +312,24 @@ def test_build_propagate_only_path_params assert_equal '123', record.author_id assert_equal [], record.relationships.changed end + + def test_build_hash_sum + a = ArticleNested.where(author_id: '123', name: 'John') + b = ArticleNested.where(author_id: '123', name: 'John') + c = ArticleNested.where(author_id: '123') + d = Article.where(author_id: '123', name: 'John') + assert(a.hash == b.hash) + assert_equal(false, a.hash == c.hash) + assert_equal(false, a.hash == d.hash) + end + + def test_build_eql + a = ArticleNested.where(author_id: '123', name: 'John') + b = ArticleNested.where(author_id: '123', name: 'John') + c = ArticleNested.where(author_id: '123') + d = Article.where(author_id: '123', name: 'John') + assert(a == b) + assert_equal(false, a == c) + assert_equal(false, a == d) + end end