Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
group :development do
# Use console on exceptions pages [https://github.com/rails/web-console]
gem "web-console"
gem "rubycritic", require: false
end

group :test do
Expand All @@ -69,7 +70,8 @@
gem "rspec-rails"
gem "capybara"
gem "selenium-webdriver"
gem "rails-controller-testing"
end

gem "activerecord-import"

Check failure on line 77 in Gemfile

View workflow job for this annotation

GitHub Actions / lint

Layout/TrailingEmptyLines: 1 trailing blank lines detected.
127 changes: 125 additions & 2 deletions Gemfile.lock

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ class ApplicationController < ActionController::Base
stale_when_importmap_changes

helper_method :current_user, :admin?, :current_admin_departamentos,
:usuario_logado, :discente_logado?, :docente_logado?, :admin_logado?
:usuario_logado, :discente_logado?, :docente_logado?, :admin_logado?,
:discente_atual

def current_user
@current_user ||= User.find_by(id: session[:user_id])
Expand All @@ -19,7 +20,10 @@ def current_admin_departamentos
end

def discente_atual
current_user
return @discente_atual if defined?(@discente_atual)

usuario = Usuario.find_by(email: current_user&.email)
@discente_atual = usuario&.discente
end

def usuario_logado
Expand Down
79 changes: 79 additions & 0 deletions app/controllers/envio_formularios_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
class EnvioFormulariosController < ApplicationController
before_action :exigir_discente!
before_action :set_formulario

def new
if discente_atual&.ja_respondeu?(@formulario)
redirect_to minha_resposta_formulario_path(@formulario),
notice: "Este formulário já foi respondido"
return
end

@questoes = @formulario.questoes.includes(questao_template: :opcao_questoes)
end

def create
return redirect_to formularios_path, alert: "Este formulário já foi respondido" if discente_atual&.ja_respondeu?(@formulario)

respostas_params = params[:respostas] || {}
questoes = @formulario.questoes
erro = mensagem_erro_validacao(questoes, respostas_params)

return render_erro_validacao(questoes, erro) if erro

salvar_envio(questoes, respostas_params)
rescue ActiveRecord::RecordInvalid => e
render_erro_salvamento(e.message)
end

private

def set_formulario
@formulario = Formulario.find(params[:formulario_id] || params[:id])
rescue ActiveRecord::RecordNotFound
redirect_to formularios_path, alert: "Formulário não encontrado."
end

def mensagem_erro_validacao(questoes, respostas_params)
return "Todos os campos obrigatórios devem ser preenchidos" if campos_vazios?(questoes, respostas_params)
return "Por favor, insira um valor válido entre 1 e 5" if valores_invalidos?(questoes, respostas_params)

Check failure on line 39 in app/controllers/envio_formularios_controller.rb

View workflow job for this annotation

GitHub Actions / lint

Style/RedundantReturn: Redundant `return` detected.
end

def campos_vazios?(questoes, respostas_params)
questoes.any? { |q| respostas_params[q.id.to_s].blank? }
end

def valores_invalidos?(questoes, respostas_params)
questoes.any? do |q|
valor = respostas_params[q.id.to_s].to_s.strip
numerico = Integer(valor, exception: false)
numerico && (numerico < 1 || numerico > 5)
end
end

def render_erro_validacao(questoes, mensagem)
@questoes = questoes.includes(questao_template: :opcao_questoes)
flash.now[:alert] = mensagem
render :new, status: :unprocessable_entity
end

def render_erro_salvamento(mensagem)
@questoes = @formulario.questoes.includes(questao_template: :opcao_questoes)
flash.now[:alert] = mensagem
render :new, status: :unprocessable_entity
end

def salvar_envio(questoes, respostas_params)
envio = EnvioFormulario.new(formulario: @formulario, discente: discente_atual)

EnvioFormulario.transaction do
envio.save!
questoes.each do |questao|
conteudo = respostas_params[questao.id.to_s].to_s.strip
Resposta.create!(envio_formulario: envio, questao: questao, conteudo: conteudo)
end
end

redirect_to formularios_path, notice: "Avaliação enviada com sucesso"
end
end
54 changes: 26 additions & 28 deletions app/controllers/formularios_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,15 @@ class FormulariosController < ApplicationController

# GET /formularios
def index
@turmas = discente_atual.turmas.includes(:disciplina)
@turmas = discente_atual.turmas

turmas_ids = discente_atual.turmas.pluck(:id)
respondidos_ids = discente_atual.envio_formularios.pluck(:formulario_id)
base = Formulario.where(turma_id: turmas_ids).includes(:turma, :template)
turmas_ids = discente_atual.turmas.pluck(:id)
respondidos_ids = discente_atual.envio_formularios.pluck(:formulario_id)
base = Formulario.where(turma_id: turmas_ids).includes(:turma, :template)

@formularios_pendentes = base.abertos.where.not(id: respondidos_ids).order(prazo: :asc)
@formularios_respondidos = base
.joins(:envio_formularios)
.where(envio_formularios: { discente_id: discente_atual.id })
.order("envio_formularios.enviado_em desc")
@formularios_fechados = base.fechados.where.not(id: respondidos_ids).order(prazo: :desc)
@formularios_pendentes = formularios_pendentes(base, respondidos_ids)
@formularios_respondidos = formularios_respondidos(base)
@formularios_fechados = formularios_fechados(base, respondidos_ids)
end

