Files
fizzy/app/models/search/query.rb
T
Jorge Manrubia 96c9a95a18 Tidy up
2025-06-24 12:38:21 +02:00

44 lines
829 B
Ruby

class Search::Query < ApplicationRecord
validates :terms, presence: true
before_validation :sanitize_terms
class << self
def wrap(query)
if query.is_a?(self)
query
else
self.new(terms: query)
end
end
end
alias_attribute :to_s, :terms
private
def sanitize_terms
self.terms = sanitize(terms)
end
def sanitize(terms)
if terms.present?
terms = remove_invalid_search_characters(self.terms)
terms = remove_unbalanced_quotes(terms)
terms.presence
else
terms
end
end
def remove_invalid_search_characters(terms)
terms.gsub(/[^\w"]/, " ")
end
def remove_unbalanced_quotes(terms)
if terms.count("\"").even?
terms
else
terms.gsub("\"", " ")
end
end
end