From 652db0cd9f548103dd816ed99dbee11735a40a9f Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 9 Apr 2022 03:17:06 -0500 Subject: [PATCH] post queries: show full error message on error page. --- app/controllers/application_controller.rb | 2 ++ app/logical/post_query.rb | 9 +++++---- app/views/static/error.html.erb | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 796f0175f..5c15109f2 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -132,6 +132,8 @@ class ApplicationController < ActionController::Base render_error_page(410, exception, template: "static/pagination_error", message: "You cannot go beyond page #{CurrentUser.user.page_limit}.") when PostQuery::TagLimitError render_error_page(422, exception, template: "static/tag_limit_error", message: "You cannot search for more than #{CurrentUser.tag_query_limit} tags at a time.") + when PostQuery::Error + render_error_page(422, exception, message: exception.message) when RateLimiter::RateLimitError render_error_page(429, exception, message: "Rate limit exceeded. You're doing that too fast") when Rack::Timeout::RequestTimeoutException diff --git a/app/logical/post_query.rb b/app/logical/post_query.rb index 6d15927d4..d8429f129 100644 --- a/app/logical/post_query.rb +++ b/app/logical/post_query.rb @@ -275,13 +275,14 @@ class PostQuery def validate_metatags! return if metatags.empty? - raise Error, "Can't have multiple order metatags" if select_metatags(*ORDER_METATAGS).size > 1 + order_metatags = select_metatags(*ORDER_METATAGS) + raise Error, "#{order_metatags.to_sentence} can't be used together." if order_metatags.size > 1 SINGLETON_METATAGS.each do |name| metatag = select_metatags(name).first - raise Error, "'#{name}:' can't be used more than once" if select_metatags(name).size > 1 - raise Error, "#{metatag} can't be negated" if metatag&.parents&.any?(&:not?) - raise Error, "#{metatag} can't be used in an 'or' clause" if metatag&.parents&.any?(&:or?) + raise Error, "'#{name}:' can't be used more than once." if select_metatags(name).size > 1 + raise Error, "'#{metatag}' can't be negated." if metatag&.parents&.any?(&:not?) + raise Error, "'#{metatag}' can't be used with the 'or' operator." if metatag&.parents&.any?(&:or?) end end diff --git a/app/views/static/error.html.erb b/app/views/static/error.html.erb index 9a2fd3835..5e338261b 100644 --- a/app/views/static/error.html.erb +++ b/app/views/static/error.html.erb @@ -3,7 +3,7 @@

Error

<% if @message.present? %> -

<%= @message %>

+

Error: <%= @message %>

<% else %>

Unexpected error: <%= @exception.class %>.