From 35134abe8fe7a29051efcd692a1be27e8e9f13ab Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 13 Dec 2020 04:02:25 -0600 Subject: [PATCH] post query builder: fix incompatibilities with Rails 6.1. * Rename the `#negate` and `#and` methods that we monkey patch into ActiveRecord::Relation. These methods are now defined in Rails 6.1, but they shadow our methods and have slightly different behavior. * Fix a call to `invert`. It no longer accepts an argument. --- app/logical/concerns/searchable.rb | 7 ++++--- app/logical/post_query_builder.rb | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/logical/concerns/searchable.rb b/app/logical/concerns/searchable.rb index 151ad5f86..3cde3b5ec 100644 --- a/app/logical/concerns/searchable.rb +++ b/app/logical/concerns/searchable.rb @@ -10,12 +10,13 @@ module Searchable 1 + params.values.map { |v| parameter_hash?(v) ? parameter_depth(v) : 1 }.max end - def negate(kind = :nand) - unscoped.where(all.where_clause.invert(kind).ast) + def negate_relation + unscoped.where(all.where_clause.invert.ast) end # XXX hacky method to AND two relations together. - def and(relation) + # XXX Replace with ActiveRecord#and (cf https://github.com/rails/rails/pull/39328) + def and_relation(relation) q = all q = q.where(relation.where_clause.ast) if relation.where_clause.present? q = q.joins(relation.joins_values + q.joins_values) if relation.joins_values.present? diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index 19c67138e..4046485f1 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -92,8 +92,8 @@ class PostQueryBuilder def metatags_match(metatags, relation) metatags.each do |metatag| clause = metatag_matches(metatag.name, metatag.value, quoted: metatag.quoted) - clause = clause.negate if metatag.negated - relation = relation.and(clause) + clause = clause.negate_relation if metatag.negated + relation = relation.and_relation(clause) end relation