# GET /formularios/:id
Expand All @@ -27,15 +24,8 @@ def show
return
end

unless @formulario.aberto?
redirect_to formularios_path, alert: "O prazo para responder este formulário já encerrou."
return
end

unless discente_atual.turmas.include?(@formulario.turma)
redirect_to formularios_path, alert: "Você não tem acesso a este formulário."
return
end
return redirect_to formularios_path, alert: "O prazo para responder este formulário já encerrou." unless @formulario.aberto?
return redirect_to formularios_path, alert: "Você não tem acesso a este formulário." unless discente_atual.turmas.include?(@formulario.turma)

@questoes = @formulario.questoes.includes(questao_template: :opcao_questoes)
end
Expand All @@ -45,15 +35,8 @@ def minha_resposta
@formulario = Formulario.find(params[:id])
@envio = discente_atual.envio_formularios.find_by(formulario: @formulario)

unless @envio
redirect_to formularios_path, alert: "Você ainda não respondeu este formulário."
return
end

unless discente_atual.turmas.include?(@formulario.turma)
redirect_to formularios_path, alert: "Você não tem acesso a este formulário."
return
end
return redirect_to formularios_path, alert: "Você ainda não respondeu este formulário." unless @envio
return redirect_to formularios_path, alert: "Você não tem acesso a este formulário." unless discente_atual.turmas.include?(@formulario.turma)

@respostas = @envio.respostas.includes(questao: { questao_template: :opcao_questoes })
end
Expand All @@ -65,4 +48,19 @@ def set_formulario
rescue ActiveRecord::RecordNotFound
redirect_to formularios_path, alert: "Formulário não encontrado." and return
end

def formularios_pendentes(base, respondidos_ids)
base.abertos.where.not(id: respondidos_ids).order(prazo: :asc)
end

def formularios_respondidos(base)
base
.joins(:envio_formularios)
.where(envio_formularios: { discente_id: discente_atual.id })
.order("envio_formularios.enviado_em desc")
end

def formularios_fechados(base, respondidos_ids)
base.fechados.where.not(id: respondidos_ids).order(prazo: :desc)
end
end
82 changes: 82 additions & 0 deletions app/helpers/application_helper.rb_cyclo.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<html><head><title>Cyclometric Complexity</title></head>
<style>
body {
margin: 20px;
padding: 0;
font-size: 12px;
font-family: bitstream vera sans, verdana, arial, sans serif;
background-color: #efefef;
}

table {
border-collapse: collapse;
/*border-spacing: 0;*/
border: 1px solid #666;
background-color: #fff;
margin-bottom: 20px;
}

table, th, th+th, td, td+td {
border: 1px solid #ccc;
}

table th {
font-size: 12px;
color: #fc0;
padding: 4px 0;
background-color: #336;
}

th, td {
padding: 4px 10px;
}

td {
font-size: 13px;
}

.class_name {
font-size: 17px;
margin: 20px 0 0;
}

.class_complexity {
margin: 0 auto;
}

.class_complexity>.class_complexity {
margin: 0;
}

.class_total_complexity, .class_total_lines, .start_token_count, .file_count {
font-size: 13px;
font-weight: bold;
}

.class_total_complexity, .class_total_lines {
color: #c00;
}

.start_token_count, .file_count {
color: #333;
}

.warning {
background-color: yellow;
}

.error {
background-color: #f00;
}
</style>
<body>
<div class="class_complexity">
<h2 class="class_name">Class : ApplicationHelper</h2>
<div class="class_total_complexity">Total Complexity: 0</div>
<div class="class_total_lines">Total Lines: 2</div>
<table width="100%" border="1">
<tr><th>Method</th><th>Complexity</th><th># Lines</th></tr>
</table>
</div>
</body>
</html>
82 changes: 82 additions & 0 deletions app/helpers/dashboards_helper.rb_cyclo.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<html><head><title>Cyclometric Complexity</title></head>
<style>
body {
margin: 20px;
padding: 0;
font-size: 12px;
font-family: bitstream vera sans, verdana, arial, sans serif;
background-color: #efefef;
}

table {
border-collapse: collapse;
/*border-spacing: 0;*/
border: 1px solid #666;
background-color: #fff;
margin-bottom: 20px;
}

table, th, th+th, td, td+td {
border: 1px solid #ccc;
}

table th {
font-size: 12px;
color: #fc0;
padding: 4px 0;
background-color: #336;
}

th, td {
padding: 4px 10px;
}

td {
font-size: 13px;
}

.class_name {
font-size: 17px;
margin: 20px 0 0;
}

.class_complexity {
margin: 0 auto;
}

.class_complexity>.class_complexity {
margin: 0;
}

.class_total_complexity, .class_total_lines, .start_token_count, .file_count {
font-size: 13px;
font-weight: bold;
}

.class_total_complexity, .class_total_lines {
color: #c00;
}

.start_token_count, .file_count {
color: #333;
}

.warning {
background-color: yellow;
}

.error {
background-color: #f00;
}
</style>
<body>
<div class="class_complexity">
<h2 class="class_name">Class : DashboardsHelper</h2>
<div class="class_total_complexity">Total Complexity: 0</div>
<div class="class_total_lines">Total Lines: 2</div>
<table width="100%" border="1">
<tr><th>Method</th><th>Complexity</th><th># Lines</th></tr>
</table>
</div>
</body>
</html>
Loading
Loading