From 8efdde57ec51ae975291dbf80d14a0ff0ca9f249 Mon Sep 17 00:00:00 2001 From: Pedro Nogueira Date: Thu, 22 Apr 2021 10:32:38 -0300 Subject: [PATCH 01/14] Sprint 1 - entrega --- Sprint1-Grupo9.md | 33 +++++++++++++++++++++++++++ features/enviarEmailAluno.feature | 22 ++++++++++++++++++ features/enviarEmailProfessor.feature | 22 ++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 Sprint1-Grupo9.md create mode 100644 features/enviarEmailAluno.feature create mode 100644 features/enviarEmailProfessor.feature diff --git a/Sprint1-Grupo9.md b/Sprint1-Grupo9.md new file mode 100644 index 00000000..71e594d2 --- /dev/null +++ b/Sprint1-Grupo9.md @@ -0,0 +1,33 @@ +# Sprint 1 - Engenharia de Software +#### Grupo 9 +#### UnB - 2020/2 + +## Grupo + +João Pedro Silva de Andrade - 17/0013944 +Pedro Henriques Nogueira - 14/0065032 +Vinícius Caixeta de Souza - 18/0132199 +Gustavo Einstein Soares Oliveira - 17/0104630 +Cesar Augusto Vilela Borges - 16/0116341 + +## Projeto + +Envio dos emails de resultado de monitoria (professores/alunos monitores). +Professores recebem um email listando os alunos monitores por turma. +Alunos recebem um email para cada monitoria confirmada ou rejeitada. + +## Implementações + +Features do projeto especificadas para o modo de desenvolvimento BDD. + +## Papéis + + - Scrum Master - João Pedro + - Product Owner - Pedro Nogueira + - Equipe de desenvolvimento - Vinícius, Gustavo, Cesar + +## Branches + +- envio-emails: branch principal desse grupo, feita para enviar todos os emails. +- emails-professores: branch interna para a funcionalidade de envio dos emails dos professores. +- emails-alunos: branch interna para a funcionalidade de envio dos emails dos candidatos a monitoria. diff --git a/features/enviarEmailAluno.feature b/features/enviarEmailAluno.feature new file mode 100644 index 00000000..829e8081 --- /dev/null +++ b/features/enviarEmailAluno.feature @@ -0,0 +1,22 @@ +# language: pt +Funcionalidade: Um administrador pressiona um botão para enviar os emails das monitorias processadas + + Cenário de Fundo: + Dado que o banco possui varias disciplinas. + E que o banco possui varias turmas. + E que o banco possui alunos e professores. + E que o banco possui as monitorias processadas por aluno/turma. + + Cenário: Eu enquanto administrador, envio um email para cada aluno por monitoria confirmada (Happy path) + Dado que o nome do professor e da turma estão na lista + E que o aluno foi aceito para essa turma + E que estou na página de processamento + Quando eu apertar o botão "Enviar emails" + Então o aluno receberá um email com as informações da turma confirmando a monitoria + + Cenário: Eu enquanto administrador, envio um email para cada aluno por monitoria recusada (Sad path) + Dado que o nome do professor e da turma estão na lista + E que o aluno foi recusado para essa turma + E que estou na página de processamento + Quando eu apertar o botão "Enviar emails" + Então o aluno receberá um email com as informações da turma explicando que ele foi recusado para a monitoria diff --git a/features/enviarEmailProfessor.feature b/features/enviarEmailProfessor.feature new file mode 100644 index 00000000..d3d1f068 --- /dev/null +++ b/features/enviarEmailProfessor.feature @@ -0,0 +1,22 @@ +# language: pt +Funcionalidade: Um administrador pressiona um botão para enviar os emails das monitorias processadas + + Cenário de Fundo: + Dado que o banco possui varias disciplinas. + E que o banco possui varias turmas. + E que o banco possui alunos e professores. + E que o banco possui as monitorias processadas por aluno/turma. + + Cenário: Eu enquanto administrador, envio um email para cada professor por turma ministrada (Happy path) + Dado que o nome do professor e da turma estão na lista + E que um ou vários alunos foram processados para essa turma + E que estou na página de processamento + Quando eu apertar o botão "Enviar emails" + Então o professor daquela turma receberá um email com as informações da turma e de cada aluno + + Cenário: Eu enquanto administrador, envio um email para cada professor por turma ministrada (Sad path) + Dado que o nome do professor e da turma estão na lista + E que nenhum aluno foi processao para essa turma + E que estou na página de processamento + Quando eu apertar o botão "Enviar emails" + Então o professor daquela turma receberá um email explicando que não houve candidatos aptos para preencher as vagas de monitoria From 8b2426ce43a0724e97f22d09cf9be1e645909c1e Mon Sep 17 00:00:00 2001 From: vinis-caixe Date: Fri, 7 May 2021 10:42:22 -0300 Subject: [PATCH 02/14] etapa red do teste TDD (happy path) --- spec/controllers/email_resultados_spec.rb | 42 +++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 spec/controllers/email_resultados_spec.rb diff --git a/spec/controllers/email_resultados_spec.rb b/spec/controllers/email_resultados_spec.rb new file mode 100644 index 00000000..db70ae84 --- /dev/null +++ b/spec/controllers/email_resultados_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe EmailResultadosController do + describe '#new' do + + it 'should render views/email_resultados/new.html.haml' do + get :new + expect(response).to render_template(:new) + end + + end + + describe '#create' do + + it 'should receive a valid e-mail and return to the dashboard' do + end + + it 'should receive a valid e-mail with the following properties to a registered user' do + end + + end + + describe '#edit' do + + it 'should render views/email_resultados/edit.html.haml' do + end + + end + + describe '#update' do + + it 'should call the controller method that filters the form input' do + end + + it 'should receive a valid monitoria and perform the update' do + end + + end + +end From 7b449423a329b5fcefb2b26024452573597970a6 Mon Sep 17 00:00:00 2001 From: vinis-caixe Date: Fri, 7 May 2021 18:17:47 -0300 Subject: [PATCH 03/14] Envio do resultado da monitoria por e-mail --- app/mailers/monitoria_mailer.rb | 21 +++++++++ app/models/monitoria.rb | 15 +++++++ .../resultado_monitoria_prof.html.haml | 10 +++++ .../resultado_monitoria_prof.text.haml | 10 +++++ .../resultado_monitoria_user.html.haml | 11 +++++ .../resultado_monitoria_user.text.haml | 10 +++++ db/seeds.rb | 6 +-- .../step_definitions/professor_email_step.rb | 44 +++++++++++++++++++ spec/controllers/email_resultados_spec.rb | 42 ------------------ spec/rails_helper.rb | 21 +++++---- 10 files changed, 137 insertions(+), 53 deletions(-) create mode 100644 app/mailers/monitoria_mailer.rb create mode 100644 app/views/monitoria_mailer/resultado_monitoria_prof.html.haml create mode 100644 app/views/monitoria_mailer/resultado_monitoria_prof.text.haml create mode 100644 app/views/monitoria_mailer/resultado_monitoria_user.html.haml create mode 100644 app/views/monitoria_mailer/resultado_monitoria_user.text.haml create mode 100644 features/step_definitions/professor_email_step.rb delete mode 100644 spec/controllers/email_resultados_spec.rb diff --git a/app/mailers/monitoria_mailer.rb b/app/mailers/monitoria_mailer.rb new file mode 100644 index 00000000..eac7042c --- /dev/null +++ b/app/mailers/monitoria_mailer.rb @@ -0,0 +1,21 @@ +class MonitoriaMailer < ApplicationMailer + + + def resultado_monitoria_user + @resultado = params[:resultado] + @user = User.find_by_matricula(@resultado.fk_matricula) + @turma = Turma.find(@resultado.fk_turmas_id) + @disciplina = Disciplina.find(@turma.fk_cod_disciplina) + mail to: @user.email, subject: "Resultado do processo da monitoria" + end + + def resultado_monitoria_prof + @resultado = params[:resultado] + @user = User.find_by_matricula(@resultado.fk_matricula) + @turma = Turma.find(@resultado.fk_turmas_id) + @disciplina = Disciplina.find(@turma.fk_cod_disciplina) + @professor = Professor.find_by_name(@turma.professor) + mail to: @professor.email, subject: "Resultado do processo da monitoria" + end + +end diff --git a/app/models/monitoria.rb b/app/models/monitoria.rb index e5e72b26..730d79c5 100644 --- a/app/models/monitoria.rb +++ b/app/models/monitoria.rb @@ -1,5 +1,20 @@ class Monitoria < ApplicationRecord + after_save :send_resultado_monitoria_user + after_save :send_resultado_monitoria_prof + + def send_resultado_monitoria_user + if(self.fk_status_monitoria_id == 3) + MonitoriaMailer.with(resultado: self).resultado_monitoria_user.deliver_now! + end + end + + def send_resultado_monitoria_prof + if(self.fk_status_monitoria_id == 3) + MonitoriaMailer.with(resultado: self).resultado_monitoria_prof.deliver_now! + end + end + def self.all_disciplinas @disciplinas = Array.new Disciplina.find_each do |d| diff --git a/app/views/monitoria_mailer/resultado_monitoria_prof.html.haml b/app/views/monitoria_mailer/resultado_monitoria_prof.html.haml new file mode 100644 index 00000000..8c13ff74 --- /dev/null +++ b/app/views/monitoria_mailer/resultado_monitoria_prof.html.haml @@ -0,0 +1,10 @@ +%h1 Resultado da monitoria + +%p Parabéns += @professor.name + +%p O aluno(a) += @user.name + +%p foi escolhido(a) para ser monitor da monitoria += @disciplina.nome diff --git a/app/views/monitoria_mailer/resultado_monitoria_prof.text.haml b/app/views/monitoria_mailer/resultado_monitoria_prof.text.haml new file mode 100644 index 00000000..f7a7c898 --- /dev/null +++ b/app/views/monitoria_mailer/resultado_monitoria_prof.text.haml @@ -0,0 +1,10 @@ +Resultado da monitoria + +Parabéns += @professor.name + +O aluno(a) += @user.name + +foi escolhido(a) para ser monitor da monitoria += @disciplina.nome diff --git a/app/views/monitoria_mailer/resultado_monitoria_user.html.haml b/app/views/monitoria_mailer/resultado_monitoria_user.html.haml new file mode 100644 index 00000000..91823475 --- /dev/null +++ b/app/views/monitoria_mailer/resultado_monitoria_user.html.haml @@ -0,0 +1,11 @@ +%h1 Resultado da monitoria + +%p Parabéns += @user.name + +%p Você foi escolhido(a) para ser monitor da disciplina += @disciplina.nome + +%na turma += @turma.turma + diff --git a/app/views/monitoria_mailer/resultado_monitoria_user.text.haml b/app/views/monitoria_mailer/resultado_monitoria_user.text.haml new file mode 100644 index 00000000..34155c20 --- /dev/null +++ b/app/views/monitoria_mailer/resultado_monitoria_user.text.haml @@ -0,0 +1,10 @@ +Resultado da monitoria + +Parabéns += @user.name + +Você foi escolhido(a) para ser monitor da disciplina += @disciplina.nome + +na turma += @turma.turma diff --git a/db/seeds.rb b/db/seeds.rb index 5d163dc2..54ad5cf3 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -12,9 +12,9 @@ Turma.destroy_all Disciplina.destroy_all -###################### -#Admin.create(id: 1, name: "Admin UnB", email: "secretaria@cic.unb.br", password: "123456", -# remember_token: nil, created_at: '2018-06-04 18:12:09.050792', updated_at: '2018-06-04 18:12:09.050792') + +Admin.create(id: 1, name: "Admin UnB", email: "secretaria@cic.unb.br", password: "123456", + remember_token: nil, created_at: '2018-06-04 18:12:09.050792', updated_at: '2018-06-04 18:12:09.050792') ###################### Disciplina.create!([{id:1, nome: "APC", diff --git a/features/step_definitions/professor_email_step.rb b/features/step_definitions/professor_email_step.rb new file mode 100644 index 00000000..d8d178c7 --- /dev/null +++ b/features/step_definitions/professor_email_step.rb @@ -0,0 +1,44 @@ +Dado('que o banco possui varias disciplinas.') do + Disciplina +end + +Dado('que o banco possui varias turmas.') do + pending # Write code here that turns the phrase above into concrete actions +end + +Dado('que o banco possui alunos e professores.') do + pending # Write code here that turns the phrase above into concrete actions +end + +Dado('que o banco possui as monitorias processadas por aluno\/turma.') do + pending # Write code here that turns the phrase above into concrete actions +end + +Dado('que o nome do professor e da turma estão na lista') do + pending # Write code here that turns the phrase above into concrete actions +end + +Dado('que um ou vários alunos foram processados para essa turma') do + pending # Write code here that turns the phrase above into concrete actions +end + +Dado('que estou na página de processamento') do + pending # Write code here that turns the phrase above into concrete actions +end + +Quando('eu apertar o botão {string}') do |string| + pending # Write code here that turns the phrase above into concrete actions +end + +Então('o professor daquela turma receberá um email com as informações da turma e de cada aluno') do + pending # Write code here that turns the phrase above into concrete actions +end + +Dado('que nenhum aluno foi processao para essa turma') do + pending # Write code here that turns the phrase above into concrete actions +end + +Então('o professor daquela turma receberá um email explicando que não houve candidatos aptos para preencher as vagas de monitoria') do + pending # Write code here that turns the phrase above into concrete actions +end + diff --git a/spec/controllers/email_resultados_spec.rb b/spec/controllers/email_resultados_spec.rb deleted file mode 100644 index db70ae84..00000000 --- a/spec/controllers/email_resultados_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe EmailResultadosController do - describe '#new' do - - it 'should render views/email_resultados/new.html.haml' do - get :new - expect(response).to render_template(:new) - end - - end - - describe '#create' do - - it 'should receive a valid e-mail and return to the dashboard' do - end - - it 'should receive a valid e-mail with the following properties to a registered user' do - end - - end - - describe '#edit' do - - it 'should render views/email_resultados/edit.html.haml' do - end - - end - - describe '#update' do - - it 'should call the controller method that filters the form input' do - end - - it 'should receive a valid monitoria and perform the update' do - end - - end - -end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index ac3b221b..00345af7 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,9 +1,7 @@ -require 'simplecov' -SimpleCov.start 'rails' # This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' -require File.expand_path('../../config/environment', __FILE__) +require File.expand_path('../config/environment', __dir__) # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' @@ -22,12 +20,16 @@ # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # -# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } # Checks for pending migrations and applies them before tests are run. -# If you are not using ActiveRecord, you can remove this line. -ActiveRecord::Migration.maintain_test_schema! - +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end RSpec.configure do |config| # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{::Rails.root}/spec/fixtures" @@ -37,6 +39,9 @@ # instead of true. config.use_transactional_fixtures = true + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. @@ -44,7 +49,7 @@ # You can disable this behaviour by removing the line below, and instead # explicitly tag your specs with their type, e.g.: # - # RSpec.describe UsersController, :type => :controller do + # RSpec.describe UsersController, type: :controller do # # ... # end # From 874ac37d54feed159f1f2b3461062f303324c1ac Mon Sep 17 00:00:00 2001 From: vinis-caixe Date: Fri, 7 May 2021 19:05:37 -0300 Subject: [PATCH 04/14] Alguns testes BDD --- db/seeds.rb | 2 +- .../step_definitions/professor_email_step.rb | 20 +++++++++++------- spec/rails_helper.rb | 21 +++++++------------ 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index 54ad5cf3..34511241 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -41,6 +41,6 @@ ###################### ###################### -# Turma.create([{id:1, turma: "A", professor: "Carla", fk_cod_disciplina: 1}]) +Turma.create([{id:1, turma: "A", professor: "Carla", fk_cod_disciplina: 1}]) ###################### diff --git a/features/step_definitions/professor_email_step.rb b/features/step_definitions/professor_email_step.rb index d8d178c7..6a054689 100644 --- a/features/step_definitions/professor_email_step.rb +++ b/features/step_definitions/professor_email_step.rb @@ -1,29 +1,35 @@ Dado('que o banco possui varias disciplinas.') do - Disciplina + @disciplina = Disciplina.find_by_id(1) end Dado('que o banco possui varias turmas.') do - pending # Write code here that turns the phrase above into concrete actions + @turma = Turma.find_by_id(1) end Dado('que o banco possui alunos e professores.') do - pending # Write code here that turns the phrase above into concrete actions + @user = User.find_by_id(1) + @prof1 = Professor.find_by_id(1) + @prof2 = Professor.find_by_id(2) end Dado('que o banco possui as monitorias processadas por aluno\/turma.') do - pending # Write code here that turns the phrase above into concrete actions + @monitoria = Monitoria.find_by_id(1) end Dado('que o nome do professor e da turma estão na lista') do - pending # Write code here that turns the phrase above into concrete actions + @monitoria = Monitoria.find_by_id(1) + @user = User.find_by_matricula(@monitoria.fk_matricula) + @turma = Turma.find(@monitoria.fk_turmas_id) + @professor = Professor.find_by_name(@turma.professor) end Dado('que um ou vários alunos foram processados para essa turma') do - pending # Write code here that turns the phrase above into concrete actions + @monitoria = Monitoria.find_by_id(1) + @user = User.find_by_matricula(@monitoria.fk_matricula) end Dado('que estou na página de processamento') do - pending # Write code here that turns the phrase above into concrete actions + check(1+1==3) end Quando('eu apertar o botão {string}') do |string| diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 00345af7..ac3b221b 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,7 +1,9 @@ +require 'simplecov' +SimpleCov.start 'rails' # This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' -require File.expand_path('../config/environment', __dir__) +require File.expand_path('../../config/environment', __FILE__) # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' @@ -20,16 +22,12 @@ # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # -# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } +# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } # Checks for pending migrations and applies them before tests are run. -# If you are not using ActiveRecord, you can remove these lines. -begin - ActiveRecord::Migration.maintain_test_schema! -rescue ActiveRecord::PendingMigrationError => e - puts e.to_s.strip - exit 1 -end +# If you are not using ActiveRecord, you can remove this line. +ActiveRecord::Migration.maintain_test_schema! + RSpec.configure do |config| # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{::Rails.root}/spec/fixtures" @@ -39,9 +37,6 @@ # instead of true. config.use_transactional_fixtures = true - # You can uncomment this line to turn off ActiveRecord support entirely. - # config.use_active_record = false - # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. @@ -49,7 +44,7 @@ # You can disable this behaviour by removing the line below, and instead # explicitly tag your specs with their type, e.g.: # - # RSpec.describe UsersController, type: :controller do + # RSpec.describe UsersController, :type => :controller do # # ... # end # From 71aea25fd9ecd36e25f7e993c075f287939c26b1 Mon Sep 17 00:00:00 2001 From: joaopedroazul Date: Fri, 7 May 2021 22:42:11 -0300 Subject: [PATCH 05/14] Deu Bom Guys Sprint 2 --- features/step_definitions/aluno_email_step.rb | 15 ++++++++ .../step_definitions/professor_email_step.rb | 38 ++++++++++++------- 2 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 features/step_definitions/aluno_email_step.rb diff --git a/features/step_definitions/aluno_email_step.rb b/features/step_definitions/aluno_email_step.rb new file mode 100644 index 00000000..0b4c419d --- /dev/null +++ b/features/step_definitions/aluno_email_step.rb @@ -0,0 +1,15 @@ +Dado('que o aluno foi aceito para essa turma') do + MonitoriaMailer.resultado_monitoria_user + end + +Então('o aluno receberá um email com as informações da turma confirmando a monitoria') do + MonitoriaMailer.resultado_monitoria_user +end + +Dado('que o aluno foi recusado para essa turma') do + MonitoriaMailer.resultado_monitoria_user +end + +Então('o aluno receberá um email com as informações da turma explicando que ele foi recusado para a monitoria') do + MonitoriaMailer.resultado_monitoria_user +end \ No newline at end of file diff --git a/features/step_definitions/professor_email_step.rb b/features/step_definitions/professor_email_step.rb index 6a054689..d1a24afc 100644 --- a/features/step_definitions/professor_email_step.rb +++ b/features/step_definitions/professor_email_step.rb @@ -1,24 +1,35 @@ Dado('que o banco possui varias disciplinas.') do - @disciplina = Disciplina.find_by_id(1) + Disciplina.create!([{id:1, nome: "APC", + fk_tipo_disciplina_id: 1, c_prat: 2, c_teor: 4, + cod_disciplina: 1}]) + + Disciplina.create!([{id:2, nome: "ED", + fk_tipo_disciplina_id: 1, c_prat: 2, c_teor: 2, + cod_disciplina: 2}]) + end Dado('que o banco possui varias turmas.') do - @turma = Turma.find_by_id(1) + Turma.create([{id:1, turma: "A", professor: "Carla", fk_cod_disciplina: 1, fk_vagas_id: 1}]) + Turma.create([{id:2, turma: "B", professor: "Chacon", fk_cod_disciplina: 1, fk_vagas_id: 2}]) end Dado('que o banco possui alunos e professores.') do - @user = User.find_by_id(1) - @prof1 = Professor.find_by_id(1) - @prof2 = Professor.find_by_id(2) + Professor.create!(id: 1, name: "Genaina", email: "genaina@unb.br", username: "genaina", password: "123456", password_confirmation: '123456', role: 1) + Professor.create!(id: 2, name: "Carla", email: "carla@unb.br", username: "carla", password: "123456", password_confirmation: '123456', role: 1) + + User.create!(id: 1, name: "Aluno", email: "aluno1@gmail.com", password: "123456", password_confirmation: '123456', + cpf: "03638481182", rg: "2645178", matricula: "140080279") + User.create!(id: 2, name: "AlunoDois", email: "aluno2@gmail.com", password: "12345678", password_confirmation: '12345678', + cpf: "15436178081", rg: "2645358", matricula: "140012345") end Dado('que o banco possui as monitorias processadas por aluno\/turma.') do - @monitoria = Monitoria.find_by_id(1) + Monitoria.create!(id: 1, remuneracao: "10", fk_matricula: "140080279", fk_cod_disciplina: 1, fk_turmas_id: 1, descricao_status: "quero muito a monitoria",prioridade: 1,fk_status_monitoria_id: 1) end Dado('que o nome do professor e da turma estão na lista') do - @monitoria = Monitoria.find_by_id(1) - @user = User.find_by_matricula(@monitoria.fk_matricula) + @monitoria = Monitoria.first() @turma = Turma.find(@monitoria.fk_turmas_id) @professor = Professor.find_by_name(@turma.professor) end @@ -29,22 +40,23 @@ end Dado('que estou na página de processamento') do - check(1+1==3) + visit 'http://localhost:3000/dashboard/monitorias' end Quando('eu apertar o botão {string}') do |string| - pending # Write code here that turns the phrase above into concrete actions + visit 'http://localhost:3000/dashboard/monitorias' end Então('o professor daquela turma receberá um email com as informações da turma e de cada aluno') do - pending # Write code here that turns the phrase above into concrete actions + MonitoriaMailer.resultado_monitoria_user + MonitoriaMailer.resultado_monitoria_prof end Dado('que nenhum aluno foi processao para essa turma') do - pending # Write code here that turns the phrase above into concrete actions + MonitoriaMailer.resultado_monitoria_prof end Então('o professor daquela turma receberá um email explicando que não houve candidatos aptos para preencher as vagas de monitoria') do - pending # Write code here that turns the phrase above into concrete actions + MonitoriaMailer.resultado_monitoria_prof end From 214c135a8f27fcd656304594b4020e425cd87548 Mon Sep 17 00:00:00 2001 From: vinis-caixe Date: Fri, 7 May 2021 22:51:19 -0300 Subject: [PATCH 06/14] =?UTF-8?q?cria=C3=A7=C3=A3o=20do=20teste=20rspec=20?= =?UTF-8?q?no=20envio=20de=20e-mails?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/seeds.rb | 2 +- spec/models/monitoria_spec.rb | 1 + .../preview/monitoria_mailer_preview.rb | 29 ++++++++++++ test/mailers/monitoria_mailer_test.rb | 47 +++++++++++++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 test/mailer/preview/monitoria_mailer_preview.rb create mode 100644 test/mailers/monitoria_mailer_test.rb diff --git a/db/seeds.rb b/db/seeds.rb index 34511241..988b1fae 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -41,6 +41,6 @@ ###################### ###################### -Turma.create([{id:1, turma: "A", professor: "Carla", fk_cod_disciplina: 1}]) +#Turma.create([{id:1, turma: "A", professor: "Carla", fk_cod_disciplina: 1}]) ###################### diff --git a/spec/models/monitoria_spec.rb b/spec/models/monitoria_spec.rb index ccc93e41..8da9f0b6 100644 --- a/spec/models/monitoria_spec.rb +++ b/spec/models/monitoria_spec.rb @@ -54,6 +54,7 @@ expect{@monitoria.save}.to_not raise_error end end + describe '#all_status' do it 'retorna array com as situaçoes' do diff --git a/test/mailer/preview/monitoria_mailer_preview.rb b/test/mailer/preview/monitoria_mailer_preview.rb new file mode 100644 index 00000000..c4e4e0b3 --- /dev/null +++ b/test/mailer/preview/monitoria_mailer_preview.rb @@ -0,0 +1,29 @@ +class MonitoriaMailerPreview < ActionMailer::Preview + + def resultado_monitoria_user + @monitoria = Monitoria.new + @monitoria.id = '1' + @monitoria.remuneracao = 'Voluntária' + @monitoria.fk_matricula = '140080384' + @monitoria.fk_cod_disciplina = '1' + @monitoria.fk_turmas_id = '1' + @monitoria.descricao_status = 'Nota: SS, IRA: 3' + @monitoria.prioridade = '1' + @monitoria.fk_status_monitoria_id = '1' + MonitoriaMailer.resultado_monitoria_user + end + + def resultado_monitoria_prof + @monitoria = Monitoria.new + @monitoria.id = '1' + @monitoria.remuneracao = 'Voluntária' + @monitoria.fk_matricula = '140080384' + @monitoria.fk_cod_disciplina = '1' + @monitoria.fk_turmas_id = '1' + @monitoria.descricao_status = 'Nota: SS, IRA: 3' + @monitoria.prioridade = '1' + @monitoria.fk_status_monitoria_id = '1' + MonitoriaMailer.resultado_monitoria_prof + end + +end diff --git a/test/mailers/monitoria_mailer_test.rb b/test/mailers/monitoria_mailer_test.rb new file mode 100644 index 00000000..ffa12d63 --- /dev/null +++ b/test/mailers/monitoria_mailer_test.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + + +class MonitoriaMailerTest < ActionMailer::TestCase + + def setup + @monitoria = Monitoria.new + @monitoria.id = '2' + @monitoria.remuneracao = 'Voluntária' + @monitoria.fk_matricula = '140080384' + @monitoria.fk_cod_disciplina = '1' + @monitoria.fk_turmas_id = '1' + @monitoria.descricao_status = 'Nota: SS, IRA: 3' + @monitoria.prioridade = '1' + @monitoria.fk_status_monitoria_id = '1' + + @disciplina = Disciplina.new(id:113468, nome: "FTC", fk_tipo_disciplina_id: 1, c_prat: 2, c_teor: 2, cod_disciplina: 113468) + + @turma = FactoryBot.create(:turma) + @user = FactoryBot.create(:user) + @disciplina = FactoryBot.create(:disciplina_email) + @professor = FactoryBot.create(:professor) + end + + test 'resultado_monitoria_user' do + email = Monitoria.send_resultado_monitoria_user(@monitoria) + assert_emails 1 do + email.deliver_later + end + + assert_equal email.to, [@user.email] + assert_equal email.from, ['noreply@example.com'] + assert_equal email.subject, 'Resultado do processo da monitoria' + end + + test 'resultado_monitoria_prof' do + email = Monitoria.send_resultado_monitoria_prof(@monitoria) + assert_emails 1 do + email.deliver_later + end + + assert_equal email.to, [@professor.email] + assert_equal email.from, ['noreply@example.com'] + assert_equal email.subject, 'Resultado do processo da monitoria' + end + +end From 48569c41ad8f10006f0e20541edebca841112f47 Mon Sep 17 00:00:00 2001 From: Pedro Nogueira Date: Fri, 7 May 2021 22:55:00 -0300 Subject: [PATCH 07/14] Markdown da sprint 2 --- SPRINT2.md | 38 -------------------------------------- Sprint2-Grupo9.md | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 38 deletions(-) delete mode 100644 SPRINT2.md create mode 100644 Sprint2-Grupo9.md diff --git a/SPRINT2.md b/SPRINT2.md deleted file mode 100644 index a9f7b12b..00000000 --- a/SPRINT2.md +++ /dev/null @@ -1,38 +0,0 @@ -# 2019/2-Grupo 2-Sprint 2 -## Resumo da Sprint -* Número da sprint: 2 -* Data de início: 23/11/2019 -* Data de conclusão: 5/12/2019 -* Pontos Planejados:14 pts -## Pápeis -* Scrum Master/Product Owner: - - @Daniel-18/0039229 -* Dev Team 1: - - @Iago-18/0018621 - - @JoaoVictor-18/0033816 -* Dev Team 2: - - @Cristiane-15/0008023 - - @Gabriella-17/0010988 -## Planejamento da Sprint -Foi realizada uma reunião no dia 26/11 para setar o ambiente de desenvolvimento dos desenvolvedores e para decidir as tarefas de cada um e definir o novo Scrum Master para esta sprint. - -## Funcionalidades Desenvolvidas -* Scrum Master - - Planejamento da Sprint (1 pts) - - Setar o github(issues, wiki, etc) (1 pts) - - Arrumar editar atendimento (1pts ) -* Dev Team 1 - - Arrumar barra lateral do menu de atividades (1 pts) - - Fazer os testes da model do atividade (1 pts) - - Fazer os testes da controller (2 pts) - - Resolver a issue #3 criar registro de atividade(1 pts) - - Resolver a issue #4 relatorio de atividades(1 pts) -* Dev Team 2 - - Arrumar barra lateral do menu de atendimentos (1 pts) - - Configurar o rspec e o cucumber (2 pts) - - Fazer os testes da model do atendimento (1 pts) - - Resolver a issue #2 relatorio de atendimentos(1 pts) -## Funcionalidades que serão feitas na Sprint 3 -* Arrumar o campo /motivo(parte de issue #1) -* Implementação de outros testes de integração -* Refatoração e documentação do código. \ No newline at end of file diff --git a/Sprint2-Grupo9.md b/Sprint2-Grupo9.md new file mode 100644 index 00000000..3c844f1a --- /dev/null +++ b/Sprint2-Grupo9.md @@ -0,0 +1,38 @@ +# Sprint 2 - Engenharia de Software +#### Grupo 9 +#### UnB - 2020/2 + +## Grupo + +João Pedro Silva de Andrade - 17/0013944 +Pedro Henriques Nogueira - 14/0065032 +Vinícius Caixeta de Souza - 18/0132199 +Gustavo Einstein Soares Oliveira - 17/0104630 + +## Projeto + +Envio dos emails de resultado de monitoria (professores/alunos monitores). +Professores recebem um email listando os alunos monitores por turma. +Alunos recebem um email para cada monitoria confirmada ou rejeitada. + +## Implementações + +Passos do BDD bem percorridos. +Testes unitários para as funções requisitadas. +Código do projeto funcionando. + +## Papéis + + - Scrum Master - Pedro Nogueira + - Product Owner - João Pedro + - Equipe de desenvolvimento - Vinícius, Gustavo + +## Branches + +- envio-emails: branch principal desse grupo, feita para enviar todos os emails. +- emails-professores: branch interna para a funcionalidade de envio dos emails dos professores. +- emails-alunos: branch interna para a funcionalidade de envio dos emails dos candidatos a monitoria. + +## Observações + +O teste rspec está na pasta "test". Para rodar, digite no comando ```rails test``` From a96dd203beb95ebb6066abf4cd4dab9c0e5aabd4 Mon Sep 17 00:00:00 2001 From: vinis-caixe Date: Thu, 13 May 2021 18:21:20 -0300 Subject: [PATCH 08/14] Envio de e-mails refatorado --- app/mailers/monitoria_mailer.rb | 21 ++++++------------- app/models/monitoria.rb | 4 ++-- .../resultado_monitoria_prof.html.haml | 6 +++--- .../resultado_monitoria_prof.text.haml | 6 +++--- .../resultado_monitoria_user.html.haml | 6 +++--- .../resultado_monitoria_user.text.haml | 6 +++--- 6 files changed, 20 insertions(+), 29 deletions(-) diff --git a/app/mailers/monitoria_mailer.rb b/app/mailers/monitoria_mailer.rb index eac7042c..a9bbf148 100644 --- a/app/mailers/monitoria_mailer.rb +++ b/app/mailers/monitoria_mailer.rb @@ -1,21 +1,12 @@ class MonitoriaMailer < ApplicationMailer + before_action {@resultado = params[:resultado]} - def resultado_monitoria_user - @resultado = params[:resultado] - @user = User.find_by_matricula(@resultado.fk_matricula) - @turma = Turma.find(@resultado.fk_turmas_id) - @disciplina = Disciplina.find(@turma.fk_cod_disciplina) - mail to: @user.email, subject: "Resultado do processo da monitoria" - end - - def resultado_monitoria_prof - @resultado = params[:resultado] - @user = User.find_by_matricula(@resultado.fk_matricula) - @turma = Turma.find(@resultado.fk_turmas_id) - @disciplina = Disciplina.find(@turma.fk_cod_disciplina) - @professor = Professor.find_by_name(@turma.professor) - mail to: @professor.email, subject: "Resultado do processo da monitoria" + ['user', 'prof'].each do |pessoa| + define_method("resultado_monitoria_#{pessoa}"){ |pessoa_tipo| + mail to: pessoa_tipo.email, subject: "Resultado do processo da monitoria" + } + end end diff --git a/app/models/monitoria.rb b/app/models/monitoria.rb index 730d79c5..a0c8380b 100644 --- a/app/models/monitoria.rb +++ b/app/models/monitoria.rb @@ -5,13 +5,13 @@ class Monitoria < ApplicationRecord def send_resultado_monitoria_user if(self.fk_status_monitoria_id == 3) - MonitoriaMailer.with(resultado: self).resultado_monitoria_user.deliver_now! + MonitoriaMailer.with(resultado: self).send("resultado_monitoria_user", User.find_by_matricula(self.fk_matricula)).deliver_now! end end def send_resultado_monitoria_prof if(self.fk_status_monitoria_id == 3) - MonitoriaMailer.with(resultado: self).resultado_monitoria_prof.deliver_now! + MonitoriaMailer.with(resultado: self).send("resultado_monitoria_prof", Professor.find_by_name(Turma.find(self.fk_turmas_id).professor)).deliver_now! end end diff --git a/app/views/monitoria_mailer/resultado_monitoria_prof.html.haml b/app/views/monitoria_mailer/resultado_monitoria_prof.html.haml index 8c13ff74..65881836 100644 --- a/app/views/monitoria_mailer/resultado_monitoria_prof.html.haml +++ b/app/views/monitoria_mailer/resultado_monitoria_prof.html.haml @@ -1,10 +1,10 @@ %h1 Resultado da monitoria %p Parabéns -= @professor.name += Professor.find_by_name(Turma.find(@resultado.fk_turmas_id).professor).name %p O aluno(a) -= @user.name += User.find_by_matricula(@resultado.fk_matricula).name %p foi escolhido(a) para ser monitor da monitoria -= @disciplina.nome += Disciplina.find(Turma.find(@resultado.fk_turmas_id).fk_cod_disciplina).nome diff --git a/app/views/monitoria_mailer/resultado_monitoria_prof.text.haml b/app/views/monitoria_mailer/resultado_monitoria_prof.text.haml index f7a7c898..94e30254 100644 --- a/app/views/monitoria_mailer/resultado_monitoria_prof.text.haml +++ b/app/views/monitoria_mailer/resultado_monitoria_prof.text.haml @@ -1,10 +1,10 @@ Resultado da monitoria Parabéns -= @professor.name += Professor.find_by_name(Turma.find(@resultado.fk_turmas_id).professor).name O aluno(a) -= @user.name += User.find_by_matricula(@resultado.fk_matricula).name foi escolhido(a) para ser monitor da monitoria -= @disciplina.nome += Disciplina.find(Turma.find(@resultado.fk_turmas_id).fk_cod_disciplina).nome diff --git a/app/views/monitoria_mailer/resultado_monitoria_user.html.haml b/app/views/monitoria_mailer/resultado_monitoria_user.html.haml index 91823475..218e59e8 100644 --- a/app/views/monitoria_mailer/resultado_monitoria_user.html.haml +++ b/app/views/monitoria_mailer/resultado_monitoria_user.html.haml @@ -1,11 +1,11 @@ %h1 Resultado da monitoria %p Parabéns -= @user.name += User.find_by_matricula(@resultado.fk_matricula).name %p Você foi escolhido(a) para ser monitor da disciplina -= @disciplina.nome += Disciplina.find(Turma.find(@resultado.fk_turmas_id).fk_cod_disciplina).nome %na turma -= @turma.turma += Turma.find(@resultado.fk_turmas_id).turma diff --git a/app/views/monitoria_mailer/resultado_monitoria_user.text.haml b/app/views/monitoria_mailer/resultado_monitoria_user.text.haml index 34155c20..ab363867 100644 --- a/app/views/monitoria_mailer/resultado_monitoria_user.text.haml +++ b/app/views/monitoria_mailer/resultado_monitoria_user.text.haml @@ -1,10 +1,10 @@ Resultado da monitoria Parabéns -= @user.name += User.find_by_matricula(@resultado.fk_matricula).name Você foi escolhido(a) para ser monitor da disciplina -= @disciplina.nome += Disciplina.find(Turma.find(@resultado.fk_turmas_id).fk_cod_disciplina).nome na turma -= @turma.turma += Turma.find(@resultado.fk_turmas_id).turma From 8f51781955c752cd8a4fa22507282e65238dbe23 Mon Sep 17 00:00:00 2001 From: Pedro Nogueira Date: Tue, 18 May 2021 19:18:09 -0300 Subject: [PATCH 09/14] =?UTF-8?q?Adi=C3=A7=C3=A3o=20dos=20coment=C3=A1rios?= =?UTF-8?q?=20de=20documenta=C3=A7=C3=A3o=20rdoc.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/mailers/monitoria_mailer.rb | 22 +++++--- app/models/monitoria.rb | 90 ++++++++++++++++++++------------- 2 files changed, 72 insertions(+), 40 deletions(-) diff --git a/app/mailers/monitoria_mailer.rb b/app/mailers/monitoria_mailer.rb index a9bbf148..3efe846d 100644 --- a/app/mailers/monitoria_mailer.rb +++ b/app/mailers/monitoria_mailer.rb @@ -1,12 +1,22 @@ +## +# MonitoriaMailer +# +# Classe de acesso das monitorias ao serviço de email usado. +# +# Herda de ApplicationMailer, que é o acesso geral ao serviço de email do programa. +# +# @param [Int] resultado Número extraído do banco de dados que estabelece se aluno foi aceito na monitoria. +# class MonitoriaMailer < ApplicationMailer - before_action {@resultado = params[:resultado]} - + before_action { + @resultado = params[:resultado] + } + ['user', 'prof'].each do |pessoa| - define_method("resultado_monitoria_#{pessoa}"){ |pessoa_tipo| + define_method("resultado_monitoria_#{pessoa}") { |pessoa_tipo| mail to: pessoa_tipo.email, subject: "Resultado do processo da monitoria" - } - + } end - + end diff --git a/app/models/monitoria.rb b/app/models/monitoria.rb index a0c8380b..c45eef07 100644 --- a/app/models/monitoria.rb +++ b/app/models/monitoria.rb @@ -1,44 +1,66 @@ +## +# Monitoria +# +# Classe que engloba a monitoria extraída do banco de dados. +# Ela é responsável por conter as informações da monitoria e por enviar os emails corretos aos alunos e professores envolvidos. +# class Monitoria < ApplicationRecord after_save :send_resultado_monitoria_user after_save :send_resultado_monitoria_prof - + + ## + # send_resultado_monitoria_user + # + # Método que manda o resultado da monitoria como email para o monitor inscrito. + # Ele chama o monitoria_mailer com os parâmetros da monitoria para ele então gerenciar o envio de email. + # + # @param [Int] resultado Número extraído do banco de dados que estabelece se aluno foi aceito na monitoria. + # def send_resultado_monitoria_user - if(self.fk_status_monitoria_id == 3) - MonitoriaMailer.with(resultado: self).send("resultado_monitoria_user", User.find_by_matricula(self.fk_matricula)).deliver_now! - end + if (self.fk_status_monitoria_id == 3) + MonitoriaMailer.with(resultado: self).send("resultado_monitoria_user", User.find_by_matricula(self.fk_matricula)).deliver_now! + end end - + + ## + # send_resultado_monitoria_prof + # + # Método que manda o resultado da monitoria como email para o professor da matéria. + # Ele chama o monitoria_mailer com os parâmetros da monitoria para ele então gerenciar o envio de email. + # + # @param [Int] resultado Número extraído do banco de dados que estabelece se aluno foi aceito na monitoria. + # def send_resultado_monitoria_prof - if(self.fk_status_monitoria_id == 3) - MonitoriaMailer.with(resultado: self).send("resultado_monitoria_prof", Professor.find_by_name(Turma.find(self.fk_turmas_id).professor)).deliver_now! - end + if (self.fk_status_monitoria_id == 3) + MonitoriaMailer.with(resultado: self).send("resultado_monitoria_prof", Professor.find_by_name(Turma.find(self.fk_turmas_id).professor)).deliver_now! + end end - def self.all_disciplinas - @disciplinas = Array.new - Disciplina.find_each do |d| - @disciplinas << [d.nome, d.cod_disciplina] - end - @disciplinas - end - - # def self.all_turmas - # @turmas = Array.new - # Turma.find_each do |t| - # @turmas << [t.turma, t.id] - # end - # @turmas - # end - - def self.all_status - return [['Pendente', 1], ['Recusado', 2], ['Aceito', 3], ['Encerrado', 4]] - end - validates_presence_of :remuneracao - validates_presence_of :fk_matricula - validates_presence_of :fk_cod_disciplina - validates_presence_of :fk_turmas_id - validates_presence_of :fk_status_monitoria_id - - + def self.all_disciplinas + @disciplinas = Array.new + Disciplina.find_each do |d| + @disciplinas << [d.nome, d.cod_disciplina] + end + @disciplinas + end + + # def self.all_turmas + # @turmas = Array.new + # Turma.find_each do |t| + # @turmas << [t.turma, t.id] + # end + # @turmas + # end + + def self.all_status + return [['Pendente', 1], ['Recusado', 2], ['Aceito', 3], ['Encerrado', 4]] + end + validates_presence_of :remuneracao + validates_presence_of :fk_matricula + validates_presence_of :fk_cod_disciplina + validates_presence_of :fk_turmas_id + validates_presence_of :fk_status_monitoria_id + + end From e3eddbfb1049eadf8f67f21dfcc1db621bfcbae5 Mon Sep 17 00:00:00 2001 From: Pedro Nogueira Date: Tue, 18 May 2021 19:36:21 -0300 Subject: [PATCH 10/14] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20dos=20README's=20?= =?UTF-8?q?das=20sprints.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sprint2-Grupo9.md | 3 ++- Sprint3-Grupo9.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 Sprint3-Grupo9.md diff --git a/Sprint2-Grupo9.md b/Sprint2-Grupo9.md index 3c844f1a..9ff2dff0 100644 --- a/Sprint2-Grupo9.md +++ b/Sprint2-Grupo9.md @@ -8,6 +8,7 @@ João Pedro Silva de Andrade - 17/0013944 Pedro Henriques Nogueira - 14/0065032 Vinícius Caixeta de Souza - 18/0132199 Gustavo Einstein Soares Oliveira - 17/0104630 +Cesar Augusto Vilela Borges - 16/0116341 ## Projeto @@ -25,7 +26,7 @@ Código do projeto funcionando. - Scrum Master - Pedro Nogueira - Product Owner - João Pedro - - Equipe de desenvolvimento - Vinícius, Gustavo + - Equipe de desenvolvimento - Vinícius, Gustavo, Cesar ## Branches diff --git a/Sprint3-Grupo9.md b/Sprint3-Grupo9.md new file mode 100644 index 00000000..e6030caa --- /dev/null +++ b/Sprint3-Grupo9.md @@ -0,0 +1,63 @@ +# Sprint 3 - Engenharia de Software +#### Grupo 9 +#### UnB - 2020/2 + +## Grupo + +João Pedro Silva de Andrade - 17/0013944 +Pedro Henriques Nogueira - 14/0065032 +Vinícius Caixeta de Souza - 18/0132199 +Gustavo Einstein Soares Oliveira - 17/0104630 +Cesar Augusto Vilela Borges - 16/0116341 + +## Projeto + +Envio dos emails de resultado de monitoria (professores/alunos monitores). +Professores recebem um email listando os alunos monitores por turma. +Alunos recebem um email para cada monitoria confirmada ou rejeitada. + +## Implementações + +### RubyCritic + +Teste do ABC Score de cada método, o que define a complexidade dos métodos. +Pontuações de complexidade reduzidas para abaixo de 20 pontos com sucesso! + +### Cucumber BDD (happy path/sad path) + +Checagem das orientações do BDD pelo Cucumber - ver se havia um happy e um sad path condizentes. +Checagem feita com sucesso! Módulos todos passando! + +### RDoc + +Documentação dinâmica do código através de comentários bem estruturados. +Métodos gerados pelo nosso grupo documentados com sucesso! + +## Papéis + + - Scrum Master - Pedro Nogueira + - Product Owner - João Pedro + - Equipe de desenvolvimento - Vinícius, Gustavo, César + +### Modo de trabalho + +Trabalho feito em Scrum durante a semana. Não fielmente seguido à risca pelos integrantes não terem o tempo necessário, mas com reuniões esporádicas com definições de funcionalidades. +Também houve muita programação a par, o que justifica a falta de commits de alguns membros. + +### Funcionalidades + +- Vinicius: Encarregado em otimizar a nota do RubyCritic através de refatoramento. +- Pedro e César: Responsáveis pela documentação em RDoc. +- João e Gustavo: Encarregados em testar as funcionalidades do Cucumber e do RSpec. + +## Branches + +- envio-emails: branch principal desse grupo, feita para enviar todos os emails. +- emails-professores: branch interna para a funcionalidade de envio dos emails dos professores. +- emails-alunos: branch interna para a funcionalidade de envio dos emails dos candidatos a monitoria. +- teste-rspec: branch com os testes rspec. +- rdoc-grupo9: branch que contém as adições dos comentários do RDoc e as mudanças dos README's. + +## Observações + +O teste rspec está na pasta "test". Para rodar, digite no comando ```rails test``` From 4a78c640dd45d0367c7dc2e70a63ba58ac610814 Mon Sep 17 00:00:00 2001 From: joaopedroazul Date: Fri, 21 May 2021 18:18:33 -0300 Subject: [PATCH 11/14] Testes rspec com 100% de cobertura finalizados --- Gemfile | 2 +- bin/rails | 6 + coverage/.last_run.json | 4 +- coverage/.resultset.json | 1793 ++ .../DataTables-1.10.20/images/sort_asc.png | Bin 0 -> 160 bytes .../images/sort_asc_disabled.png | Bin 0 -> 148 bytes .../DataTables-1.10.20/images/sort_both.png | Bin 0 -> 201 bytes .../DataTables-1.10.20/images/sort_desc.png | Bin 0 -> 158 bytes .../images/sort_desc_disabled.png | Bin 0 -> 146 bytes coverage/assets/0.12.3/application.css | 1 + coverage/assets/0.12.3/application.js | 7 + coverage/assets/0.12.3/colorbox/border.png | Bin 0 -> 163 bytes coverage/assets/0.12.3/colorbox/controls.png | Bin 0 -> 2033 bytes coverage/assets/0.12.3/colorbox/loading.gif | Bin 0 -> 9427 bytes .../0.12.3/colorbox/loading_background.png | Bin 0 -> 166 bytes coverage/assets/0.12.3/favicon_green.png | Bin 0 -> 1009 bytes coverage/assets/0.12.3/favicon_red.png | Bin 0 -> 1009 bytes coverage/assets/0.12.3/favicon_yellow.png | Bin 0 -> 1009 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../0.12.3/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../0.12.3/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../0.12.3/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../0.12.3/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../0.12.3/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes coverage/assets/0.12.3/loading.gif | Bin 0 -> 7247 bytes coverage/assets/0.12.3/magnify.png | Bin 0 -> 1301 bytes coverage/index.html | 19917 ++++++++++++++++ spec/factories/professor.rb | 4 +- spec/factories/turma.rb | 6 +- spec/models/monitoria_spec.rb | 32 + spec/spec_helper.rb | 2 + 38 files changed, 21765 insertions(+), 9 deletions(-) create mode 100644 coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png create mode 100644 coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png create mode 100644 coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png create mode 100644 coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png create mode 100644 coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc_disabled.png create mode 100644 coverage/assets/0.12.3/application.css create mode 100644 coverage/assets/0.12.3/application.js create mode 100644 coverage/assets/0.12.3/colorbox/border.png create mode 100644 coverage/assets/0.12.3/colorbox/controls.png create mode 100644 coverage/assets/0.12.3/colorbox/loading.gif create mode 100644 coverage/assets/0.12.3/colorbox/loading_background.png create mode 100644 coverage/assets/0.12.3/favicon_green.png create mode 100644 coverage/assets/0.12.3/favicon_red.png create mode 100644 coverage/assets/0.12.3/favicon_yellow.png create mode 100644 coverage/assets/0.12.3/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 coverage/assets/0.12.3/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 coverage/assets/0.12.3/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 coverage/assets/0.12.3/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 coverage/assets/0.12.3/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 coverage/assets/0.12.3/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 coverage/assets/0.12.3/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 coverage/assets/0.12.3/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 coverage/assets/0.12.3/images/ui-icons_222222_256x240.png create mode 100644 coverage/assets/0.12.3/images/ui-icons_2e83ff_256x240.png create mode 100644 coverage/assets/0.12.3/images/ui-icons_454545_256x240.png create mode 100644 coverage/assets/0.12.3/images/ui-icons_888888_256x240.png create mode 100644 coverage/assets/0.12.3/images/ui-icons_cd0a0a_256x240.png create mode 100644 coverage/assets/0.12.3/loading.gif create mode 100644 coverage/assets/0.12.3/magnify.png diff --git a/Gemfile b/Gemfile index e97f4c25..ffd37cbf 100644 --- a/Gemfile +++ b/Gemfile @@ -87,7 +87,7 @@ group :test do gem 'guard-rspec' gem 'rails-controller-testing' gem 'factory_bot_rails' - gem 'simplecov' + gem 'simplecov', require: false, group: :test # Used for metrics gem 'metric_fu', git: 'https://github.com/metricfu/metric_fu.git' diff --git a/bin/rails b/bin/rails index 5badb2fd..e652abe7 100755 --- a/bin/rails +++ b/bin/rails @@ -1,4 +1,10 @@ #!/usr/bin/env ruby + +if ENV['RAILS_ENV'] == 'test' + require 'simplecov' + SimpleCov.start 'rails' + puts "required simplecov" +end begin load File.expand_path('../spring', __FILE__) rescue LoadError => e diff --git a/coverage/.last_run.json b/coverage/.last_run.json index 04ed82cb..649924e9 100644 --- a/coverage/.last_run.json +++ b/coverage/.last_run.json @@ -1,7 +1,5 @@ { "result": { - - "covered_percent": 12.93 - + "line": 13.13 } } diff --git a/coverage/.resultset.json b/coverage/.resultset.json index e69de29b..71386b8a 100644 --- a/coverage/.resultset.json +++ b/coverage/.resultset.json @@ -0,0 +1,1793 @@ +{ + "RSpec": { + "coverage": { + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/application_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/atendimentos_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/atividades_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/disciplinas_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/historico_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/home_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/motivos_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/reset_senhas_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/sessions_helper.rb": { + "lines": [ + 1, + 1, + 0, + null, + null, + 1, + 0, + 0, + null, + null, + null, + 1, + null, + 0, + null, + null, + 1, + 0, + null, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/helpers/tarefas_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/monitoria.rb": { + "lines": [ + null, + null, + null, + null, + null, + null, + 1, + null, + 1, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + 8, + 2, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + 8, + 2, + null, + null, + null, + 1, + 1, + 1, + 3, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + 1, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/application_record.rb": { + "lines": [ + 1, + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/disciplina.rb": { + "lines": [ + 1, + 1, + 0, + null, + null, + 1, + 0, + null, + null, + 1, + 1, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/user.rb": { + "lines": [ + 1, + 1, + 1, + null, + 1, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + null, + null, + null, + null, + 1, + null, + 1, + 1, + null, + 1, + 1, + null, + 1, + null, + 1, + 1, + null, + null, + 1, + 2, + 2, + 2, + null, + 2, + 19, + null, + 19, + 19, + null, + 2, + 2, + 0, + null, + null, + 2, + null, + null, + 1, + 1, + 1, + 11, + null, + null, + 1, + 1, + null, + 1, + 0, + null, + null, + null, + null, + 1, + 0, + null, + 0, + null, + null, + null, + 1, + 0, + null, + null, + null, + 1, + 0, + 0, + 0, + null, + null, + null, + 1, + 0, + null, + null, + null, + 1, + 0, + null, + null, + null, + 1, + 0, + 0, + 0, + null, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/turma.rb": { + "lines": [ + 1, + 1, + 0, + null, + 0, + 0, + 0, + 0, + null, + null, + 0, + null, + null, + 1, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + null, + 0, + null, + null, + 1, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + null, + 0, + null, + null, + 1, + null, + 0, + null, + null, + null, + null, + 1, + 0, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + 1, + 1, + null, + 1, + 0, + 0, + null, + null, + null, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/professor.rb": { + "lines": [ + 1, + 1, + null, + 1, + null, + 1, + 0, + null, + null, + null, + 1, + 1, + 1, + null, + 1, + 1, + null, + null, + 1, + null, + null, + 1, + null, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/mailers/monitoria_mailer.rb": { + "lines": [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + 1, + 4, + null, + null, + 1, + 2, + 4, + null, + null, + null, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/mailers/application_mailer.rb": { + "lines": [ + 1, + 1, + 1, + null + ] + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/channels/application_cable/channel.rb": { + "lines": [ + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/channels/application_cable/connection.rb": { + "lines": [ + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/admins_controller.rb": { + "lines": [ + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/application_controller.rb": { + "lines": [ + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/atendimentos_controller.rb": { + "lines": [ + 0, + 0, + null, + null, + null, + null, + 0, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + null, + null, + null, + null, + null, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/atividades_controller.rb": { + "lines": [ + 0, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + null, + null, + null, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + null, + null, + 0, + 0, + null, + null, + null, + null, + null, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + null, + null, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + null, + null, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/dados_bancarios_controller.rb": { + "lines": [ + 0, + 0, + null, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/dashboard_controller.rb": { + "lines": [ + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + null, + 0, + null, + null, + null, + 0, + null, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + null, + null, + null, + null, + null, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + null, + null, + null, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + null, + 0, + null, + 0, + null, + 0, + null, + 0, + null, + 0, + null, + null, + null, + null, + 0, + null, + 0, + null, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + null, + null, + null, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + null, + null, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + 0, + null, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/disciplinas_controller.rb": { + "lines": [ + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/faq_controller.rb": { + "lines": [ + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/historico_controller.rb": { + "lines": [ + 0, + null, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/home_controller.rb": { + "lines": [ + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/monitorias_controller.rb": { + "lines": [ + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/motivos_controller.rb": { + "lines": [ + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + null, + null, + null, + 0, + 0, + null, + null, + 0, + 0, + 0, + null, + null, + 0, + 0, + null, + null, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/professors_controller.rb": { + "lines": [ + 0, + null, + null, + 0, + null, + 0, + 0, + null, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + null, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/reset_senhas_controller.rb": { + "lines": [ + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + null, + null, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/sessions_controller.rb": { + "lines": [ + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/sobre_controller.rb": { + "lines": [ + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/tarefas_controller.rb": { + "lines": [ + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + 0, + null, + 0, + null, + null, + 0, + 0, + 0, + 0, + null, + null, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + 0, + null, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + null, + null, + 0, + 0, + 0, + 0, + null, + 0, + null, + 0, + 0, + 0, + null, + null, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/turmas_controller.rb": { + "lines": [ + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/controllers/users_controller.rb": { + "lines": [ + 0, + null, + 0, + null, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0, + null, + 0, + 0, + null, + 0, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/jobs/application_job.rb": { + "lines": [ + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/mailers/professor_mailer.rb": { + "lines": [ + 0, + 0, + null, + null, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/mailers/user_mailer.rb": { + "lines": [ + 0, + null, + null, + null, + null, + null, + null, + 0, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/admin.rb": { + "lines": [ + 0, + 0, + null, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/atendimento.rb": { + "lines": [ + 0, + null, + null, + 0, + null, + null, + null, + 0, + 0, + 0, + null, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/atividade.rb": { + "lines": [ + 0, + null, + null, + 0, + 0, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/dados_bancarios.rb": { + "lines": [ + 0, + 0, + null, + 0, + 0, + 0, + null, + 0, + 0, + 0, + 0, + null, + 0, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/motivo.rb": { + "lines": [ + 0, + null, + 0, + 0 + ], + "branches": { + } + }, + "/mnt/c/Users/João Pedro/Desktop/TESTE GG EASY/monitoriaCIC/app/models/tarefa.rb": { + "lines": [ + 0, + 0, + 0 + ], + "branches": { + } + } + }, + "timestamp": 1621619321 + } +} diff --git a/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ba61a8055fcb18273f2468d335572204667b1f GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*bWaz@5R22v2@;zYta_*?F5u6Q zWR@in#&u+WgT?Hi<}D3B3}GOXuX|8Oj3tosHiJ3*4TN zC7>_x-r1O=t(?KoTC+`+>7&2GzdqLHBg&F)2Q?&EGZ+}|Rpsc~9`m>jw35No)z4*} HQ$iB}HK{Sd literal 0 HcmV?d00001 diff --git a/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..fb11dfe24a6c564cb7ddf8bc96703ebb121df1e7 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX(Vi}jAsXkC6BcOhI9!^3NY?Do zDX;f`c1`y6n0RgO@$!H7chZT&|Jn0dmaqO^XNm-CGtk!Ur<_=Jws3;%W$<+Mb6Mw<&;$T1GdZXL literal 0 HcmV?d00001 diff --git a/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png new file mode 100644 index 0000000000000000000000000000000000000000..af5bc7c5a10b9d6d57cb641aeec752428a07f0ca GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX6FglULp08Bycxyy87-Q;~nRxO8@-UU*I^KVWyN+&SiMHu5xDOu|HNvwzODfTdXjhVyNu1 z#7^XbGKZ7LW3XeONb$RKLeE*WhqbYpIXPIqK@r4)v+qN8um%99%MPpS9d#7Ed7SL@Bp00i_>zopr0H-Zb Aj{pDw literal 0 HcmV?d00001 diff --git a/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png new file mode 100644 index 0000000000000000000000000000000000000000..0e156deb5f61d18f9e2ec5da4f6a8c94a5b4fb41 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*R8JSj5R22v2@yo z(czD9$NuDl3Ljm9c#_#4$vXUz=f1~&WY3aa=h!;z7fOEN>ySP9QA=6C-^Dmb&tuM= z4Z&=WZU;2WF>e%GI&mWJk^K!jrbro{W;-I>FeCfLGJl3}+Z^2)3Kw?+EoAU?^>bP0 Hl+XkKC^j|Q{b@g3TV7E(Grjn^aLC2o)_ptHrtUEoT$S@q)~)7U@V;W{6)!%@ u>N?4t-1qslpJw9!O?PJ&w0Cby.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,white),color-stop(100%,#dcdcdc));background:-webkit-linear-gradient(top,white 0,#dcdcdc 100%);background:-moz-linear-gradient(top,white 0,#dcdcdc 100%);background:-ms-linear-gradient(top,white 0,#dcdcdc 100%);background:-o-linear-gradient(top,white 0,#dcdcdc 100%);background:linear-gradient(to bottom,white 0,#dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#585858),color-stop(100%,#111));background:-webkit-linear-gradient(top,#585858 0,#111 100%);background:-moz-linear-gradient(top,#585858 0,#111 100%);background:-ms-linear-gradient(top,#585858 0,#111 100%);background:-o-linear-gradient(top,#585858 0,#111 100%);background:linear-gradient(to bottom,#585858 0,#111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:0;background-color:#2b2b2b;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#2b2b2b),color-stop(100%,#0c0c0c));background:-webkit-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-moz-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-ms-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-o-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:linear-gradient(to bottom,#2b2b2b 0,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,0.9)),color-stop(75%,rgba(255,255,255,0.9)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:0}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}pre .comment,pre .template_comment,pre .diff .header,pre .javadoc{color:#998;font-style:italic}pre .keyword,pre .css .rule .keyword,pre .winutils,pre .javascript .title,pre .lisp .title{color:#000;font-weight:bold}pre .number,pre .hexcolor{color:#458}pre .string,pre .tag .value,pre .phpdoc,pre .tex .formula{color:#d14}pre .subst{color:#712}pre .constant,pre .title,pre .id{color:#900;font-weight:bold}pre .javascript .title,pre .lisp .title,pre .subst{font-weight:normal}pre .class .title,pre .haskell .label,pre .tex .command{color:#458;font-weight:bold}pre .tag,pre .tag .title,pre .rules .property,pre .django .tag .keyword{color:navy;font-weight:normal}pre .attribute,pre .variable,pre .instancevar,pre .lisp .body{color:teal}pre .regexp{color:#009926}pre .class{color:#458;font-weight:bold}pre .symbol,pre .ruby .symbol .string,pre .ruby .symbol .keyword,pre .ruby .symbol .keymethods,pre .lisp .keyword,pre .tex .special,pre .input_number{color:#990073}pre .builtin,pre .built_in,pre .lisp .title{color:#0086b3}pre .preprocessor,pre .pi,pre .doctype,pre .shebang,pre .cdata{color:#999;font-weight:bold}pre .deletion{background:#fdd}pre .addition{background:#dfd}pre .diff .change{background:#0086b3}pre .chunk{color:#aaa}pre .tex .formula{opacity:.5}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute;left:-99999999px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui-helper-clearfix{display:inline-block}/*\*/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default !important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget :active{outline:0}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bottom{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-right{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all{-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}#colorbox,#cboxOverlay,#cboxWrapper{position:absolute;top:0;left:0;z-index:9999;overflow:hidden}#cboxOverlay{position:fixed;width:100%;height:100%}#cboxMiddleLeft,#cboxBottomLeft{clear:left}#cboxContent{position:relative}#cboxLoadedContent{overflow:auto}#cboxTitle{margin:0}#cboxLoadingOverlay,#cboxLoadingGraphic{position:absolute;top:0;left:0;width:100%;height:100%}#cboxPrevious,#cboxNext,#cboxClose,#cboxSlideshow{cursor:pointer}.cboxPhoto{float:left;margin:auto;border:0;display:block;max-width:none}.cboxIframe{width:100%;height:100%;display:block;border:0}#colorbox,#cboxContent,#cboxLoadedContent{box-sizing:content-box}#cboxOverlay{background:#000}#cboxTopLeft{width:14px;height:14px;background:url(colorbox/controls.png) no-repeat 0 0}#cboxTopCenter{height:14px;background:url(colorbox/border.png) repeat-x top left}#cboxTopRight{width:14px;height:14px;background:url(colorbox/controls.png) no-repeat -36px 0}#cboxBottomLeft{width:14px;height:43px;background:url(colorbox/controls.png) no-repeat 0 -32px}#cboxBottomCenter{height:43px;background:url(colorbox/border.png) repeat-x bottom left}#cboxBottomRight{width:14px;height:43px;background:url(colorbox/controls.png) no-repeat -36px -32px}#cboxMiddleLeft{width:14px;background:url(colorbox/controls.png) repeat-y -175px 0}#cboxMiddleRight{width:14px;background:url(colorbox/controls.png) repeat-y -211px 0}#cboxContent{background:#fff;overflow:visible}.cboxIframe{background:#fff}#cboxError{padding:50px;border:1px solid #ccc}#cboxLoadedContent{margin-bottom:5px}#cboxLoadingOverlay{background:url(colorbox/loading_background.png) no-repeat center center}#cboxLoadingGraphic{background:url(colorbox/loading.gif) no-repeat center center}#cboxTitle{position:absolute;bottom:-25px;left:0;text-align:center;width:100%;font-weight:bold;color:#7c7c7c}#cboxCurrent{position:absolute;bottom:-25px;left:58px;font-weight:bold;color:#7c7c7c}#cboxPrevious,#cboxNext,#cboxClose,#cboxSlideshow{position:absolute;bottom:-29px;background:url(colorbox/controls.png) no-repeat 0 0;width:23px;height:23px;text-indent:-9999px}#cboxPrevious{left:0;background-position:-51px -25px}#cboxPrevious:hover{background-position:-51px 0}#cboxNext{left:27px;background-position:-75px -25px}#cboxNext:hover{background-position:-75px 0}#cboxClose{right:0;background-position:-100px -25px}#cboxClose:hover{background-position:-100px 0}.cboxSlideshow_on #cboxSlideshow{background-position:-125px 0;right:27px}.cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0}.cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px;right:27px}.cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0}#loading{position:fixed;left:40%;top:50%}a{color:#333;text-decoration:none}a:hover{color:#000;text-decoration:underline}body{font-family:"Lucida Grande",Helvetica,"Helvetica Neue",Arial,sans-serif;padding:12px;background-color:#333}h1,h2,h3,h4{color:#1c2324;margin:0;padding:0;margin-bottom:12px}table{width:100%}#content{clear:left;background-color:white;border:2px solid #ddd;border-top:8px solid #ddd;padding:18px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;-webkit-border-top-right-radius:5px;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-moz-border-radius-topright:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-right-radius:5px}.dataTables_filter,.dataTables_info{padding:2px 6px}abbr.timeago{text-decoration:none;border:0;font-weight:bold}.timestamp{float:right;color:#ddd}.group_tabs{list-style:none;float:left;margin:0;padding:0}.group_tabs li{display:inline;float:left}.group_tabs li a{font-family:Helvetica,Arial,sans-serif;display:block;float:left;text-decoration:none;padding:4px 8px;background-color:#aaa;background:-webkit-gradient(linear,0 0,0 bottom,from(#ddd),to(#aaa));background:-moz-linear-gradient(#ddd,#aaa);background:linear-gradient(#ddd,#aaa);text-shadow:#e5e5e5 1px 1px 0;border-bottom:0;color:#333;font-weight:bold;margin-right:8px;border-top:1px solid #efefef;-webkit-border-top-left-radius:2px;-webkit-border-top-right-radius:2px;-moz-border-radius-topleft:2px;-moz-border-radius-topright:2px;border-top-left-radius:2px;border-top-right-radius:2px}.group_tabs li a:hover{background-color:#ccc;background:-webkit-gradient(linear,0 0,0 bottom,from(#eee),to(#aaa));background:-moz-linear-gradient(#eee,#aaa);background:linear-gradient(#eee,#aaa)}.group_tabs li a:active{padding-top:5px;padding-bottom:3px}.group_tabs li.active a{color:black;text-shadow:#fff 1px 1px 0;background-color:#ddd;background:-webkit-gradient(linear,0 0,0 bottom,from(white),to(#ddd));background:-moz-linear-gradient(white,#ddd);background:linear-gradient(white,#ddd)}.file_list{margin-bottom:18px}.file_list--responsive{overflow-x:auto;overflow-y:hidden}a.src_link{background:url("./magnify.png") no-repeat left 50%;padding-left:18px}tr,td{margin:0;padding:0}th{white-space:nowrap}th.ui-state-default{cursor:pointer}th span.ui-icon{float:left}td{padding:4px 8px}td.strong{font-weight:bold}.cell--number{text-align:right}.source_table h3,.source_table h4{padding:0;margin:0;margin-bottom:4px}.source_table .header{padding:10px}.source_table pre{margin:0;padding:0;white-space:normal;color:#000;font-family:"Monaco","Inconsolata","Consolas",monospace}.source_table code{color:#000;font-family:"Monaco","Inconsolata","Consolas",monospace}.source_table pre{background-color:#333}.source_table pre ol{margin:0;padding:0;margin-left:45px;font-size:12px;color:white}.source_table pre li{margin:0;padding:2px 6px;border-left:5px solid white}.source_table pre li code{white-space:pre;white-space:pre-wrap}.source_table pre .hits{float:right;margin-left:10px;padding:2px 4px;background-color:#444;background:-webkit-gradient(linear,0 0,0 bottom,from(#222),to(#666));background:-moz-linear-gradient(#222,#666);background:linear-gradient(#222,#666);color:white;font-family:Helvetica,"Helvetica Neue",Arial,sans-serif;font-size:10px;font-weight:bold;text-align:center;border-radius:6px}#footer{color:#ddd;font-size:12px;font-weight:bold;margin-top:12px;text-align:right}#footer a{color:#eee;text-decoration:underline}#footer a:hover{color:#fff;text-decoration:none}.green{color:#090}.red{color:#900}.yellow{color:#da0}.blue{color:blue}thead th{background:white}.source_table .covered{border-color:#090}.source_table .missed{border-color:#900}.source_table .never{border-color:black}.source_table .skipped{border-color:#fc0}.source_table .missed-branch{border-color:#bf0000}.source_table .covered:nth-child(odd){background-color:#cdf2cd}.source_table .covered:nth-child(even){background-color:#dbf2db}.source_table .missed:nth-child(odd){background-color:#f7c0c0}.source_table .missed:nth-child(even){background-color:#f7cfcf}.source_table .never:nth-child(odd){background-color:#efefef}.source_table .never:nth-child(even){background-color:#f4f4f4}.source_table .skipped:nth-child(odd){background-color:#fbf0c0}.source_table .skipped:nth-child(even){background-color:#fbffcf}.source_table .missed-branch:nth-child(odd){background-color:#cc8e8e}.source_table .missed-branch:nth-child(even){background-color:#cc6e6e} \ No newline at end of file diff --git a/coverage/assets/0.12.3/application.js b/coverage/assets/0.12.3/application.js new file mode 100644 index 00000000..e1c2ab23 --- /dev/null +++ b/coverage/assets/0.12.3/application.js @@ -0,0 +1,7 @@ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(T,e){"use strict";function g(e,t,n){var r,a,i=(n=n||le).createElement("script");if(i.text=e,t)for(r in Se)(a=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,a);n.head.appendChild(i).parentNode.removeChild(i)}function m(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?pe[ge.call(e)]||"object":typeof e}function s(e){var t=!!e&&"length"in e&&e.length,n=m(e);return!we(e)&&!xe(e)&&("array"===n||0===t||"number"==typeof t&&0D.cacheLength&&delete n[r.shift()],n[e+" "]=t}var r=[];return n}function l(e){return e[q]=!0,e}function a(e){var t=E.createElement("fieldset");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function t(e,t){for(var n=e.split("|"),r=n.length;r--;)D.attrHandle[n[r]]=t}function u(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function r(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function i(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function o(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&_e(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function s(o){return l(function(i){return i=+i,l(function(e,t){for(var n,r=o([],e.length,i),a=r.length;a--;)e[n=r[a]]&&(e[n]=!(t[n]=e[n]))})})}function p(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function c(){}function g(e){for(var t=0,n=e.length,r="";t+~]|"+re+")"+re+"*"),fe=new RegExp(re+"|>"),de=new RegExp(oe),he=new RegExp("^"+ae+"$"),pe={ID:new RegExp("^#("+ae+")"),CLASS:new RegExp("^\\.("+ae+")"),TAG:new RegExp("^("+ae+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},ge=/HTML$/i,me=/^(?:input|select|textarea|button)$/i,ve=/^h\d$/i,ye=/^[^{]+\{\s*\[native \w/,be=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,we=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),Se=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},De=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Ce=function(){L()},_e=f(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{Q.apply(Y=ee.call(W.childNodes),W.childNodes),Y[W.childNodes.length].nodeType}catch(Ae){Q={apply:Y.length?function(e,t){K.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}for(v in S=w.support={},C=w.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!ge.test(t||n&&n.nodeName||"HTML")},L=w.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:W;return r!==E&&9===r.nodeType&&r.documentElement&&(R=(E=r).documentElement,F=!C(E),W!==E&&(n=E.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Ce,!1):n.attachEvent&&n.attachEvent("onunload",Ce)),S.attributes=a(function(e){return e.className="i",!e.getAttribute("className")}),S.getElementsByTagName=a(function(e){return e.appendChild(E.createComment("")),!e.getElementsByTagName("*").length}),S.getElementsByClassName=ye.test(E.getElementsByClassName),S.getById=a(function(e){return R.appendChild(e).id=q,!E.getElementsByName||!E.getElementsByName(q).length}),S.getById?(D.filter.ID=function(e){var t=e.replace(xe,Se);return function(e){return e.getAttribute("id")===t}},D.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&F){var n=t.getElementById(e);return n?[n]:[]}}):(D.filter.ID=function(e){var n=e.replace(xe,Se);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},D.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&F){var n,r,a,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(a=t.getElementsByName(e),r=0;i=a[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),D.find.TAG=S.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):S.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],a=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;n=i[a++];)1===n.nodeType&&r.push(n);return r},D.find.CLASS=S.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&F)return t.getElementsByClassName(e)},H=[],P=[],(S.qsa=ye.test(E.querySelectorAll))&&(a(function(e){R.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll("[id~="+q+"-]").length||P.push("~="),e.querySelectorAll(":checked").length||P.push(":checked"),e.querySelectorAll("a#"+q+"+*").length||P.push(".#.+[+~]")}),a(function(e){e.innerHTML="";var t=E.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+re+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),R.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(S.matchesSelector=ye.test(M=R.matches||R.webkitMatchesSelector||R.mozMatchesSelector||R.oMatchesSelector||R.msMatchesSelector))&&a(function(e){S.disconnectedMatch=M.call(e,"*"),M.call(e,"[s!='']:x"),H.push("!=",oe)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ye.test(R.compareDocumentPosition),O=t||ye.test(R.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},G=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!S.sortDetached&&t.compareDocumentPosition(e)===n?e===E||e.ownerDocument===W&&O(W,e)?-1:t===E||t.ownerDocument===W&&O(W,t)?1:I?te(I,e)-te(I,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,r=0,a=e.parentNode,i=t.parentNode,o=[e],s=[t];if(!a||!i)return e===E?-1:t===E?1:a?-1:i?1:I?te(I,e)-te(I,t):0;if(a===i)return u(e,t);for(n=e;n=n.parentNode;)o.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;o[r]===s[r];)r++;return r?u(o[r],s[r]):o[r]===W?-1:s[r]===W?1:0}),E},w.matches=function(e,t){return w(e,null,null,t)},w.matchesSelector=function(e,t){if((e.ownerDocument||e)!==E&&L(e),S.matchesSelector&&F&&!V[t+" "]&&(!H||!H.test(t))&&(!P||!P.test(t)))try{var n=M.call(e,t);if(n||S.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(Ae){V(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,Se),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,Se),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||w.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&w.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=_(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,Se).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&U(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,a){return function(e){var t=w.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===a:"!="===r?t!==a:"^="===r?a&&0===t.indexOf(a):"*="===r?a&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;Te.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?Te.find.matchesSelector(r,e)?[r]:[]:Te.find.matches(e,Te.grep(t,function(e){return 1===e.nodeType}))},Te.fn.extend({find:function(e){var t,n,r=this.length,a=this;if("string"!=typeof e)return this.pushStack(Te(e).filter(function(){for(t=0;t)[^>]*|#([\w-]+))$/;(Te.fn.init=function(e,t,n){var r,a;if(!e)return this;if(n=n||je,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):we(e)?n.ready!==undefined?n.ready(e):e(Te):Te.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:Le.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof Te?t[0]:t,Te.merge(this,Te.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:le,!0)),Ie.test(r[1])&&Te.isPlainObject(t))for(r in t)we(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(a=le.getElementById(r[2]))&&(this[0]=a,this.length=1),this}).prototype=Te.fn,je=Te(le);var Ee=/^(?:parents|prev(?:Until|All))/,Re={children:!0,contents:!0,next:!0,prev:!0};Te.fn.extend({has:function(e){var t=Te(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,rt=/^$|^module$|\/(?:java|ecma)script/i,at={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};at.optgroup=at.option,at.tbody=at.tfoot=at.colgroup=at.caption=at.thead,at.th=at.td;var it,ot,st=/<|&#?\w+;/;it=le.createDocumentFragment().appendChild(le.createElement("div")),(ot=le.createElement("input")).setAttribute("type","radio"),ot.setAttribute("checked","checked"),ot.setAttribute("name","t"),it.appendChild(ot),be.checkClone=it.cloneNode(!0).cloneNode(!0).lastChild.checked,it.innerHTML="",be.noCloneChecked=!!it.cloneNode(!0).lastChild.defaultValue;var lt=/^key/,ut=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ct=/^([^.]*)(?:\.(.+)|)/;Te.event={global:{},add:function(t,e,n,r,a){var i,o,s,l,u,c,f,d,h,p,g,m=Be.get(t);if(m)for(n.handler&&(n=(i=n).handler,a=i.selector),a&&Te.find.matchesSelector(Je,a),n.guid||(n.guid=Te.guid++),(l=m.events)||(l=m.events={}),(o=m.handle)||(o=m.handle=function(e){return void 0!==Te&&Te.event.triggered!==e.type?Te.event.dispatch.apply(t,arguments):undefined}),u=(e=(e||"").match(Fe)||[""]).length;u--;)h=g=(s=ct.exec(e[u])||[])[1],p=(s[2]||"").split(".").sort(),h&&(f=Te.event.special[h]||{},h=(a?f.delegateType:f.bindType)||h,f=Te.event.special[h]||{},c=Te.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:a,needsContext:a&&Te.expr.match.needsContext.test(a),namespace:p.join(".")},i),(d=l[h])||((d=l[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,p,o)||t.addEventListener&&t.addEventListener(h,o)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),a?d.splice(d.delegateCount++,0,c):d.push(c),Te.event.global[h]=!0)},remove:function(e,t,n,r,a){var i,o,s,l,u,c,f,d,h,p,g,m=Be.hasData(e)&&Be.get(e);if(m&&(l=m.events)){for(u=(t=(t||"").match(Fe)||[""]).length;u--;)if(h=g=(s=ct.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),h){for(f=Te.event.special[h]||{},d=l[h=(r?f.delegateType:f.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=i=d.length;i--;)c=d[i],!a&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(i,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));o&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,m.handle)||Te.removeEvent(e,h,m.handle),delete l[h])}else for(h in l)Te.event.remove(e,h+t[u],n,r,!0);Te.isEmptyObject(l)&&Be.remove(e,"handle events")}},dispatch:function(e){var t,n,r,a,i,o,s=Te.event.fix(e),l=new Array(arguments.length),u=(Be.get(this,"events")||{})[s.type]||[],c=Te.event.special[s.type]||{};for(l[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,dt=/\s*$/g;Te.extend({htmlPrefilter:function(e){return e.replace(ft,"<$1>")},clone:function(e,t,n){var r,a,i,o,s=e.cloneNode(!0),l=Ye(e);if(!(be.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||Te.isXMLDoc(e)))for(o=w(s),r=0,a=(i=w(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",a=function(e){r.remove(),a=null,e&&t("error"===e.type?404:200,e.type)}),le.head.appendChild(r[0])},abort:function(){a&&a()}}});var an,on=[],sn=/(=)\?(?=&|$)|\?\?/;Te.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=on.pop()||Te.expando+"_"+Ot++;return this[e]=!0,e}}),Te.ajaxPrefilter("json jsonp",function(e,t,n){var r,a,i,o=!1!==e.jsonp&&(sn.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&sn.test(e.data)&&"data");if(o||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=we(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,o?e[o]=e[o].replace(sn,"$1"+r):!1!==e.jsonp&&(e.url+=(qt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||Te.error(r+" was not called"),i[0]},e.dataTypes[0]="json",a=T[r],T[r]=function(){i=arguments},n.always(function(){a===undefined?Te(T).removeProp(r):T[r]=a,e[r]&&(e.jsonpCallback=t.jsonpCallback,on.push(r)),i&&we(a)&&a(i[0]),i=a=undefined}),"script"}),be.createHTMLDocument=((an=le.implementation.createHTMLDocument("").body).innerHTML="
",2===an.childNodes.length),Te.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(be.createHTMLDocument?((r=(t=le.implementation.createHTMLDocument("")).createElement("base")).href=le.location.href,t.head.appendChild(r)):t=le),i=!n&&[],(a=Ie.exec(e))?[t.createElement(a[1])]:(a=S([e],t,i),i&&i.length&&Te(i).remove(),Te.merge([],a.childNodes)));var r,a,i},Te.fn.load=function(e,t,n){var r,a,i,o=this,s=e.indexOf(" ");return-1").append(Te.parseHTML(e)).find(r):e)}).always(n&&function(e,t){o.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},Te.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){Te.fn[t]=function(e){return this.on(t,e)}}),Te.expr.pseudos.animated=function(t){return Te.grep(Te.timers,function(e){return t===e.elem}).length},Te.offset={setOffset:function(e,t,n){var r,a,i,o,s,l,u=Te.css(e,"position"),c=Te(e),f={};"static"===u&&(e.style.position="relative"),s=c.offset(),i=Te.css(e,"top"),l=Te.css(e,"left"),("absolute"===u||"fixed"===u)&&-1<(i+l).indexOf("auto")?(o=(r=c.position()).top,a=r.left):(o=parseFloat(i)||0,a=parseFloat(l)||0),we(t)&&(t=t.call(e,n,Te.extend({},s))),null!=t.top&&(f.top=t.top-s.top+o),null!=t.left&&(f.left=t.left-s.left+a),"using"in t?t.using.call(e,f):c.css(f)}},Te.fn.extend({offset:function(t){if(arguments.length)return t===undefined?this:this.each(function(e){Te.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],a={top:0,left:0};if("fixed"===Te.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===Te.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((a=Te(e).offset()).top+=Te.css(e,"borderTopWidth",!0),a.left+=Te.css(e,"borderLeftWidth",!0))}return{top:t.top-a.top-Te.css(r,"marginTop",!0),left:t.left-a.left-Te.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===Te.css(e,"position");)e=e.offsetParent;return e||Je})}}),Te.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,a){var i="pageYOffset"===a;Te.fn[t]=function(e){return Me(this,function(e,t,n){var r;if(xe(e)?r=e:9===e.nodeType&&(r=e.defaultView),n===undefined)return r?r[a]:e[t];r?r.scrollTo(i?r.pageXOffset:n,i?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),Te.each(["top","left"],function(e,n){Te.cssHooks[n]=M(be.pixelPosition,function(e,t){if(t)return t=H(e,n),gt.test(t)?Te(e).position()[n]+"px":t})}),Te.each({Height:"height",Width:"width"},function(o,s){Te.each({padding:"inner"+o,content:s,"":"outer"+o},function(r,i){Te.fn[i]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),a=r||(!0===e||!0===t?"margin":"border");return Me(this,function(e,t,n){var r;return xe(e)?0===i.indexOf("outer")?e["inner"+o]:e.document.documentElement["client"+o]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+o],r["scroll"+o],e.body["offset"+o],r["offset"+o],r["client"+o])):n===undefined?Te.css(e,t,a):Te.style(e,t,n,a)},s,n?e:undefined,n)}})}),Te.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){Te.fn[n]=function(e,t){return 0"}for(var i=0,o="",s=[];e.length||t.length;){var l=r().splice(0,1)[0];if(o+=x(n.substr(i,l.offset-i)),i=l.offset,"start"==l.event)o+=a(l.node),s.push(l.node);else if("stop"==l.event){var u=s.length;do{var c=s[--u];o+=""}while(c!=l.node);for(s.splice(u,1);u'+x(a[0])+""):n+=x(a[0]),r=t.lR.lastIndex,a=t.lR.exec(e)}return n+=x(e.substr(r,e.length-r))}function f(e,t){if(t.sL&&T[t.sL]){var n=D(t.sL,e);return g+=n.keyword_count,n.value}return r(e,t)}function d(e,t){var n=e.cN?'':"";e.rB?(m+=n,e.buffer=""):e.eB?(m+=x(t)+n,e.buffer=""):(m+=n,e.buffer=t),h.push(e),p+=e.r}function i(e,t,n){var r=h[h.length-1];if(n)return m+=f(r.buffer+e,r),!1;var a=l(t,r);if(a)return m+=f(r.buffer+e,r),d(a,t),a.rB;var i=u(h.length-1,t);if(i){var o=r.cN?"":"";for(r.rE?m+=f(r.buffer+e,r)+o:r.eE?m+=f(r.buffer+e,r)+o+x(t):m+=f(r.buffer+e+t,r)+o;1":"",m+=o,i--,h.length--;var s=h[h.length-1];return h.length--,h[h.length-1].buffer="",s.starts&&d(s.starts,""),r.rE}if(c(t,r))throw"Illegal"}var s=T[e],h=[s.dM],p=0,g=0,m="";try{var v=0;s.dM.buffer="";do{var y=n(t,v),b=i(y[0],y[1],y[2]);v+=y[0].length,b||(v+=y[1].length)}while(!y[2]);if(1o.keyword_count+o.r&&(o=l),l.keyword_count+l.r>i.keyword_count+i.r&&(o=i,i=l)}}var u=e.className;u.match(i.language)||(u=u?u+" "+i.language:i.language);var c=g(e);if(c.length)(f=document.createElement("pre")).innerHTML=i.value,i.value=m(c,g(f),r);if(n&&(i.value=i.value.replace(/^((<[^>]+>|\t)+)/gm,function(e,t){return t.replace(/\t/g,n)})),t&&(i.value=i.value.replace(/\n/g,"
")),/MSIE [678]/.test(navigator.userAgent)&&"CODE"==e.tagName&&"PRE"==e.parentNode.tagName){var f=e.parentNode,d=document.createElement("div");d.innerHTML="
"+i.value+"
",e=d.firstChild.firstChild,d.firstChild.cN=f.cN,f.parentNode.replaceChild(d.firstChild,f)}else e.innerHTML=i.value;e.className=u,e.dataset={},e.dataset.result={language:i.language,kw:i.keyword_count,re:i.r},o&&o.language&&(e.dataset.second_best={language:o.language,kw:o.keyword_count,re:o.r})}}function i(){if(!i.called){i.called=!0,v();for(var e=document.getElementsByTagName("pre"),t=0;t|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",this.BE={b:"\\\\.",r:0},this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0},this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0},this.CLCM={cN:"comment",b:"//",e:"$"},this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"},this.HCM={cN:"comment",b:"#",e:"$"},this.NM={cN:"number",b:this.NR,r:0},this.CNM={cN:"number",b:this.CNR,r:0},this.inherit=function(e,t){var n={};for(var r in e)n[r]=e[r];if(t)for(var r in t)n[r]=t[r];return n}};hljs.LANGUAGES.ruby=function(){var e="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?",t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",n={keyword:{and:1,"false":1,then:1,defined:1,module:1,"in":1,"return":1,redo:1,"if":1,BEGIN:1,retry:1,end:1,"for":1,"true":1,self:1,when:1,next:1,until:1,"do":1,begin:1,unless:1,END:1,rescue:1,nil:1,"else":1,"break":1,undef:1,not:1,"super":1,"class":1,"case":1,require:1,"yield":1,alias:1,"while":1,ensure:1,elsif:1,or:1,def:1},keymethods:{__id__:1,__send__:1,abort:1,abs:1,"all?":1,allocate:1,ancestors:1,"any?":1,arity:1,assoc:1,at:1,at_exit:1,autoload:1,"autoload?":1,"between?":1,binding:1,binmode:1,"block_given?":1,call:1,callcc:1,caller:1,capitalize:1,"capitalize!":1,casecmp:1,"catch":1,ceil:1,center:1,chomp:1,"chomp!":1,chop:1,"chop!":1,chr:1,"class":1,class_eval:1,"class_variable_defined?":1,class_variables:1,clear:1,clone:1,close:1,close_read:1,close_write:1,"closed?":1,coerce:1,collect:1,"collect!":1,compact:1,"compact!":1,concat:1,"const_defined?":1,const_get:1,const_missing:1,const_set:1,constants:1,count:1,crypt:1,"default":1,default_proc:1,"delete":1,"delete!":1,delete_at:1,delete_if:1,detect:1,display:1,div:1,divmod:1,downcase:1,"downcase!":1,downto:1,dump:1,dup:1,each:1,each_byte:1,each_index:1,each_key:1,each_line:1,each_pair:1,each_value:1,each_with_index:1,"empty?":1,entries:1,eof:1,"eof?":1,"eql?":1,"equal?":1,eval:1,exec:1,exit:1,"exit!":1,extend:1,fail:1,fcntl:1,fetch:1,fileno:1,fill:1,find:1,find_all:1,first:1,flatten:1,"flatten!":1,floor:1,flush:1,for_fd:1,foreach:1,fork:1,format:1,freeze:1,"frozen?":1,fsync:1,getc:1,gets:1,global_variables:1,grep:1,gsub:1,"gsub!":1,"has_key?":1,"has_value?":1,hash:1,hex:1,id:1,include:1,"include?":1,included_modules:1,index:1,indexes:1,indices:1,induced_from:1,inject:1,insert:1,inspect:1,instance_eval:1,instance_method:1,instance_methods:1,"instance_of?":1,"instance_variable_defined?":1,instance_variable_get:1,instance_variable_set:1,instance_variables:1,"integer?":1,intern:1,invert:1,ioctl:1,"is_a?":1,isatty:1,"iterator?":1,join:1,"key?":1,keys:1,"kind_of?":1,lambda:1,last:1,length:1,lineno:1,ljust:1,load:1,local_variables:1,loop:1,lstrip:1,"lstrip!":1,map:1,"map!":1,match:1,max:1,"member?":1,merge:1,"merge!":1,method:1,"method_defined?":1,method_missing:1,methods:1,min:1,module_eval:1,modulo:1,name:1,nesting:1,"new":1,next:1,"next!":1,"nil?":1,nitems:1,"nonzero?":1,object_id:1,oct:1,open:1,pack:1,partition:1,pid:1,pipe:1,pop:1,popen:1,pos:1,prec:1,prec_f:1,prec_i:1,print:1,printf:1,private_class_method:1,private_instance_methods:1,"private_method_defined?":1,private_methods:1,proc:1,protected_instance_methods:1, +"protected_method_defined?":1,protected_methods:1,public_class_method:1,public_instance_methods:1,"public_method_defined?":1,public_methods:1,push:1,putc:1,puts:1,quo:1,raise:1,rand:1,rassoc:1,read:1,read_nonblock:1,readchar:1,readline:1,readlines:1,readpartial:1,rehash:1,reject:1,"reject!":1,remainder:1,reopen:1,replace:1,require:1,"respond_to?":1,reverse:1,"reverse!":1,reverse_each:1,rewind:1,rindex:1,rjust:1,round:1,rstrip:1,"rstrip!":1,scan:1,seek:1,select:1,send:1,set_trace_func:1,shift:1,singleton_method_added:1,singleton_methods:1,size:1,sleep:1,slice:1,"slice!":1,sort:1,"sort!":1,sort_by:1,split:1,sprintf:1,squeeze:1,"squeeze!":1,srand:1,stat:1,step:1,store:1,strip:1,"strip!":1,sub:1,"sub!":1,succ:1,"succ!":1,sum:1,superclass:1,swapcase:1,"swapcase!":1,sync:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,taint:1,"tainted?":1,tell:1,test:1,"throw":1,times:1,to_a:1,to_ary:1,to_f:1,to_hash:1,to_i:1,to_int:1,to_io:1,to_proc:1,to_s:1,to_str:1,to_sym:1,tr:1,"tr!":1,tr_s:1,"tr_s!":1,trace_var:1,transpose:1,trap:1,truncate:1,"tty?":1,type:1,ungetc:1,uniq:1,"uniq!":1,unpack:1,unshift:1,untaint:1,untrace_var:1,upcase:1,"upcase!":1,update:1,upto:1,"value?":1,values:1,values_at:1,warn:1,write:1,write_nonblock:1,"zero?":1,zip:1}},r={cN:"yardoctag",b:"@[A-Za-z]+"},a={cN:"comment",b:"#",e:"$",c:[r]},i={cN:"comment",b:"^\\=begin",e:"^\\=end",c:[r],r:10},o={cN:"comment",b:"^__END__",e:"\\n$"},s={cN:"subst",b:"#\\{",e:"}",l:e,k:n},l=[hljs.BE,s],u={cN:"string",b:"'",e:"'",c:l,r:0},c={cN:"string",b:'"',e:'"',c:l,r:0},f={cN:"string",b:"%[qw]?\\(",e:"\\)",c:l,r:10},d={cN:"string",b:"%[qw]?\\[",e:"\\]",c:l,r:10},h={cN:"string",b:"%[qw]?{",e:"}",c:l,r:10},p={cN:"string",b:"%[qw]?<",e:">",c:l,r:10},g={cN:"string",b:"%[qw]?/",e:"/",c:l,r:10},m={cN:"string",b:"%[qw]?%",e:"%",c:l,r:10},v={cN:"string",b:"%[qw]?-",e:"-",c:l,r:10},y={cN:"string",b:"%[qw]?\\|",e:"\\|",c:l,r:10},b={cN:"function",b:"\\bdef\\s+",e:" |$|;",l:e,k:n,c:[{cN:"title",b:t,l:e,k:n},{cN:"params",b:"\\(",e:"\\)",l:e,k:n},a,i,o]},w={cN:"identifier",b:e,l:e,k:n,r:0},x=[a,i,o,u,c,f,d,h,p,g,m,v,y,{cN:"class",b:"\\b(class|module)\\b",e:"$|;",k:{"class":1,module:1},c:[{cN:"title",b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",r:0},{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+hljs.IR+"::)?"+hljs.IR}]},a,i,o]},b,{cN:"constant",b:"(::)?([A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:[u,c,f,d,h,p,g,m,v,y,w],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"number",b:"\\?\\w"},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},w,{b:"("+hljs.RSR+")\\s*",c:[a,i,o,{cN:"regexp",b:"/",e:"/[a-z]*",i:"\\n",c:[hljs.BE]}],r:0}];return s.c=x,{dM:{l:e,k:n,c:b.c[1].c=x}}}(),function(c,s,o){function l(e,t,n){var r=s.createElement(e);return t&&(r.id=te+t),n&&(r.style.cssText=n),c(r)}function f(){return o.innerHeight?o.innerHeight:c(o).height()}function u(e,n){n!==Object(n)&&(n={}),this.cache={},this.el=e,this.value=function(e){var t;return this.cache[e]===undefined&&((t=c(this.el).attr("data-cbox-"+e))!==undefined?this.cache[e]=t:n[e]!==undefined?this.cache[e]=n[e]:Q[e]!==undefined&&(this.cache[e]=Q[e])),this.cache[e]},this.get=function(e){var t=this.value(e);return c.isFunction(t)?t.call(this.el,this):t}}function i(e){var t=k.length,n=(X+e)%t;return n<0?t+n:n}function d(e,t){return Math.round((/%/.test(e)?("x"===t?I.width():f())/100:1)*parseInt(e,10))}function h(e,t){return e.get("photo")||e.get("photoRegex").test(t)}function p(e,t){return e.get("retinaUrl")&&1"),w()}}function a(){S||(t=!1,I=c(o),S=l(ce).attr({id:ee,"class":!1===c.support.opacity?te+"IE":"",role:"dialog",tabindex:"-1"}).hide(),x=l(ce,"Overlay").hide(),E=c([l(ce,"LoadingOverlay")[0],l(ce,"LoadingGraphic")[0]]),D=l(ce,"Wrapper"),T=l(ce,"Content").append(R=l(ce,"Title"),F=l(ce,"Current"),M=c('