class GobstonesFeedbackHook::GobstonesExplainer
Public Instance Methods
explain_color_typo(_, result)
click to toggle source
# File lib/feedback_hook.rb, line 92 def explain_color_typo(_, result) if roja_not_defined?(result) || negra_not_defined?(result) (result.match color_not_defined).try do |it| { color: it[1], rectified_color: rectified_color(it[1]) } end end end
explain_lower_builtin_procedure_typo(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 76 def explain_lower_builtin_procedure_typo(submission, result) if open_paren_instead_of_assign?(result) (submission.match lower_builtin_procedure).try do |it| { lower: it[1][0...5], upper: it[1][0...5].capitalize } end end end
explain_missing_closing_brace_before_procedure(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 68 def explain_missing_closing_brace_before_procedure(submission, result) if procedure_instead_of_command?(result) && missing_brace_end?(submission) (error_line(result)).try do |it| { line: it[1] } end end end
explain_program_before_closing_structure_when_no_program(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 32 def explain_program_before_closing_structure_when_no_program(submission, result) if program_instead_of_command?(result) && missing_brace_end?(submission) && function_or_procedure?(submission) if /#{program}/ =~ submission nil else { keyword: last_function_or_procedure(submission) } end end end
explain_program_before_closing_structure_when_program(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 24 def explain_program_before_closing_structure_when_program(submission, result) if program_instead_of_command?(result) && missing_brace_end?(submission) && function_or_procedure?(submission) (submission.match program).try do |it| { keyword: last_function_or_procedure(submission) } end end end
explain_program_has_a_name(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 10 def explain_program_has_a_name(submission, result) if identifier_instead_of_brace? result (submission.match malformed_program_header_with_name).try do |it| { name: it[1] } end end end
explain_program_has_no_opening_curly_brace(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 18 def explain_program_has_no_opening_curly_brace(submission, result) if identifier_instead_of_brace? result /#{malformed_program_header_with_no_curly_braces}/ =~ submission end end
explain_surplus_closing_brace(_, result)
click to toggle source
# File lib/feedback_hook.rb, line 42 def explain_surplus_closing_brace(_, result) if unbalanced_closing_braces? result (error_line(result)).try do |it| { line: it[1] } end end end
explain_upper_builtin_function_typo(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 84 def explain_upper_builtin_function_typo(submission, result) if procedure_invocation_instead_of_expression?(result) (submission.match upper_builtin_function).try do |it| { upper: it[1], lower: it[1].camelize(:lower) } end end end
explain_upper_function_typo(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 50 def explain_upper_function_typo(submission, result) if upper_identifier_instead_of_definition? result /#{uppercase_function}/ =~ submission end end
explain_upper_procedure_typo(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 56 def explain_upper_procedure_typo(submission, result) if upper_identifier_instead_of_definition? result /#{uppercase_procedure}/ =~ submission end end
explain_upper_program_typo(submission, result)
click to toggle source
# File lib/feedback_hook.rb, line 62 def explain_upper_program_typo(submission, result) if upper_identifier_instead_of_definition? result /#{uppercase_program}/ =~ submission end end
Private Instance Methods
color_not_defined(color='\w+')
click to toggle source
# File lib/feedback_hook.rb, line 202 def color_not_defined(color='\w+') /<pre>\[\d+:\d+\]: El constructor "(#{color})" no está definido.<\/pre>/ end
color_not_defined?(result, color)
click to toggle source
# File lib/feedback_hook.rb, line 198 def color_not_defined?(result, color) result.match?(color_not_defined(color)) end
error_line(result)
click to toggle source
# File lib/feedback_hook.rb, line 150 def error_line(result) result.match /<pre>\[(\d+):\d+\]:/ end
function_or_procedure()
click to toggle source
# File lib/feedback_hook.rb, line 134 def function_or_procedure '(function)\s*\w+\s*\([\w\d\s,]*\)\s*{|(procedure)\s*\w+\s*\([\w\d\s,]*\)\s*{' end
function_or_procedure?(submission)
click to toggle source
# File lib/feedback_hook.rb, line 130 def function_or_procedure?(submission) submission.match? function_or_procedure end
identifier_instead_of_brace?(result, capital='...')
click to toggle source
# File lib/feedback_hook.rb, line 114 def identifier_instead_of_brace?(result, capital='...') result.match? /<pre>\[\d+:\d+\]: Se esperaba una llave izquierda \("{"\).\nSe encontró: un identificador con #{capital}úsculas.<\/pre>/ end
last_function_or_procedure(submission)
click to toggle source
# File lib/feedback_hook.rb, line 138 def last_function_or_procedure(submission) submission.scan(/#{function_or_procedure}/).last.compact.first end
lower_builtin_procedure()
click to toggle source
# File lib/feedback_hook.rb, line 178 def lower_builtin_procedure '(mover[\s(]|poner[\s(]|sacar[\s(])' end
lower_identifier_instead_of_brace?(result)
click to toggle source
# File lib/feedback_hook.rb, line 110 def lower_identifier_instead_of_brace?(result) identifier_instead_of_brace?(result, 'min') end
malformed_program_header_with_name()
click to toggle source
# File lib/feedback_hook.rb, line 102 def malformed_program_header_with_name '.*program +([A-Za-z]\w*)' end
malformed_program_header_with_no_curly_braces()
click to toggle source
# File lib/feedback_hook.rb, line 118 def malformed_program_header_with_no_curly_braces '.*program *[\r\n]\s*[^{]\w+' end
missing_brace_end?(submission)
click to toggle source
# File lib/feedback_hook.rb, line 126 def missing_brace_end?(submission) submission.count('{') > submission.count('}') end
negra_not_defined?(result)
click to toggle source
# File lib/feedback_hook.rb, line 194 def negra_not_defined?(result) color_not_defined? result, 'Negra' end
open_paren_instead_of_assign?(result)
click to toggle source
# File lib/feedback_hook.rb, line 174 def open_paren_instead_of_assign?(result) result.match? /<pre>\[\d+:\d+\]: Se esperaba un operador de asignación \(":="\).\nSe encontró: un paréntesis izquierdo \("\("\).<\/pre>/ end
procedure_instead_of_command?(result)
click to toggle source
# File lib/feedback_hook.rb, line 170 def procedure_instead_of_command?(result) result.match? /<pre>\[\d+:\d+\]: Se esperaba un comando.\nSe encontró: la palabra clave "procedure".<\/pre>/ end
procedure_invocation_instead_of_expression?(result)
click to toggle source
# File lib/feedback_hook.rb, line 182 def procedure_invocation_instead_of_expression?(result) result.match? /<pre>\[\d+:\d+\]: Se esperaba una expresión.\nSe encontró: una invocación a un procedimiento.<\/pre>/ end
program()
click to toggle source
# File lib/feedback_hook.rb, line 142 def program 'program\s*{' end
program_instead_of_command?(result)
click to toggle source
# File lib/feedback_hook.rb, line 122 def program_instead_of_command?(result) result.match? /<pre>\[\d+:\d+\]: Se esperaba un comando.\nSe encontró: la palabra clave "program".<\/pre>/ end
rectified_color(color)
click to toggle source
# File lib/feedback_hook.rb, line 206 def rectified_color(color) color.chop + "o" end
roja_not_defined?(result)
click to toggle source
# File lib/feedback_hook.rb, line 190 def roja_not_defined?(result) color_not_defined? result, 'Roja' end
unbalanced_closing_braces?(result)
click to toggle source
# File lib/feedback_hook.rb, line 146 def unbalanced_closing_braces?(result) result.match? /<pre>\[\d+:\d+\]: Se encontró un "}" pero no había una llave abierta "{".<\/pre>/ end
upper_builtin_function()
click to toggle source
# File lib/feedback_hook.rb, line 186 def upper_builtin_function '(PuedeMover|NroBolitas|HayBolitas)' end
upper_identifier_instead_of_brace?(result)
click to toggle source
# File lib/feedback_hook.rb, line 106 def upper_identifier_instead_of_brace?(result) identifier_instead_of_brace?(result, 'may') end
upper_identifier_instead_of_definition?(result)
click to toggle source
# File lib/feedback_hook.rb, line 154 def upper_identifier_instead_of_definition?(result) result.match? /<pre>\[\d+:\d+\]: Se esperaba una definición \(de programa, función, procedimiento, o tipo\).\nSe encontró: un identificador con mayúsculas.<\/pre>/ end
uppercase_function()
click to toggle source
# File lib/feedback_hook.rb, line 158 def uppercase_function 'Function\s' end
uppercase_procedure()
click to toggle source
# File lib/feedback_hook.rb, line 162 def uppercase_procedure 'Procedure\s' end
uppercase_program()
click to toggle source
# File lib/feedback_hook.rb, line 166 def uppercase_program 'Program[\s{]*' end