From 4fc577050befb30b5161e1d96af84ccf1592cc78 Mon Sep 17 00:00:00 2001 From: James Smith Date: Wed, 11 Oct 2023 22:27:14 +0100 Subject: [PATCH 01/17] add test for ProblemHelper --- spec/helpers/problems_helper_spec.rb | 31 ++++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/spec/helpers/problems_helper_spec.rb b/spec/helpers/problems_helper_spec.rb index 3c197f626..b9183f610 100644 --- a/spec/helpers/problems_helper_spec.rb +++ b/spec/helpers/problems_helper_spec.rb @@ -1,15 +1,24 @@ require "rails_helper" -# Specs in this file have access to a helper object that includes -# the ProblemsHelper. For example: -# -# describe ProblemsHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# expect(helper.concat_strings("this","that")).to eq("this that") -# end -# end -# end RSpec.describe ProblemsHelper do - pending "add some examples to (or delete) #{__FILE__}" + let(:model) { create(:model) } + + it "converts a problem to a severity level" do + expect(helper.problem_severity( + Problem.new(category: :duplicate, problematic: model) + )).to eq "warning" + end + + it "works out the maximum severity from a set of problems (warning)" do + Problem.create(category: :duplicate, problematic: model) + Problem.create(category: :inefficient, problematic: model) + expect(helper.max_problem_severity).to eq "warning" + end + + it "works out the maximum severity from a set of problems (danger)" do + Problem.create(category: :missing, problematic: model) + Problem.create(category: :duplicate, problematic: model) + Problem.create(category: :inefficient, problematic: model) + expect(helper.max_problem_severity).to eq "danger" + end end From c4707038b1e8945f6730182a4bcd4f098c2c4496 Mon Sep 17 00:00:00 2001 From: James Smith Date: Wed, 11 Oct 2023 22:30:45 +0100 Subject: [PATCH 02/17] refactor problem_severity method --- app/helpers/problems_helper.rb | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/app/helpers/problems_helper.rb b/app/helpers/problems_helper.rb index ed6c6d996..1a180b361 100644 --- a/app/helpers/problems_helper.rb +++ b/app/helpers/problems_helper.rb @@ -1,13 +1,12 @@ module ProblemsHelper def problem_severity(problem) - case problem.category.to_sym - when :missing - "danger" - when :nesting, :duplicate - "warning" - else - "info" - end + { + missing: "danger", + empty: "info", + nesting: "warning", + inefficient: "info", + duplicate: "warning" + }[problem.category.to_sym] || "info" end def max_problem_severity From 5d3c46bfd9f5c423959d556ae8e28406b8fe75cb Mon Sep 17 00:00:00 2001 From: James Smith Date: Wed, 11 Oct 2023 23:07:39 +0100 Subject: [PATCH 03/17] refactor max severity method and add list of severities --- app/helpers/problems_helper.rb | 17 ++++++++--------- app/models/problem.rb | 7 +++++++ spec/helpers/problems_helper_spec.rb | 6 +++--- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/app/helpers/problems_helper.rb b/app/helpers/problems_helper.rb index 1a180b361..7e022bd1f 100644 --- a/app/helpers/problems_helper.rb +++ b/app/helpers/problems_helper.rb @@ -1,17 +1,16 @@ module ProblemsHelper def problem_severity(problem) { - missing: "danger", - empty: "info", - nesting: "warning", - inefficient: "info", - duplicate: "warning" - }[problem.category.to_sym] || "info" + missing: :danger, + empty: :info, + nesting: :warning, + inefficient: :info, + duplicate: :warning + }[problem.category.to_sym] || :silent end def max_problem_severity - return "danger" if Problem.where(category: :missing).count > 0 - return "warning" if Problem.where(category: [:nesting, :duplicate]).count > 0 - "info" + severities = Problem.select(:category).distinct.map { |p| problem_severity(p) } + severities.max_by { |p| Problem::SEVERITIES.find_index(p) } end end diff --git a/app/models/problem.rb b/app/models/problem.rb index 3851138af..10cf28700 100644 --- a/app/models/problem.rb +++ b/app/models/problem.rb @@ -12,6 +12,13 @@ class Problem < ApplicationRecord :duplicate ] + SEVERITIES = [ + :silent, + :info, + :warning, + :danger + ] + def self.create_or_clear(problematic, cat, present, options = {}) if present problematic.problems.create(options.merge(category: cat)) diff --git a/spec/helpers/problems_helper_spec.rb b/spec/helpers/problems_helper_spec.rb index b9183f610..6fadbc448 100644 --- a/spec/helpers/problems_helper_spec.rb +++ b/spec/helpers/problems_helper_spec.rb @@ -6,19 +6,19 @@ it "converts a problem to a severity level" do expect(helper.problem_severity( Problem.new(category: :duplicate, problematic: model) - )).to eq "warning" + )).to eq :warning end it "works out the maximum severity from a set of problems (warning)" do Problem.create(category: :duplicate, problematic: model) Problem.create(category: :inefficient, problematic: model) - expect(helper.max_problem_severity).to eq "warning" + expect(helper.max_problem_severity).to eq :warning end it "works out the maximum severity from a set of problems (danger)" do Problem.create(category: :missing, problematic: model) Problem.create(category: :duplicate, problematic: model) Problem.create(category: :inefficient, problematic: model) - expect(helper.max_problem_severity).to eq "danger" + expect(helper.max_problem_severity).to eq :danger end end From 04e70b86e4620db5f2c4e765fa275c0933c6f77b Mon Sep 17 00:00:00 2001 From: James Smith Date: Wed, 11 Oct 2023 23:55:07 +0100 Subject: [PATCH 04/17] create table of default severities --- app/helpers/problems_helper.rb | 8 +------- app/models/problem.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/helpers/problems_helper.rb b/app/helpers/problems_helper.rb index 7e022bd1f..5219ad5f1 100644 --- a/app/helpers/problems_helper.rb +++ b/app/helpers/problems_helper.rb @@ -1,12 +1,6 @@ module ProblemsHelper def problem_severity(problem) - { - missing: :danger, - empty: :info, - nesting: :warning, - inefficient: :info, - duplicate: :warning - }[problem.category.to_sym] || :silent + Problem::DEFAULT_SEVERITIES[problem.category.to_sym] || :silent end def max_problem_severity diff --git a/app/models/problem.rb b/app/models/problem.rb index 10cf28700..749bc311a 100644 --- a/app/models/problem.rb +++ b/app/models/problem.rb @@ -19,6 +19,15 @@ class Problem < ApplicationRecord :danger ] + DEFAULT_SEVERITIES = { + missing: :danger, + empty: :info, + destination_exists: :silent, + nesting: :warning, + inefficient: :info, + duplicate: :warning + } + def self.create_or_clear(problematic, cat, present, options = {}) if present problematic.problems.create(options.merge(category: cat)) From 3b4cfd5b051e53b63dc96a9b84183a3396c76333 Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 13:26:23 +0000 Subject: [PATCH 05/17] refactor problem category enum a little to allow introspection --- app/models/problem.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/problem.rb b/app/models/problem.rb index 749bc311a..225146c4d 100644 --- a/app/models/problem.rb +++ b/app/models/problem.rb @@ -3,7 +3,7 @@ class Problem < ApplicationRecord validates :category, uniqueness: {scope: :problematic}, presence: true - enum :category, [ + CATEGORIES = [ :missing, :empty, :destination_exists, # No longer used, but kept for compatibility @@ -11,6 +11,7 @@ class Problem < ApplicationRecord :inefficient, :duplicate ] + enum :category, CATEGORIES SEVERITIES = [ :silent, From adaba1c443398449d2a42ffcd6c92e7db413b557 Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 13:28:00 +0000 Subject: [PATCH 06/17] remove default severity for deprecated category --- app/models/problem.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/models/problem.rb b/app/models/problem.rb index 225146c4d..4474cec0b 100644 --- a/app/models/problem.rb +++ b/app/models/problem.rb @@ -23,7 +23,6 @@ class Problem < ApplicationRecord DEFAULT_SEVERITIES = { missing: :danger, empty: :info, - destination_exists: :silent, nesting: :warning, inefficient: :info, duplicate: :warning From 8cef2185d282ff3b706b73bbe018273bbd90ac2e Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 13:28:55 +0000 Subject: [PATCH 07/17] add problem settings to User model with default severities --- db/migrate/20240122114207_add_problem_settings_to_user.rb | 5 +++++ db/schema.rb | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20240122114207_add_problem_settings_to_user.rb diff --git a/db/migrate/20240122114207_add_problem_settings_to_user.rb b/db/migrate/20240122114207_add_problem_settings_to_user.rb new file mode 100644 index 000000000..fd6b1d6be --- /dev/null +++ b/db/migrate/20240122114207_add_problem_settings_to_user.rb @@ -0,0 +1,5 @@ +class AddProblemSettingsToUser < ActiveRecord::Migration[7.0] + def change + add_column :users, :problem_settings, :json, default: Problem::DEFAULT_SEVERITIES + end +end diff --git a/db/schema.rb b/db/schema.rb index 2d9029242..8172ec55e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_07_11_111009) do +ActiveRecord::Schema[7.0].define(version: 2024_01_22_114207) do create_table "collections", force: :cascade do |t| t.string "name" t.text "notes" @@ -180,6 +180,7 @@ t.json "pagination_settings", default: {"models"=>true, "creators"=>true, "collections"=>true, "per_page"=>12} t.json "renderer_settings", default: {"grid_width"=>200, "grid_depth"=>200} t.json "tag_cloud_settings", default: {"threshold"=>0, "heatmap"=>true, "keypair"=>true, "sorting"=>"frequency", "hide_unrelated"=>true} + t.json "problem_settings", default: {"missing"=>"danger", "empty"=>"info", "nesting"=>"warning", "inefficient"=>"info", "duplicate"=>"warning"} t.index ["email"], name: "index_users_on_email", unique: true t.index ["username"], name: "index_users_on_username", unique: true end From 4a5b75f3f54139f6d88a92a8984a3c492c7ae8c6 Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 13:29:31 +0000 Subject: [PATCH 08/17] change problem severity helper to use user setting --- app/helpers/problems_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/problems_helper.rb b/app/helpers/problems_helper.rb index 5219ad5f1..a6d0ef856 100644 --- a/app/helpers/problems_helper.rb +++ b/app/helpers/problems_helper.rb @@ -1,6 +1,6 @@ module ProblemsHelper def problem_severity(problem) - Problem::DEFAULT_SEVERITIES[problem.category.to_sym] || :silent + current_user.problem_settings[problem.category] || :silent end def max_problem_severity From c853f0894a4cd7b05bd0d4c16786b6fddd079e7a Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 13:30:38 +0000 Subject: [PATCH 09/17] add edit UI for problem settings --- app/controllers/settings_controller.rb | 6 +++++ app/views/settings/_problem_settings.html.erb | 24 +++++++++++++++++++ app/views/settings/show.html.erb | 1 + config/locales/en.yml | 14 +++++++++++ 4 files changed, 45 insertions(+) create mode 100644 app/views/settings/_problem_settings.html.erb diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index a68e416f0..31aae141c 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -10,6 +10,7 @@ def update update_pagination_settings(params[:pagination]) update_renderer_settings(params[:renderer]) update_tag_cloud_settings(params[:tag_cloud]) + update_problem_settings(params[:problems]) @user.save! # Save site-wide settings if user is an admin if current_user.admin? @@ -56,6 +57,11 @@ def update_renderer_settings(settings) } end + def update_problem_settings(settings) + return unless settings + @user.problem_settings = settings + end + def update_folder_settings(settings) return unless settings SiteSettings.model_path_template = settings[:model_path_template].gsub(/^\//, "") # Remove leading slashes diff --git a/app/views/settings/_problem_settings.html.erb b/app/views/settings/_problem_settings.html.erb new file mode 100644 index 000000000..3e0188a92 --- /dev/null +++ b/app/views/settings/_problem_settings.html.erb @@ -0,0 +1,24 @@ +
+

