From c0f744f84dd8e664a33c2f45f3c55d4654657114 Mon Sep 17 00:00:00 2001 From: evazion Date: Wed, 13 Oct 2021 04:10:23 -0500 Subject: [PATCH] Fix #4893: Add a FIELD_present parameter variation for text fields. Usage: * https://danbooru.donmai.us/wiki_pages.json?search[body_present]=true * https://danbooru.donmai.us/wiki_pages.json?search[body_present]=false --- app/logical/concerns/searchable.rb | 8 ++++++++ test/unit/concerns/searchable.rb | 3 +++ 2 files changed, 11 insertions(+) diff --git a/app/logical/concerns/searchable.rb b/app/logical/concerns/searchable.rb index eb7c62183..aefeda4ad 100644 --- a/app/logical/concerns/searchable.rb +++ b/app/logical/concerns/searchable.rb @@ -307,6 +307,14 @@ module Searchable relation = relation.where(attr => params[attr]) end + if params[:"#{attr}_present"].present? && params[:"#{attr}_present"].truthy? + relation = relation.where.not(attr => "") + end + + if params[:"#{attr}_present"].present? && params[:"#{attr}_present"].falsy? + relation = relation.where(attr => "") + end + if params[:"#{attr}_eq"].present? relation = relation.where(attr => params[:"#{attr}_eq"]) end diff --git a/test/unit/concerns/searchable.rb b/test/unit/concerns/searchable.rb index aaed24869..0d6fd85a5 100644 --- a/test/unit/concerns/searchable.rb +++ b/test/unit/concerns/searchable.rb @@ -82,6 +82,9 @@ class SearchableTest < ActiveSupport::TestCase assert_search_equals([@p3, @p2], source_not_like: "a*") assert_search_equals([@p3, @p2], source_not_ilike: "A*") assert_search_equals([@p3, @p2], source_not_regex: "^a.*") + + assert_search_equals([], source_present: "false") + assert_search_equals([@p3, @p2, @p1], source_present: "true") end should "support multiple operators on the same attribute" do