mumuki-laboratory 9.0.1 → 9.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|