<%= t(".title") %>

+
+

+ <%= t(".description") %> +

+ <% Problem::CATEGORIES.each do |category| %> + <% next if Problem::DEFAULT_SEVERITIES[category].nil? # Skip deprecated categories; they don't appear in the defaults list %> +
+ <%= form.label t("problems.categories.#{category}"), + for: "problems[#{category}]", + class: "col col-form-label" + %> +
+ <%= form.select "problems[#{category}]", + Problem::SEVERITIES.map { |s| [t("problems.severities.#{s}"), s] }, + {selected: @user.problem_settings[category.to_s]}, + class: "form-select" + %> +
+
+ <% end %> +
+
diff --git a/app/views/settings/show.html.erb b/app/views/settings/show.html.erb index 549242b5c..3f0106d23 100644 --- a/app/views/settings/show.html.erb +++ b/app/views/settings/show.html.erb @@ -9,6 +9,7 @@
<%= render "renderer_settings", form: form %> + <%= render "problem_settings", form: form %>
diff --git a/config/locales/en.yml b/config/locales/en.yml index 1854a45ba..6ffbc499b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -48,6 +48,17 @@ en: message: This file is duplicated in other models. You may wish to remove some. title: Duplicated files problems: + categories: + missing: Missing files or folders + empty: Model has no files + nesting: Model contains other models + duplicate: Duplicate files + inefficient: Inefficient formats + severities: + silent: Ignored + info: Info + warning: Warning + danger: Danger library: missing: Library folder not found model: @@ -65,6 +76,9 @@ en: lambert: Realistically shaded normals: Surface direction settings: + problem_settings: + title: Problem Detection + description: Change the severity of detected problems, or ignore them completely. renderer_settings: auto_load_max_size: always: Always From fd4df4c6b9d95039557e001c75640664fcfc0be8 Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 14:31:05 +0000 Subject: [PATCH 10/17] ignore problems.categories in unused i18n check --- config/i18n-tasks.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index d6a11b31c..17cce66c9 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -120,6 +120,7 @@ search: ignore_unused: - 'activerecord.attributes.*' - 'activerecord.models.*' +- 'problems.categories.*' # - '{devise,kaminari,will_paginate}.*' # - 'simple_form.{yes,no}' # - 'simple_form.{placeholders,hints,labels}.*' From 7480c685d358822ad1369aacf5e160d9fb048fce Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 14:32:15 +0000 Subject: [PATCH 11/17] normalize i18n keys --- config/locales/en.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 6ffbc499b..b5adb1c3f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -49,16 +49,11 @@ en: title: Duplicated files problems: categories: - missing: Missing files or folders - empty: Model has no files - nesting: Model contains other models duplicate: Duplicate files + empty: Model has no files inefficient: Inefficient formats - severities: - silent: Ignored - info: Info - warning: Warning - danger: Danger + missing: Missing files or folders + nesting: Model contains other models library: missing: Library folder not found model: @@ -71,14 +66,19 @@ en: description: Duplicated file model_file_inefficient: description: Inefficient file format + severities: + danger: Danger + info: Info + silent: Ignored + warning: Warning renderer: style: lambert: Realistically shaded normals: Surface direction settings: problem_settings: - title: Problem Detection description: Change the severity of detected problems, or ignore them completely. + title: Problem Detection renderer_settings: auto_load_max_size: always: Always From 8d6d36316d4c1d4cb10a87ca7327d04a50bab866 Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 14:44:24 +0000 Subject: [PATCH 12/17] update problem helper tests to work with logged-in user --- app/helpers/problems_helper.rb | 2 +- spec/helpers/problems_helper_spec.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/helpers/problems_helper.rb b/app/helpers/problems_helper.rb index a6d0ef856..8a8652620 100644 --- a/app/helpers/problems_helper.rb +++ b/app/helpers/problems_helper.rb @@ -1,6 +1,6 @@ module ProblemsHelper def problem_severity(problem) - current_user.problem_settings[problem.category] || :silent + current_user.problem_settings[problem.category]&.to_sym || :silent end def max_problem_severity diff --git a/spec/helpers/problems_helper_spec.rb b/spec/helpers/problems_helper_spec.rb index 6fadbc448..5ee6f8089 100644 --- a/spec/helpers/problems_helper_spec.rb +++ b/spec/helpers/problems_helper_spec.rb @@ -1,8 +1,13 @@ require "rails_helper" RSpec.describe ProblemsHelper do + include Devise::Test::ControllerHelpers let(:model) { create(:model) } + before do + sign_in User.first + end + it "converts a problem to a severity level" do expect(helper.problem_severity( Problem.new(category: :duplicate, problematic: model) From 8cc7de69f7fd0f87103c72716858cc1ae8c1cc08 Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 16:02:43 +0000 Subject: [PATCH 13/17] add "visible" scope for Problems --- app/models/problem.rb | 5 +++++ spec/factories/problem.rb | 6 ++++++ spec/models/problem_spec.rb | 26 +++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 spec/factories/problem.rb diff --git a/app/models/problem.rb b/app/models/problem.rb index 4474cec0b..56a756556 100644 --- a/app/models/problem.rb +++ b/app/models/problem.rb @@ -3,6 +3,11 @@ class Problem < ApplicationRecord validates :category, uniqueness: {scope: :problematic}, presence: true + scope :visible, ->(settings) { + enabled = settings.select { |cat, sev| sev.to_sym != :silent } + where(category: enabled.keys) + } + CATEGORIES = [ :missing, :empty, diff --git a/spec/factories/problem.rb b/spec/factories/problem.rb new file mode 100644 index 000000000..6a4e9f10c --- /dev/null +++ b/spec/factories/problem.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :problem do + category { :missing } + problematic { association :model_file } + end +end diff --git a/spec/models/problem_spec.rb b/spec/models/problem_spec.rb index 4b3838816..819615c24 100644 --- a/spec/models/problem_spec.rb +++ b/spec/models/problem_spec.rb @@ -1,5 +1,29 @@ require "rails_helper" RSpec.describe Problem do - pending "add some examples to (or delete) #{__FILE__}" + describe "querying visible scope" do + let(:settings) do + { + missing: :silent, + empty: :info, + nesting: :warning, + inefficient: :info, + duplicate: :warning + } + end + + before do + create_list(:problem, 3, :missing) + create_list(:problem, 3, :inefficient) + end + + it "lists visible problems" do + expect(described_class.visible(settings).length).to eq 3 + expect(described_class.visible(settings).map { |x| x.category.to_sym }).to include :inefficient + end + + it "does not include silenced problems" do + expect(described_class.visible(settings).map { |x| x.category.to_sym }).not_to include :missing + end + end end From 6cb454464ed0d34ce74c4f8b91799bc2c9c25d44 Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 16:08:47 +0000 Subject: [PATCH 14/17] Add controller tests to check visibility of Problems --- Gemfile | 2 ++ Gemfile.lock | 5 +++++ app/controllers/problems_controller.rb | 2 +- spec/requests/problems_spec.rb | 27 +++++++++++++++++++++++++- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 234a0863a..85fc23156 100644 --- a/Gemfile +++ b/Gemfile @@ -97,3 +97,5 @@ gem "sqlite3_ar_regexp", "~> 2.2" gem "mittsu", github: "danini-the-panini/mittsu", ref: "7f44c46" gem "view_component", "~> 3.10" + +gem "rails-controller-testing", "~> 1.0", group: :test diff --git a/Gemfile.lock b/Gemfile.lock index 227d01dec..336c44fa2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -300,6 +300,10 @@ GEM activesupport (= 7.0.8) bundler (>= 1.15.0) railties (= 7.0.8) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest @@ -506,6 +510,7 @@ DEPENDENCIES public_suffix (~> 5.0) puma (~> 6.4) rails (~> 7.0.8) + rails-controller-testing (~> 1.0) rails-settings-cached (~> 2.9) redis (~> 5.0) rspec-rails diff --git a/app/controllers/problems_controller.rb b/app/controllers/problems_controller.rb index 293feb3d3..998537c4e 100644 --- a/app/controllers/problems_controller.rb +++ b/app/controllers/problems_controller.rb @@ -1,6 +1,6 @@ class ProblemsController < ApplicationController def index page = params[:page] || 1 - @problems = Problem.all.page(page).per(50).order([:category, :problematic_type]) + @problems = Problem.visible(current_user.problem_settings).page(page).per(50).order([:category, :problematic_type]) end end diff --git a/spec/requests/problems_spec.rb b/spec/requests/problems_spec.rb index c290be4c5..7ca982e69 100644 --- a/spec/requests/problems_spec.rb +++ b/spec/requests/problems_spec.rb @@ -2,9 +2,34 @@ RSpec.describe "Problems" do describe "GET /index" do - it "returns http success" do + before do + create_list(:problem, 2, category: :inefficient) + create_list(:problem, 3, category: :missing) + sign_in User.first + end + + it "returns success" do get "/problems/index" expect(response).to have_http_status(:success) end + + it "lists problems" do + get "/problems/index" + expect(assigns(:problems).length).to eq 5 + end + + context "with silenced problems" do + before do + u = User.first + u.problem_settings["missing"] = "silent" + u.save! + sign_in u + end + + it "doesn't show problems with silent severity" do + get "/problems/index" + expect(assigns(:problems).length).to eq 2 + end + end end end From 0b0a4a492b924fbaae4cebea20054c531de59874 Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 22 Jan 2024 16:09:24 +0000 Subject: [PATCH 15/17] include silenced filter in Problem icon display --- app/views/application/_navbar.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/application/_navbar.html.erb b/app/views/application/_navbar.html.erb index 18fcf59c1..557c45b55 100644 --- a/app/views/application/_navbar.html.erb +++ b/app/views/application/_navbar.html.erb @@ -50,7 +50,7 @@ <% end %> - <% if Problem.count > 0 %> + <% if Problem.visible(current_user.problem_settings).count > 0 %>