mumuki-laboratory 9.0.1 → 9.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/mumuki_laboratory/application/certificate.js +17 -0
- data/app/assets/javascripts/mumuki_laboratory/application/faqs.js +80 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/_modules.scss +2 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_certificate.scss +33 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss +62 -0
- data/app/controllers/certificates_controller.rb +28 -0
- data/app/controllers/concerns/with_certificate_render.rb +25 -0
- data/app/controllers/faqs_controller.rb +6 -0
- data/app/controllers/users_controller.rb +4 -0
- data/app/helpers/certificate_helper.rb +13 -0
- data/app/helpers/links_helper.rb +8 -0
- data/app/helpers/menu_bar_helper.rb +14 -10
- data/app/helpers/user_menu_helper.rb +4 -0
- data/app/mailers/application_mailer.rb +0 -1
- data/app/mailers/user_mailer.rb +9 -0
- data/app/views/certificates/_certificate.html.erb +44 -0
- data/app/views/certificates/_download.html.erb +20 -0
- data/app/views/certificates/verify.html.erb +40 -0
- data/app/views/faqs/index.html.erb +16 -0
- data/app/views/layouts/_user_menu.html.erb +4 -0
- data/app/views/layouts/application.html.erb +6 -1
- data/app/views/layouts/exercise_inputs/editors/_code.html.erb +2 -1
- data/app/views/user_mailer/certificate.html.erb +339 -0
- data/app/views/user_mailer/certificate.text.erb +10 -0
- data/app/views/users/certificates.html.erb +32 -0
- data/config/routes.rb +6 -0
- data/lib/mumuki/laboratory/locales/en.yml +7 -0
- data/lib/mumuki/laboratory/locales/es-CL.yml +7 -0
- data/lib/mumuki/laboratory/locales/es.yml +7 -0
- data/lib/mumuki/laboratory/locales/pt.yml +7 -0
- data/lib/mumuki/laboratory/version.rb +1 -1
- data/spec/controllers/certificates_controller_spec.rb +15 -0
- data/spec/dummy/db/schema.rb +2 -1
- data/spec/features/certificate_programs_flow_spec.rb +17 -0
- data/spec/features/menu_bar_spec.rb +20 -0
- data/spec/features/profile_flow_spec.rb +12 -0
- data/spec/helpers/certificate_helper_spec.rb +15 -0
- metadata +67 -4
@@ -0,0 +1,32 @@
|
|
1
|
+
<%= content_for :breadcrumbs do %>
|
2
|
+
<%= breadcrumbs_for_my_account %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<%= render partial: 'layouts/user_menu' %>
|
6
|
+
|
7
|
+
<div class="mu-user-header">
|
8
|
+
<h1><%= t(:certificates) %></h1>
|
9
|
+
</div>
|
10
|
+
<% if @certificates.empty? %>
|
11
|
+
<div class="mu-tab-body">
|
12
|
+
<%= t :certificates_will_be_here %>
|
13
|
+
</div>
|
14
|
+
<% else %>
|
15
|
+
<div class="col-md-9 mu-tab-body">
|
16
|
+
<div class="col-md-12">
|
17
|
+
<div class="mu-list-group">
|
18
|
+
<% @certificates.each do |certificate| %>
|
19
|
+
<span class="mu-list-group-item">
|
20
|
+
<a href="<%= download_certificate_path certificate.code %>" target="_blank"><i class="fas fa-fw fa-download"></i></a>
|
21
|
+
<span class="mu-divider-vertical"></span>
|
22
|
+
<a href="<%= linkedin_post_url certificate %>" target="_blank"><i class="fab fa-fw fa-linkedin"></i></a>
|
23
|
+
<span class="mu-divider-vertical"></span>
|
24
|
+
<a href="<%= verify_certificate_path certificate.code %>" target="_blank">
|
25
|
+
<span class="mu-text-capitalize"><%= certificate.title %> - <%= certificate.description %></span>
|
26
|
+
</a>
|
27
|
+
</span>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
<% end %>
|
data/config/routes.rb
CHANGED
@@ -65,11 +65,17 @@ Rails.application.routes.draw do
|
|
65
65
|
|
66
66
|
get :messages
|
67
67
|
get :discussions
|
68
|
+
get :certificates
|
68
69
|
end
|
69
70
|
|
71
|
+
resources :faqs, only: [:index]
|
72
|
+
|
70
73
|
resources :messages, only: [:index, :create]
|
71
74
|
get '/messages/errors' => 'messages#errors'
|
72
75
|
|
76
|
+
get 'certificates/verify/:code', to: 'certificates#verify', as: :verify_certificate
|
77
|
+
get 'certificates/download/:code', to: 'certificates#download', as: :download_certificate
|
78
|
+
|
73
79
|
# Routes by slug
|
74
80
|
get '/guides/:organization/:repository' => 'guides#show_transparently', as: :transparent_guide
|
75
81
|
get '/topics/:organization/:repository' => 'topics#show_transparently', as: :transparent_topic
|
@@ -33,6 +33,10 @@ en:
|
|
33
33
|
blocked_forum_explanation: Are you in the middle of an exam right now?
|
34
34
|
cancel: Cancel
|
35
35
|
cancel_subscription: Cancel your subscription.
|
36
|
+
certificate: Certificate
|
37
|
+
certificates: Certificates
|
38
|
+
certificates_will_be_here: Your certificates in the organization will appear here.
|
39
|
+
certificate_verified_legend: "<strong>%{full_name}</strong>'s account is verified. Mumuki certifies their successful completion of <strong>%{description}</strong>."
|
36
40
|
chapter: Chapter
|
37
41
|
chapters: Chapters
|
38
42
|
chapter_finished_html: You have finished %{chapter}!
|
@@ -45,6 +49,7 @@ en:
|
|
45
49
|
created_at_asc: Oldest
|
46
50
|
created_at_desc: Newest
|
47
51
|
comment: Comment
|
52
|
+
completed_by: Completed by
|
48
53
|
confirm: Confirm
|
49
54
|
confirm_reset: You are about to restart your exercise. Do you want to proceed?
|
50
55
|
confirm_restart: You are about to delete your progress for this guide. Do you want to proceed?
|
@@ -110,6 +115,7 @@ en:
|
|
110
115
|
expected_state: Expected board
|
111
116
|
explain_redirect: You have registered in another organization
|
112
117
|
failed: Oops, something went wrong
|
118
|
+
faqs: FAQs
|
113
119
|
feedback: Feedback
|
114
120
|
female: Female
|
115
121
|
file_exceeds_max_size: "File size should not exceed %{size_kb}kb. Please select another file."
|
@@ -155,6 +161,7 @@ en:
|
|
155
161
|
let_us_know: please let us know!
|
156
162
|
level: Level
|
157
163
|
level_up: Level up!
|
164
|
+
linkedin_profile_button_locale: en_US
|
158
165
|
listen_statement: Listen to the statement
|
159
166
|
loading: Loading
|
160
167
|
load_solution_into_console: Load your solution into the console
|
@@ -29,6 +29,10 @@ es-CL:
|
|
29
29
|
birthdate: Fecha de nacimiento
|
30
30
|
blocked_forum_explanation: ¿Puede que estés en medio de un examen?
|
31
31
|
cancel_subscription: Cancela tu subscripción.
|
32
|
+
certificate: Certificado
|
33
|
+
certificates: Certificados
|
34
|
+
certificates_will_be_here: Tus certificados en esta organización aparecerán aquí
|
35
|
+
certificate_verified_legend: "La cuenta de <strong>%{full_name}</strong> ha sido verificada. Mumuki certifica que completó el curso de <strong>%{description}.</strong>"
|
32
36
|
chapter: Capítulo
|
33
37
|
chapters: Capítulos
|
34
38
|
chapter_finished_html: ¡Terminaste %{chapter}! ¡Felicitaciones!
|
@@ -42,6 +46,7 @@ es-CL:
|
|
42
46
|
created_at_asc: Antiguas
|
43
47
|
created_at_desc: Nuevas
|
44
48
|
comment: Comentar
|
49
|
+
completed_by: Completado por
|
45
50
|
confirm: Confirmar
|
46
51
|
confirm_reset: Estás por reiniciar tu ejercicio. ¿Quieres continuar?
|
47
52
|
confirm_restart: Estás por borrar tu progreso en esta guía. ¿Quieres continuar?
|
@@ -108,6 +113,7 @@ es-CL:
|
|
108
113
|
expected_state: Tablero esperado
|
109
114
|
explain_redirect: Notamos que te registraste en otra organización.
|
110
115
|
failed: Tu solución no pasó las pruebas
|
116
|
+
faqs: Preguntas Frecuentes
|
111
117
|
feedback: Problemas que encontramos
|
112
118
|
female: Mujer
|
113
119
|
file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor selecciona otro archivo."
|
@@ -154,6 +160,7 @@ es-CL:
|
|
154
160
|
let_us_know: ¡Por favor avísanos!
|
155
161
|
level: Nivel
|
156
162
|
level_up: ¡Subiste de nivel!
|
163
|
+
linkedin_profile_button_locale: es_ES
|
157
164
|
listen_statement: Escucha la consigna
|
158
165
|
loading: Cargando
|
159
166
|
load_solution_into_console: Cargar la solución en la consola
|
@@ -34,6 +34,10 @@ es:
|
|
34
34
|
blocked_forum_explanation: ¿Puede que estés en medio de un examen?
|
35
35
|
cancel: Cancelar
|
36
36
|
cancel_subscription: Cancelá tu subscripción.
|
37
|
+
certificate: Certificado
|
38
|
+
certificates: Certificados
|
39
|
+
certificates_will_be_here: Tus certificados en esta organización aparecerán acá
|
40
|
+
certificate_verified_legend: "La cuenta de <strong>%{full_name}</strong> está verificada. Mumuki certifica que completó el curso de <strong>%{description}.</strong>"
|
37
41
|
chapter: Capítulo
|
38
42
|
chapters: Capítulos
|
39
43
|
chapter_finished_html: ¡Terminaste %{chapter}! ¡Felicitaciones!
|
@@ -46,6 +50,7 @@ es:
|
|
46
50
|
one: 1 cerrada
|
47
51
|
other: '%{count} cerradas'
|
48
52
|
comment: Comentar
|
53
|
+
completed_by: Completado por
|
49
54
|
confirm: Confirmar
|
50
55
|
confirm_reset: Estás por reiniciar tu ejercicio. ¿Querés continuar?
|
51
56
|
confirm_restart: Estás por borrar tu progreso en esta guía. ¿Querés continuar?
|
@@ -116,6 +121,7 @@ es:
|
|
116
121
|
expected_state: Tablero esperado
|
117
122
|
explain_redirect: Notamos que te registraste en otra organización.
|
118
123
|
failed: Tu solución no pasó las pruebas
|
124
|
+
faqs: Preguntas Frecuentes
|
119
125
|
feedback: Problemas que encontramos
|
120
126
|
female: Mujer
|
121
127
|
file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor seleccioná otro archivo."
|
@@ -165,6 +171,7 @@ es:
|
|
165
171
|
let_us_know: ¡Por favor avisanos!
|
166
172
|
level: Nivel
|
167
173
|
level_up: ¡Subiste de nivel!
|
174
|
+
linkedin_profile_button_locale: es_ES
|
168
175
|
listen_statement: Escuchá la consigna
|
169
176
|
loading: Cargando
|
170
177
|
load_solution_into_console: Cargar la solución en la consola
|
@@ -33,6 +33,10 @@ pt:
|
|
33
33
|
birthdate: Fecha de nacimiento
|
34
34
|
blocked_forum_explanation: Você está no meio de um exame agora?
|
35
35
|
cancel: Cancelar
|
36
|
+
certificate: Certificado
|
37
|
+
certificates: Certificados
|
38
|
+
certificates_will_be_here: Seus certificados nesta organização aparecerão aqui
|
39
|
+
certificate_verified_legend: "A conta de <strong>% {full_name} </strong> foi verificada. Mumuki certifica a conclusão com sucesso de <strong>% {description} </strong>."
|
36
40
|
chapter: Capítulo
|
37
41
|
chapters: Capítulos
|
38
42
|
chapter_finished_html: Você terminou %{chapter}! Parabéns!
|
@@ -43,6 +47,7 @@ pt:
|
|
43
47
|
closed: Fechado
|
44
48
|
closed_count: '%{count} fechado'
|
45
49
|
comment: Comentar
|
50
|
+
completed_by: Completado por
|
46
51
|
confirm: Confirme
|
47
52
|
confirm_reset: Você está prestes a reiniciar seu exercício. Você quer continuar?
|
48
53
|
confirm_restart: Você está prestes a apagar o seu progresso neste guia. Você quer continuar?
|
@@ -112,6 +117,7 @@ pt:
|
|
112
117
|
expected_state: Tabuleiro esperado
|
113
118
|
explain_redirect: Percebemos que você se registrou em outra organização.
|
114
119
|
failed: Sua solução não passou as provas
|
120
|
+
faqs: Perguntas frequentes
|
115
121
|
feedback: Problemas que encontramos
|
116
122
|
female: Feminino
|
117
123
|
file_exceeds_max_size: "O tamanho do arquivo não deve exceder %{size_kb}kb. Selecione outro arquivo."
|
@@ -159,6 +165,7 @@ pt:
|
|
159
165
|
let_us_know: Por favor, avise-nos!
|
160
166
|
level: Nível
|
161
167
|
level_up: Você sobe de nível!
|
168
|
+
linkedin_profile_button_locale: pt_BR
|
162
169
|
listen_statement: Ouça a declaração
|
163
170
|
loading: Carregando
|
164
171
|
load_solution_into_console: Carregue a solução no console
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CertificatesController, type: :controller, organization_workspace: :test do
|
4
|
+
let(:user) { create(:user) }
|
5
|
+
let(:certificate) { create(:certificate, user: user) }
|
6
|
+
|
7
|
+
context 'download' do
|
8
|
+
before { set_current_user! user }
|
9
|
+
before { get :download, params: { code: certificate.code } }
|
10
|
+
|
11
|
+
it { expect(response.status).to eq 200 }
|
12
|
+
it { expect(response.body).to_not be_nil }
|
13
|
+
it { expect(response.content_type).to eq 'application/pdf' }
|
14
|
+
end
|
15
|
+
end
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
13
|
+
ActiveRecord::Schema.define(version: 20210302181654) do
|
14
14
|
|
15
15
|
# These are extensions that must be enabled in order to support this database
|
16
16
|
enable_extension "plpgsql"
|
@@ -400,6 +400,7 @@ ActiveRecord::Schema.define(version: 20210119190204) do
|
|
400
400
|
t.boolean "wins_page"
|
401
401
|
t.boolean "immersible"
|
402
402
|
t.boolean "prevent_manual_evaluation_content"
|
403
|
+
t.text "faqs"
|
403
404
|
t.index ["book_id"], name: "index_organizations_on_book_id"
|
404
405
|
t.index ["name"], name: "index_organizations_on_name", unique: true
|
405
406
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature 'Certificate Programs flow', organization_workspace: :test do
|
4
|
+
|
5
|
+
let(:user) { create :user, first_name: 'Foo', last_name: 'Bar' }
|
6
|
+
|
7
|
+
before { set_current_user! user }
|
8
|
+
|
9
|
+
before { Organization.find_by_name('test').switch! }
|
10
|
+
before { create :certificate, user: user, code: 'abc' }
|
11
|
+
|
12
|
+
before { visit '/certificates/verify/abc' }
|
13
|
+
|
14
|
+
scenario { expect(page).to have_text('Foo Bar') }
|
15
|
+
scenario { expect(page).to have_link(href: /linkedin\.com\/profile\/add/) }
|
16
|
+
scenario { expect(page).to have_link(href: /certificates\/download\/abc/) }
|
17
|
+
end
|
@@ -19,6 +19,7 @@ feature 'menu bar' do
|
|
19
19
|
expect(page).not_to have_text('My account')
|
20
20
|
expect(page).not_to have_text('Classroom')
|
21
21
|
expect(page).not_to have_text('Bibliotheca')
|
22
|
+
expect(page).not_to have_text('FAQs')
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
@@ -35,6 +36,7 @@ feature 'menu bar' do
|
|
35
36
|
expect(page).not_to have_text('Bibliotheca')
|
36
37
|
expect(page).not_to have_text('Solve other\'s doubts')
|
37
38
|
expect(page).not_to have_text('My doubts')
|
39
|
+
expect(page).not_to have_text('FAQs')
|
38
40
|
end
|
39
41
|
end
|
40
42
|
end
|
@@ -57,6 +59,7 @@ feature 'menu bar' do
|
|
57
59
|
expect(page).not_to have_text('Bibliotheca')
|
58
60
|
expect(page).not_to have_text('Solve other\'s doubts')
|
59
61
|
expect(page).not_to have_text('My doubts')
|
62
|
+
expect(page).not_to have_text('FAQs')
|
60
63
|
end
|
61
64
|
|
62
65
|
context 'student with no discussions should' do
|
@@ -69,6 +72,7 @@ feature 'menu bar' do
|
|
69
72
|
expect(page).not_to have_text('Bibliotheca')
|
70
73
|
expect(page).not_to have_text('Solve other\'s doubts')
|
71
74
|
expect(page).not_to have_text('My doubts')
|
75
|
+
expect(page).not_to have_text('FAQs')
|
72
76
|
end
|
73
77
|
|
74
78
|
scenario 'see their account and solve_other_doubts links if forum is enabled' do
|
@@ -81,6 +85,17 @@ feature 'menu bar' do
|
|
81
85
|
expect(page).not_to have_text('Bibliotheca')
|
82
86
|
expect(page).to have_text('Solve other\'s doubts')
|
83
87
|
expect(page).not_to have_text('My doubts')
|
88
|
+
expect(page).not_to have_text('FAQs')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'organization with faqs' do
|
93
|
+
before { Organization.current.update! faqs: "Some faqs" }
|
94
|
+
|
95
|
+
scenario 'should see FAQs link' do
|
96
|
+
visit '/'
|
97
|
+
|
98
|
+
expect(page).to have_text('FAQs')
|
84
99
|
end
|
85
100
|
end
|
86
101
|
|
@@ -97,6 +112,7 @@ feature 'menu bar' do
|
|
97
112
|
expect(page).not_to have_text('Bibliotheca')
|
98
113
|
expect(page).not_to have_text('Solve other\'s doubts')
|
99
114
|
expect(page).not_to have_text('My doubts')
|
115
|
+
expect(page).not_to have_text('FAQs')
|
100
116
|
end
|
101
117
|
|
102
118
|
scenario 'see all discussions links if forum is enabled' do
|
@@ -110,6 +126,7 @@ feature 'menu bar' do
|
|
110
126
|
expect(page).not_to have_text('Bibliotheca')
|
111
127
|
expect(page).to have_text('Solve other\'s doubts')
|
112
128
|
expect(page).to have_text('My doubts')
|
129
|
+
expect(page).not_to have_text('FAQs')
|
113
130
|
end
|
114
131
|
|
115
132
|
scenario 'only see their account if forum is enabled in a forum_only_for_trusted organization' do
|
@@ -124,6 +141,7 @@ feature 'menu bar' do
|
|
124
141
|
expect(page).not_to have_text('Bibliotheca')
|
125
142
|
expect(page).not_to have_text('Solve other\'s doubts')
|
126
143
|
expect(page).not_to have_text('My doubts')
|
144
|
+
expect(page).not_to have_text('FAQs')
|
127
145
|
end
|
128
146
|
|
129
147
|
scenario 'see all discussions links if forum is enabled in a forum_only_for_trusted organization but it is trusted' do
|
@@ -139,6 +157,7 @@ feature 'menu bar' do
|
|
139
157
|
expect(page).not_to have_text('Bibliotheca')
|
140
158
|
expect(page).to have_text('Solve other\'s doubts')
|
141
159
|
expect(page).to have_text('My doubts')
|
160
|
+
expect(page).not_to have_text('FAQs')
|
142
161
|
end
|
143
162
|
end
|
144
163
|
|
@@ -152,6 +171,7 @@ feature 'menu bar' do
|
|
152
171
|
expect(page).not_to have_text('Bibliotheca')
|
153
172
|
expect(page).not_to have_text('Solve other\'s doubts')
|
154
173
|
expect(page).not_to have_text('My doubts')
|
174
|
+
expect(page).not_to have_text('FAQs')
|
155
175
|
end
|
156
176
|
|
157
177
|
scenario 'writer should see their account and bibliotheca' do
|
@@ -121,5 +121,17 @@ feature 'Profile Flow', organization_workspace: :test do
|
|
121
121
|
expect(page).to have_text(problem.name)
|
122
122
|
end
|
123
123
|
end
|
124
|
+
|
125
|
+
context 'visit certificates tab' do
|
126
|
+
before { Organization.find_by_name('test').switch! }
|
127
|
+
before { create :certificate, user: user, code: 'abc' }
|
128
|
+
before { visit '/user/certificates' }
|
129
|
+
|
130
|
+
scenario { expect(page).to have_text('Test - Certificate program to test') }
|
131
|
+
scenario { expect(page).to have_link(href: /certificates\/verify\/abc/) }
|
132
|
+
scenario { expect(page).to have_link(href: /linkedin.com\/profile\/add/) }
|
133
|
+
scenario { expect(page).to have_link(href: /certificates\/download\/abc/) }
|
134
|
+
end
|
135
|
+
|
124
136
|
end
|
125
137
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CertificateHelper, organization_workspace: :test do
|
4
|
+
helper CertificateHelper
|
5
|
+
|
6
|
+
describe '#linkedin_url_to_post' do
|
7
|
+
|
8
|
+
let(:certificate) { create :certificate, code: 'abc', created_at: Time.new(2000, 1, 1) }
|
9
|
+
let(:link) { "https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name=Test&organizationId=1&issueYear=2000&issueMonth=1&certUrl=http%3A%2F%2Ftest.localmumuki.io%2Fcertificates%2Fverify%2Fabc&certId=abc" }
|
10
|
+
|
11
|
+
before { allow(ENV).to receive(:[]).with('MUMUKI_LINKEDIN_ORGANIZATION_ID').and_return '1' }
|
12
|
+
it { expect(linkedin_post_url(certificate).to_s).to eq link }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mumuki-laboratory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.0.
|
4
|
+
version: 9.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franco Bulgarelli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 9.0.
|
33
|
+
version: 9.0.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 9.0.
|
40
|
+
version: 9.0.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mumukit-bridge
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -290,6 +290,48 @@ dependencies:
|
|
290
290
|
- - "~>"
|
291
291
|
- !ruby/object:Gem::Version
|
292
292
|
version: '3.7'
|
293
|
+
- !ruby/object:Gem::Dependency
|
294
|
+
name: wkhtmltopdf-binary
|
295
|
+
requirement: !ruby/object:Gem::Requirement
|
296
|
+
requirements:
|
297
|
+
- - "~>"
|
298
|
+
- !ruby/object:Gem::Version
|
299
|
+
version: '0.12'
|
300
|
+
type: :runtime
|
301
|
+
prerelease: false
|
302
|
+
version_requirements: !ruby/object:Gem::Requirement
|
303
|
+
requirements:
|
304
|
+
- - "~>"
|
305
|
+
- !ruby/object:Gem::Version
|
306
|
+
version: '0.12'
|
307
|
+
- !ruby/object:Gem::Dependency
|
308
|
+
name: wicked_pdf
|
309
|
+
requirement: !ruby/object:Gem::Requirement
|
310
|
+
requirements:
|
311
|
+
- - "~>"
|
312
|
+
- !ruby/object:Gem::Version
|
313
|
+
version: '1.4'
|
314
|
+
type: :runtime
|
315
|
+
prerelease: false
|
316
|
+
version_requirements: !ruby/object:Gem::Requirement
|
317
|
+
requirements:
|
318
|
+
- - "~>"
|
319
|
+
- !ruby/object:Gem::Version
|
320
|
+
version: '1.4'
|
321
|
+
- !ruby/object:Gem::Dependency
|
322
|
+
name: rqrcode
|
323
|
+
requirement: !ruby/object:Gem::Requirement
|
324
|
+
requirements:
|
325
|
+
- - "~>"
|
326
|
+
- !ruby/object:Gem::Version
|
327
|
+
version: '1.2'
|
328
|
+
type: :runtime
|
329
|
+
prerelease: false
|
330
|
+
version_requirements: !ruby/object:Gem::Requirement
|
331
|
+
requirements:
|
332
|
+
- - "~>"
|
333
|
+
- !ruby/object:Gem::Version
|
334
|
+
version: '1.2'
|
293
335
|
- !ruby/object:Gem::Dependency
|
294
336
|
name: pg
|
295
337
|
requirement: !ruby/object:Gem::Requirement
|
@@ -356,6 +398,7 @@ files:
|
|
356
398
|
- app/assets/javascripts/mumuki_laboratory/application/assets-loader.js
|
357
399
|
- app/assets/javascripts/mumuki_laboratory/application/bridge.js
|
358
400
|
- app/assets/javascripts/mumuki_laboratory/application/button.js
|
401
|
+
- app/assets/javascripts/mumuki_laboratory/application/certificate.js
|
359
402
|
- app/assets/javascripts/mumuki_laboratory/application/characters.js
|
360
403
|
- app/assets/javascripts/mumuki_laboratory/application/codemirror-builder.js
|
361
404
|
- app/assets/javascripts/mumuki_laboratory/application/codemirror.js
|
@@ -368,6 +411,7 @@ files:
|
|
368
411
|
- app/assets/javascripts/mumuki_laboratory/application/elipsis.js
|
369
412
|
- app/assets/javascripts/mumuki_laboratory/application/events.js
|
370
413
|
- app/assets/javascripts/mumuki_laboratory/application/exercise.js
|
414
|
+
- app/assets/javascripts/mumuki_laboratory/application/faqs.js
|
371
415
|
- app/assets/javascripts/mumuki_laboratory/application/free-form.js
|
372
416
|
- app/assets/javascripts/mumuki_laboratory/application/gamification.js
|
373
417
|
- app/assets/javascripts/mumuki_laboratory/application/i18n.js
|
@@ -414,6 +458,7 @@ files:
|
|
414
458
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_avatar.scss
|
415
459
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_book_header.scss
|
416
460
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_breadcrumb.scss
|
461
|
+
- app/assets/stylesheets/mumuki_laboratory/application/modules/_certificate.scss
|
417
462
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_checkboxes.scss
|
418
463
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_console.scss
|
419
464
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_content_show.scss
|
@@ -423,6 +468,7 @@ files:
|
|
423
468
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_editor.scss
|
424
469
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_exercise_assignment.scss
|
425
470
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_exercise_results.scss
|
471
|
+
- app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss
|
426
472
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_flash.scss
|
427
473
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_gs-board.scss
|
428
474
|
- app/assets/stylesheets/mumuki_laboratory/application/modules/_guide_corollary.scss
|
@@ -455,12 +501,14 @@ files:
|
|
455
501
|
- app/controllers/assets_controller.rb
|
456
502
|
- app/controllers/book_controller.rb
|
457
503
|
- app/controllers/book_discussions_controller.rb
|
504
|
+
- app/controllers/certificates_controller.rb
|
458
505
|
- app/controllers/chapters_controller.rb
|
459
506
|
- app/controllers/complements_controller.rb
|
460
507
|
- app/controllers/concerns/on_base_organization_only.rb
|
461
508
|
- app/controllers/concerns/organizations_controller_template.rb
|
462
509
|
- app/controllers/concerns/users_controller_template.rb
|
463
510
|
- app/controllers/concerns/with_authorization.rb
|
511
|
+
- app/controllers/concerns/with_certificate_render.rb
|
464
512
|
- app/controllers/concerns/with_errors_filter.rb
|
465
513
|
- app/controllers/concerns/with_user_discussion_validation.rb
|
466
514
|
- app/controllers/concerns/with_user_params.rb
|
@@ -474,6 +522,7 @@ files:
|
|
474
522
|
- app/controllers/exercise_solutions_controller.rb
|
475
523
|
- app/controllers/exercise_tries_controller.rb
|
476
524
|
- app/controllers/exercises_controller.rb
|
525
|
+
- app/controllers/faqs_controller.rb
|
477
526
|
- app/controllers/guide_container_controller.rb
|
478
527
|
- app/controllers/guide_progress_controller.rb
|
479
528
|
- app/controllers/guides_controller.rb
|
@@ -490,6 +539,7 @@ files:
|
|
490
539
|
- app/helpers/authors_helper.rb
|
491
540
|
- app/helpers/avatar_helper.rb
|
492
541
|
- app/helpers/breadcrumbs_helper.rb
|
542
|
+
- app/helpers/certificate_helper.rb
|
493
543
|
- app/helpers/choices_helper.rb
|
494
544
|
- app/helpers/concerns/with_student_path_navigation.rb
|
495
545
|
- app/helpers/concerns/with_student_path_navigation/continue_navigation.rb
|
@@ -527,6 +577,9 @@ files:
|
|
527
577
|
- app/views/book/_header.html.erb
|
528
578
|
- app/views/book/show.html.erb
|
529
579
|
- app/views/book_discussions/index.html.erb
|
580
|
+
- app/views/certificates/_certificate.html.erb
|
581
|
+
- app/views/certificates/_download.html.erb
|
582
|
+
- app/views/certificates/verify.html.erb
|
530
583
|
- app/views/chapters/show.html.erb
|
531
584
|
- app/views/complements/show.html.erb
|
532
585
|
- app/views/discussions/_description_message.html.erb
|
@@ -562,6 +615,7 @@ files:
|
|
562
615
|
- app/views/exercises/_exercise_title_icons.html.erb
|
563
616
|
- app/views/exercises/_read_only.html.erb
|
564
617
|
- app/views/exercises/show.html.erb
|
618
|
+
- app/views/faqs/index.html.erb
|
565
619
|
- app/views/guides/_guide.html.erb
|
566
620
|
- app/views/guides/_guide_container.html.erb
|
567
621
|
- app/views/guides/_guide_title_icons.html.erb
|
@@ -643,6 +697,8 @@ files:
|
|
643
697
|
- app/views/user_mailer/2nd_reminder.text.erb
|
644
698
|
- app/views/user_mailer/3rd_reminder.html.erb
|
645
699
|
- app/views/user_mailer/3rd_reminder.text.erb
|
700
|
+
- app/views/user_mailer/certificate.html.erb
|
701
|
+
- app/views/user_mailer/certificate.text.erb
|
646
702
|
- app/views/user_mailer/no_submissions_reminder.html.erb
|
647
703
|
- app/views/user_mailer/no_submissions_reminder.text.erb
|
648
704
|
- app/views/users/_avatar_list.html.erb
|
@@ -650,6 +706,7 @@ files:
|
|
650
706
|
- app/views/users/_profile_fields.html.erb
|
651
707
|
- app/views/users/_term.html.erb
|
652
708
|
- app/views/users/_user_form.html.erb
|
709
|
+
- app/views/users/certificates.html.erb
|
653
710
|
- app/views/users/discussions.html.erb
|
654
711
|
- app/views/users/edit.html.erb
|
655
712
|
- app/views/users/messages.html.erb
|
@@ -700,6 +757,7 @@ files:
|
|
700
757
|
- spec/api_helper.rb
|
701
758
|
- spec/capybara_helper.rb
|
702
759
|
- spec/controllers/api_clients_controller.rb
|
760
|
+
- spec/controllers/certificates_controller_spec.rb
|
703
761
|
- spec/controllers/chapters_controller_spec.rb
|
704
762
|
- spec/controllers/confirmations_controller_spec.rb
|
705
763
|
- spec/controllers/courses_api_controller_spec.rb
|
@@ -762,6 +820,7 @@ files:
|
|
762
820
|
- spec/dummy/public/error/timeout_3.svg
|
763
821
|
- spec/dummy/public/medal/outline.svg
|
764
822
|
- spec/evaluation_helper.rb
|
823
|
+
- spec/features/certificate_programs_flow_spec.rb
|
765
824
|
- spec/features/chapters_flow_spec.rb
|
766
825
|
- spec/features/complements_flow_spec.rb
|
767
826
|
- spec/features/disable_user_flow_spec.rb
|
@@ -793,6 +852,7 @@ files:
|
|
793
852
|
- spec/helpers/authors_helper_spec.rb
|
794
853
|
- spec/helpers/avatar_helper_spec.rb
|
795
854
|
- spec/helpers/breadcrumbs_helper_spec.rb
|
855
|
+
- spec/helpers/certificate_helper_spec.rb
|
796
856
|
- spec/helpers/email_helper_spec.rb
|
797
857
|
- spec/helpers/exercise_input_helper_spec.rb
|
798
858
|
- spec/helpers/icons_helper_spec.rb
|
@@ -902,6 +962,7 @@ test_files:
|
|
902
962
|
- spec/controllers/discussions_messages_controller_spec.rb
|
903
963
|
- spec/controllers/users_api_controller_spec.rb
|
904
964
|
- spec/controllers/chapters_controller_spec.rb
|
965
|
+
- spec/controllers/certificates_controller_spec.rb
|
905
966
|
- spec/controllers/organizations_api_controller_spec.rb
|
906
967
|
- spec/controllers/users_controller_spec.rb
|
907
968
|
- spec/evaluation_helper.rb
|
@@ -961,6 +1022,7 @@ test_files:
|
|
961
1022
|
- spec/features/not_found_public_flow_spec.rb
|
962
1023
|
- spec/features/home_private_flow_spec.rb
|
963
1024
|
- spec/features/login_flow_spec.rb
|
1025
|
+
- spec/features/certificate_programs_flow_spec.rb
|
964
1026
|
- spec/features/links_flow_spec.rb
|
965
1027
|
- spec/features/complements_flow_spec.rb
|
966
1028
|
- spec/features/notifications_flow_spec.rb
|
@@ -1008,6 +1070,7 @@ test_files:
|
|
1008
1070
|
- spec/helpers/page_title_helper_spec.rb
|
1009
1071
|
- spec/helpers/with_navigation_spec.rb
|
1010
1072
|
- spec/helpers/authors_helper_spec.rb
|
1073
|
+
- spec/helpers/certificate_helper_spec.rb
|
1011
1074
|
- spec/helpers/email_helper_spec.rb
|
1012
1075
|
- spec/helpers/with_choices_spec.rb
|
1013
1076
|
- spec/helpers/avatar_helper_spec.rb
|