Suggest closest contestant name when converting a message to completion
All checks were successful
CI / scan_ruby (push) Successful in 22s
CI / scan_js (push) Successful in 12s
CI / lint (push) Successful in 13s
CI / test (push) Successful in 39s

This commit is contained in:
sto 2025-06-25 08:54:02 +02:00
parent 2cadc8eca5
commit 1a8ea0afee
4 changed files with 20 additions and 2 deletions

View File

@ -45,6 +45,7 @@ gem "dartsass-rails"
gem "bootstrap", "~> 5.3.3"
gem "friendly_id", "~> 5.5.0"
gem "csv"
gem "damerau-levenshtein"
group :development, :test do
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem

View File

@ -104,6 +104,7 @@ GEM
connection_pool (2.5.3)
crass (1.0.6)
csv (3.3.5)
damerau-levenshtein (1.3.3)
dartsass-rails (0.5.1)
railties (>= 6.0.0)
sass-embedded (~> 1.63)
@ -438,6 +439,7 @@ DEPENDENCIES
brakeman
capybara
csv
damerau-levenshtein
dartsass-rails
debug
factory_bot_rails

View File

@ -74,7 +74,6 @@ class MessagesController < ApplicationController
@action_name = t("helpers.buttons.back")
@action_path = contest_path(@contest)
@message = Message.find(params[:message_id])
@completion = Completion.new()
@completion.display_time_from_start = @message.display_time
@ -96,7 +95,19 @@ class MessagesController < ApplicationController
end
def set_data
@contestants = @contest.contestants.order(:name)
@message = Message.find(params[:message_id])
@puzzles = @contest.puzzles
@contestants = @contest.contestants.order(:name)
if @contestants.size > 0
@closest_contestant = @contestants.first
closest_distance = 10000
@contestants.each do |contestant|
distance = DamerauLevenshtein.distance(@message.author, contestant.name)
if distance < closest_distance
closest_distance = distance
@closest_contestant = contestant
end
end
end
end
end

View File

@ -22,6 +22,10 @@
.form-floating
= form.select :contestant_id, @contestants.map { |contestant| [contestant.form_name, contestant.id] }, {}, class: "form-select"
= form.label :contestant_id
- if @closest_contestant
javascript:
el = document.querySelector('select[name="completion[contestant_id]"]');
el.value = "#{@closest_contestant.id}"
- if @puzzles.size > 1
.row.mb-3
.col