diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..1a2f2e63 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 85882f10..b54da91f 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,4 @@ /config/master.key # solargraph config file -.solargraph.yml \ No newline at end of file +.solargraph.yml diff --git a/.rake_tasks~ b/.rake_tasks~ new file mode 100644 index 00000000..c00fc44b --- /dev/null +++ b/.rake_tasks~ @@ -0,0 +1,55 @@ +about +active_storage:install +app:template +app:update +assets:clean[keep] +assets:clobber +assets:environment +assets:precompile +cache_digests:dependencies +cache_digests:nested_dependencies +cucumber +cucumber:all +cucumber:ok +cucumber:rerun +cucumber:wip +db:create +db:drop +db:environment:set +db:fixtures:load +db:migrate +db:migrate:status +db:rollback +db:schema:cache:clear +db:schema:cache:dump +db:schema:dump +db:schema:load +db:seed +db:setup +db:structure:dump +db:structure:load +db:version +dev:cache +initializers +log:clear +middleware +notes +notes:custom +restart +routes +secret +spec +spec:controllers +spec:helpers +spec:models +spec:requests +spec:routing +spec:views +stats +test +test:db +test:system +time:zones[country_or_offset] +tmp:clear +tmp:create +yarn:install diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 00000000..7f44804c --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +ruby 2.6.3 diff --git a/ABC_Score/.DS_Store b/ABC_Score/.DS_Store new file mode 100644 index 00000000..6406abca Binary files /dev/null and b/ABC_Score/.DS_Store differ diff --git a/ABC_Score/app/channels/application_cable/channel.html b/ABC_Score/app/channels/application_cable/channel.html new file mode 100644 index 00000000..9550da07 --- /dev/null +++ b/ABC_Score/app/channels/application_cable/channel.html @@ -0,0 +1,123 @@ + + +
+ + +
RUBYCRITIC
+
+ module ApplicationCable
+ class Channel < ActionCable::Channel::Base - ApplicationCable::Channel has no descriptive comment
+ end
+end
+
+
RUBYCRITIC
+
+ module ApplicationCable
+ class Connection < ActionCable::Connection::Base - ApplicationCable::Connection has no descriptive comment
+ end
+end
+
+
RUBYCRITIC
+
+ class AccreditationsController < ApplicationController - AccreditationsController assumes too much for instance variable '@accreditation'
- AccreditationsController has no descriptive comment
+ before_action :set_accreditation, only: [:show, :edit, :update, :destroy]
+
+ # GET /accreditations
+ # Lista os credenciamentos criados
+ def index
+ # Lista todas os credenciamentos para um administrador
+ if current_user.role == "administrator"
+ @accreditations = Accreditation.all
+ # Lista os credenciamentos próprios para um professor
+ else
+ @accreditations = Accreditation.where(user_id: current_user.id)
+ end
+ end
+
+ # GET /accreditations/1
+ # Mostra detalhes de um registro criado
+ def show
+ end
+
+ # GET /accreditations/1/edit
+ # Renderiza página para atualizar um registro
+ def edit
+ end
+
+ # PATCH/PUT /accreditations/1
+ # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não
+ def update
+ respond_to do |format|
+ # Quando condições da model forem cumpridas, atualiza o registro no banco, redireciona para pagina index da tabela atual e mostra uma mensagem de sucesso
+ if @accreditation.update(accreditation_params)
+ format.html { redirect_to accreditations_url, notice: 'Credenciamento atualizado com sucesso!' } -
+ # Mostra uma mensagem de erro se condições da model não forem cumpridas
+ else
+ format.html { render :edit } -
+ end
+ end
+ end
+
+ # DELETE /accreditations/1
+ # Decide se a exclusão do registro é válida ou não
+ def destroy -
+ respond_to do |format|
+ # Mensagem de sucesso ao excluir o credenciamento quando condições da model forem cumpridas
+ if @accreditation.destroy
+ format.html { redirect_to accreditations_url, notice: 'Credenciamento excluído com sucesso!' } -
+ # Mensagem de erro se condições da model não forem cumpridas
+ else
+ format.html { redirect_to accreditations_url, notice: 'Erro: não foi possível excluir o credenciamento!' } -
+ end
+ end
+ end
+
+ private
+ # Define parametros de Credenciamento
+ def set_accreditation
+ @accreditation = Accreditation.find(params[:id])
+ end
+
+ # Never trust parameters from the scary internet, only allow the white list through.
+ def accreditation_params
+ params.require(:accreditation).permit(:user_id, :start_date, :end_date, :sei_proccess_id)
+ end
+end
+
+
+
RUBYCRITIC
+
+ # frozen_string_literal: true
+
+module Current - Current has no descriptive comment
+ thread_mattr_accessor :user
+end
+
+class ApplicationController < ActionController::Base - ApplicationController has no descriptive comment
+ before_action :configure_permitted_parameters, if: :devise_controller?
+
+ around_action :set_current_user
+ def set_current_user
+ Current.user = current_user
+ yield
+ ensure
+ # to address the thread variable leak issues in Puma/Thin webserver
+ Current.user = nil
+ end
+
+ protected
+
+ def configure_permitted_parameters
+ devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role])
+ end
+end
+
+
RUBYCRITIC
+
+ class HomeController < ApplicationController - HomeController has no descriptive comment
+ def index
+ end
+end
+
+
RUBYCRITIC
+
+ class RequirementsController < ApplicationController - RequirementsController assumes too much for instance variable '@document'
- RequirementsController assumes too much for instance variable '@requirement'
- RequirementsController assumes too much for instance variable '@requirement_id'
- RequirementsController has no descriptive comment
+ before_action :set_requirement, only: [:show, :edit, :update, :destroy]
+
+ # GET /requirements
+ # Lista os requisitos criados
+ def index
+ # Lista todos os tipos de requisitos criados
+ @requirements = Requirement.all
+ end
+
+ # GET /requirements/1
+ # Mostra detalhes de um registro criado
+ def show
+ end
+
+ # GET /requirements/new
+ # Renderiza página para criação de umm registro
+ def new
+ @requirement = Requirement.new
+ end
+
+ # GET /requirements/1/edit
+ # Renderiza página para atualizar um registro
+ def edit
+ end
+
+ # POST /requirements
+ # Faz o tratamento dos dados enviados pelo usuário para decidir se o registro é válido ou não
+ def create - RequirementsController#create has approx 6 statements
+ @requirement = Requirement.new(requirement_params)
+
+ respond_to do |format|
+ # Quando condições da model forem cumpridas, cria um novo registro no banco, redireciona para pagina index da entidade atual e mostra uma mensagem de sucesso
+ if @requirement.save
+ format.html { redirect_to @requirement, notice: 'Requisitos criados com sucesso!' } -
+ # Mostra uma mensagem de erro se condições da model não forem cumpridas
+ else
+ format.html { render :new } -
+ end
+ end
+ end
+
+ # Exclui documento anexado, caso exista
+ def delete_document_attachment
+ @document = ActiveStorage::Attachment.find_by(id: params[:id])
+ @requirement_id = params[:requirement_id]
+ @document&.purge
+ redirect_to edit_requirement_path(@requirement_id)
+ end
+
+ # PATCH/PUT /requirements/1
+ # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não
+ def update
+ respond_to do |format|
+ # Quando condições da model forem cumpridas, atualiza o registro no banco, redireciona para pagina de detalhes do registro recém modificado e mostra uma mensagem de sucesso
+ if @requirement.update(requirement_params)
+ format.html { redirect_to @requirement, notice: 'Requisitos atualizados com sucesso!' } -
+ # Mostra uma mensagem de erro se condições da model não forem cumpridas
+ else
+ format.html { render :edit } -
+ end
+ end
+ end
+
+ # DELETE /requirements/1
+ # Decide se a exclusão do registro é válida ou não
+ def destroy -
+ respond_to do |format|
+ # Mensagem de sucesso ao excluir requisitos quando condições da model forem cumpridas
+ if @requirement.destroy
+ format.html { redirect_to requirements_url, notice: 'Requisitos excluídos com sucesso!' } -
+ # Mensagem de erro se condições da model não forem cumpridas
+ else
+ format.html { redirect_to requirements_url, notice: 'Erro: não foi possível excluir os requisitos!' } -
+ end
+ end
+ end
+
+ private
+ # Define parametros de Requisito
+ def set_requirement
+ @requirement = Requirement.find(params[:id])
+ end
+
+ # Never trust parameters from the scary internet, only allow the white list through.
+ def requirement_params
+ params.require(:requirement).permit(:title, :content, documents: [])
+ end
+end
+
+
RUBYCRITIC
+
+ class SeiProcessesController < ApplicationController - SeiProcessesController assumes too much for instance variable '@all_statuses'
- SeiProcessesController assumes too much for instance variable '@sei_process'
- SeiProcessesController assumes too much for instance variable '@status_filter'
- SeiProcessesController has no descriptive comment
- SeiProcessesController has at least 6 instance variables
+ before_action :set_sei_process, only: [:show, :edit, :update, :destroy]
+
+ # GET /sei_processes
+ # Lista os processos e solicitações criados
+ def index
+ # Filtra solicitações baseadas nos estados marcados como visíveis
+ @all_statuses = SeiProcess.all_statuses
+ session[:statuses] = params[:statuses] || session[:statuses] || @all_statuses.zip([]).to_h -
+ @status_filter = session[:statuses].keys -
+
+ # Lista todas as solicitações de credenciamento para um administrador
+ if current_user.role == "administrator"
+ @sei_processes = SeiProcess.where(status: @status_filter)
+ # Lista as solicitações próprias para um professor
+ else
+ @my_processes = SeiProcess.where(user_id: current_user.id, status: @status_filter)
+ end
+ end
+
+ # GET /sei_processes/1
+ # Mostra detalhes de um registro criado
+ def show
+ end
+
+ # GET /sei_processes/new
+ # Renderiza página para criação de umm registro
+ def new
+ # Renderiza Requisitos de Credenciamento, caso existam, na página de criação de processo ou de abrir solicitação de credenciamento
+ @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento')
+ @sei_process = SeiProcess.new
+ end
+
+ # GET /sei_processes/1/edit
+ # Renderiza página para atualizar um registro
+ def edit
+ end
+
+ # POST /sei_processes
+ # Faz o tratamento dos dados enviados pelo usuário para decidir se o registro é válido ou não
+ def create - SeiProcessesController#create has approx 7 statements
+ # Faz correções de entradas inválidas baseando-se nos dados do usuário logado
+ mandatory_params = {'user_id' => current_user.id, 'status' => 'Espera', 'code' => '0'}
+ @sei_process = SeiProcess.new(sei_process_params.merge(mandatory_params))
+
+ respond_to do |format|
+ # Quando condições da model forem cumpridas, cria um novo registro no banco, redireciona para pagina index da tabela atual e mostra uma mensagem de sucesso
+ if @sei_process.save
+ format.html { redirect_to sei_processes_url, notice: 'Processo aberto com sucesso!' } -
+ # Mostra uma mensagem de erro se condições da model não forem cumpridas
+ else
+ format.html { render :new } -
+ end
+ end
+ end
+
+ # PATCH/PUT /sei_processes/1
+ # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não
+ def update - SeiProcessesController#update has approx 6 statements
+ respond_to do |format|
+ # Quando condições da model forem cumpridas, atualiza o registro no banco, redireciona para pagina index da tabela atual e mostra uma mensagem de sucesso
+ if @sei_process.update(sei_process_params)
+ format.html { redirect_to sei_processes_url, notice: 'Processo atualizado com sucesso!' } -
+
+ # Cria o credenciamento correspondente aa solicitação aprovada
+ if @sei_process.status == 'Aprovado' && (Accreditation.find_by(sei_process: @sei_process.id) == nil) -
- SeiProcessesController#update performs a nil-check
+ Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id) -
+ end
+
+ # Mostra uma mensagem de erro se condições da model não forem cumpridas
+ else
+ format.html { render :edit } -
+ end
+ end
+ end
+
+ # DELETE /sei_processes/1
+ # Decide se a exclusão do registro é válida ou não
+ def destroy -
+ respond_to do |format|
+ # Mensagem de sucesso ao excluir processo ou solicitação quando condições da model forem cumpridas
+ if @sei_process.destroy
+ format.html { redirect_to sei_processes_url, notice: 'Processo excluído com sucesso!' } -
+ # Mensagem de erro se condições da model não forem cumpridas
+ else
+ format.html { redirect_to sei_processes_url, notice: 'Erro: não foi possível excluir o processo!' } -
+ end
+ end
+ end
+
+ private
+ # Define parametros de Processo
+ def set_sei_process
+ @sei_process = SeiProcess.find(params[:id])
+ end
+
+ # Never trust parameters from the scary internet, only allow the white list through.
+ def sei_process_params
+ params.require(:sei_process).permit(:user_id, :status, :code, documents: [])
+ end
+end
+
+
RUBYCRITIC
+
+ module AccreditationsHelper - AccreditationsHelper has no descriptive comment
+end
+
+
RUBYCRITIC
+
+ module ApplicationHelper - ApplicationHelper has no descriptive comment
+end
+
+
RUBYCRITIC
+
+ module HomeHelper - HomeHelper has no descriptive comment
+end
+
+
RUBYCRITIC
+
+ module RequirementsHelper - RequirementsHelper has no descriptive comment
+end
+
+
RUBYCRITIC
+
+ module SeiProcessesHelper - SeiProcessesHelper has no descriptive comment
+end
+
+
RUBYCRITIC
+
+ class ApplicationJob < ActiveJob::Base - ApplicationJob has no descriptive comment
+end
+
+
RUBYCRITIC
+
+ class ApplicationMailer < ActionMailer::Base - ApplicationMailer has no descriptive comment
+ default from: 'from@example.com'
+ layout 'mailer'
+end
+
+
RUBYCRITIC
+
+ class Accreditation < ApplicationRecord - Accreditation assumes too much for instance variable '@allow_deletion'
- Accreditation has no descriptive comment
+ belongs_to :user
+ belongs_to :sei_process
+ validates :sei_process, uniqueness: true
+
+ validate :check_role, on: [:create, :update]
+ # Define se usuário atual está logado e se é administrador do sistema
+ def current_user_is_admin - Accreditation#current_user_is_admin doesn't depend on instance state (maybe move it to another class?)
+ Current.user != nil && Current.user.role == 'administrator' - Accreditation#current_user_is_admin calls 'Current.user' 2 times
+ end
+ # Permite criação ou atualização do credenciamento por um administrador
+ def check_role
+ unless current_user_is_admin
+ self.errors.add(:base, 'Usuário sem permissão')
+ return false
+ end
+ true
+ end
+
+ validate :check_date, on: :update
+ # Permite atualização com base em decorrência real de um período (data final superior a data inicial)
+ def check_date
+ if (start_date == nil) || (end_date == nil) || (end_date < start_date) - Accreditation#check_date performs a nil-check
+ self.errors.add(:end_date, 'inválida')
+ return false
+ end
+ true
+ end
+
+ before_destroy :check_permission
+ # Habilita deleção (usado por 'db/seeds.rb')
+ def allow_deletion! - Accreditation has missing safe method 'allow_deletion!'
+ @allow_deletion = true
+ end
+ # Permite deleção de credenciamento por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia
+ def check_permission
+ throw(:abort) unless @allow_deletion || current_user_is_admin
+ end
+end
+
+
RUBYCRITIC
+
+ class ApplicationRecord < ActiveRecord::Base - ApplicationRecord has no descriptive comment
+ self.abstract_class = true
+end
+
+
RUBYCRITIC
+
+ class Requirement < ApplicationRecord - Requirement assumes too much for instance variable '@allow_deletion'
- Requirement has no descriptive comment
+ validates :title, presence: true, uniqueness: true
+ has_many_attached :documents
+
+ validate :check_role, on: [:create, :update]
+ # Define se usuário atual está logado e se é administrador do sistema
+ def current_user_is_admin - Requirement#current_user_is_admin doesn't depend on instance state (maybe move it to another class?)
+ Current.user != nil && Current.user.role == 'administrator' - Requirement#current_user_is_admin calls 'Current.user' 2 times
+ end
+ # Permite criação ou atualização de requisitos por um administrador
+ def check_role
+ unless current_user_is_admin
+ self.errors.add(:base, 'Usuário sem permissão')
+ return false
+ end
+ true
+ end
+
+ before_destroy :check_permission
+ # Habilita deleção (usado por 'db/seeds.rb')
+ def allow_deletion! - Requirement has missing safe method 'allow_deletion!'
+ @allow_deletion = true
+ end
+ # Permite deleção de requisitos por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia
+ def check_permission
+ unless @allow_deletion || current_user_is_admin
+ throw(:abort)
+ end
+ end
+end
+
+
RUBYCRITIC
+
+ class SeiProcess < ApplicationRecord - SeiProcess assumes too much for instance variable '@allow_deletion'
- SeiProcess has no descriptive comment
+ belongs_to :user
+ has_many_attached :documents
+ validates :documents, attached: true
+
+ enum status: {
+ Espera: 0,
+ Aprovado: 1,
+ Rejeitado: 2
+ }
+ # Lista os status possíveis para os registros
+ def self.all_statuses
+ %w[Espera Aprovado Rejeitado]
+ end
+
+ # Define se usuário atual está logado e se é administrador do sistema
+ def current_user_is_admin - SeiProcess#current_user_is_admin doesn't depend on instance state (maybe move it to another class?)
+ Current.user != nil && Current.user.role == 'administrator' - SeiProcess#current_user_is_admin calls 'Current.user' 2 times
+ end
+
+ validate :check_signed_in, on: :create
+ # Permite criação de processo ou solicitação caso usuário esteja logado
+ def check_signed_in
+ if Current.user == nil - SeiProcess#check_signed_in performs a nil-check
+ self.errors.add(:base, 'Usuário sem permissão')
+ return false
+ end
+ true
+ end
+
+ validate :check_role, on: :update
+ # Permite atualização de processo ou solicitação por um administrador
+ def check_role
+ unless current_user_is_admin
+ self.errors.add(:base, 'Usuário sem permissão')
+ return false
+ end
+ true
+ end
+
+ before_destroy :check_permission
+ # Habilita deleção (usado por 'db/seeds.rb')
+ def allow_deletion! - SeiProcess has missing safe method 'allow_deletion!'
+ @allow_deletion = true
+ end
+ # Permite deleção de processo ou solicitação por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia
+ def check_permission
+ throw(:abort) unless @allow_deletion || current_user_is_admin
+ end
+end
+
+
RUBYCRITIC
+
+ # frozen_string_literal: true
+
+class User < ApplicationRecord - User has no descriptive comment
+ validates :full_name, presence: true
+ validates :role, presence: true
+
+ # Include default devise modules. Others available are:
+ # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
+ devise :database_authenticatable, :registerable,
+ :recoverable, :rememberable, :validatable
+
+ enum role: %i[administrator secretary professor student]
+end
+
+