Suggest closest contestant name when converting a message to completion
This commit is contained in:
parent
2cadc8eca5
commit
1a8ea0afee
1
Gemfile
1
Gemfile
@ -45,6 +45,7 @@ gem "dartsass-rails"
|
|||||||
gem "bootstrap", "~> 5.3.3"
|
gem "bootstrap", "~> 5.3.3"
|
||||||
gem "friendly_id", "~> 5.5.0"
|
gem "friendly_id", "~> 5.5.0"
|
||||||
gem "csv"
|
gem "csv"
|
||||||
|
gem "damerau-levenshtein"
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
|
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
|
||||||
|
@ -104,6 +104,7 @@ GEM
|
|||||||
connection_pool (2.5.3)
|
connection_pool (2.5.3)
|
||||||
crass (1.0.6)
|
crass (1.0.6)
|
||||||
csv (3.3.5)
|
csv (3.3.5)
|
||||||
|
damerau-levenshtein (1.3.3)
|
||||||
dartsass-rails (0.5.1)
|
dartsass-rails (0.5.1)
|
||||||
railties (>= 6.0.0)
|
railties (>= 6.0.0)
|
||||||
sass-embedded (~> 1.63)
|
sass-embedded (~> 1.63)
|
||||||
@ -438,6 +439,7 @@ DEPENDENCIES
|
|||||||
brakeman
|
brakeman
|
||||||
capybara
|
capybara
|
||||||
csv
|
csv
|
||||||
|
damerau-levenshtein
|
||||||
dartsass-rails
|
dartsass-rails
|
||||||
debug
|
debug
|
||||||
factory_bot_rails
|
factory_bot_rails
|
||||||
|
@ -74,7 +74,6 @@ class MessagesController < ApplicationController
|
|||||||
@action_name = t("helpers.buttons.back")
|
@action_name = t("helpers.buttons.back")
|
||||||
@action_path = contest_path(@contest)
|
@action_path = contest_path(@contest)
|
||||||
|
|
||||||
@message = Message.find(params[:message_id])
|
|
||||||
@completion = Completion.new()
|
@completion = Completion.new()
|
||||||
@completion.display_time_from_start = @message.display_time
|
@completion.display_time_from_start = @message.display_time
|
||||||
|
|
||||||
@ -96,7 +95,19 @@ class MessagesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_data
|
def set_data
|
||||||
@contestants = @contest.contestants.order(:name)
|
@message = Message.find(params[:message_id])
|
||||||
@puzzles = @contest.puzzles
|
@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
|
||||||
end
|
end
|
||||||
|
@ -22,6 +22,10 @@
|
|||||||
.form-floating
|
.form-floating
|
||||||
= form.select :contestant_id, @contestants.map { |contestant| [contestant.form_name, contestant.id] }, {}, class: "form-select"
|
= form.select :contestant_id, @contestants.map { |contestant| [contestant.form_name, contestant.id] }, {}, class: "form-select"
|
||||||
= form.label :contestant_id
|
= 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
|
- if @puzzles.size > 1
|
||||||
.row.mb-3
|
.row.mb-3
|
||||||
.col
|
.col
|
||||||
|
Loading…
x
Reference in New Issue
Block a user