fe 0.0.4 → 2.0.0

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.
Files changed (456) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +4 -4
  3. data/Rakefile +16 -36
  4. data/app/assets/config/fe/manifest.js +3 -0
  5. data/app/assets/config/manifest.js +3 -0
  6. data/app/assets/javascripts/application.js.erb +1 -1
  7. data/app/assets/javascripts/fe/admin.js +0 -2
  8. data/app/assets/javascripts/fe/fe.admin.js +40 -20
  9. data/app/assets/javascripts/fe/fe.common.js.erb +98 -0
  10. data/app/assets/javascripts/fe/fe.public.js +2 -416
  11. data/app/assets/javascripts/fe/fe.public.nojquery.js.erb +526 -0
  12. data/app/assets/javascripts/fe/jquery.html5_upload.js +258 -0
  13. data/app/assets/javascripts/fe/jquery.validate.pack.js +3 -15
  14. data/app/assets/stylesheets/fe/fe.screen.css.scss.erb +90 -10
  15. data/app/assets/stylesheets/fe/validation.css +5 -1
  16. data/app/controllers/concerns/fe/admin/question_sheets_controller_concern.rb +111 -0
  17. data/app/controllers/concerns/fe/answer_pages_controller_concern.rb +131 -0
  18. data/app/controllers/{fe/concerns → concerns/fe}/answer_sheets_controller_concern.rb +15 -7
  19. data/app/controllers/{fe/concerns → concerns/fe}/application_controller_concern.rb +15 -2
  20. data/app/controllers/fe/admin/elements_controller.rb +102 -64
  21. data/app/controllers/fe/admin/email_templates_controller.rb +7 -7
  22. data/app/controllers/fe/admin/question_pages_controller.rb +9 -9
  23. data/app/controllers/fe/admin/question_sheets_controller.rb +2 -103
  24. data/app/controllers/fe/reference_pages_controller.rb +11 -11
  25. data/app/controllers/fe/reference_sheets_controller.rb +6 -4
  26. data/app/controllers/fe/references_controller.rb +20 -19
  27. data/app/controllers/fe/submit_pages_controller.rb +5 -5
  28. data/app/helpers/fe/answer_pages_helper.rb +1 -1
  29. data/app/helpers/fe/application_helper.rb +8 -3
  30. data/app/jobs/fe/update_reference_sheet_visibility_job.rb +11 -0
  31. data/app/mailers/fe/notifier.rb +12 -5
  32. data/app/models/answer_sheet.rb +2 -0
  33. data/app/models/application_record.rb +3 -0
  34. data/app/models/{fe/concerns → concerns/fe}/answer_concern.rb +2 -2
  35. data/app/models/{fe/concerns → concerns/fe}/answer_pages_presenter_concern.rb +15 -5
  36. data/app/models/concerns/fe/answer_sheet_concern.rb +125 -0
  37. data/app/models/{fe/concerns → concerns/fe}/choice_field_concern.rb +56 -31
  38. data/app/models/fe/address.rb +2 -2
  39. data/app/models/fe/answer.rb +1 -1
  40. data/app/models/fe/answer_sheet.rb +1 -1
  41. data/app/models/fe/answer_sheet_question_sheet.rb +2 -2
  42. data/app/models/fe/application.rb +15 -10
  43. data/app/models/fe/condition.rb +4 -4
  44. data/app/models/fe/date_field.rb +2 -2
  45. data/app/models/fe/element.rb +201 -45
  46. data/app/models/fe/email_address.rb +2 -2
  47. data/app/models/fe/email_template.rb +1 -1
  48. data/app/models/fe/page.rb +138 -31
  49. data/app/models/fe/page_element.rb +8 -3
  50. data/app/models/fe/page_link.rb +6 -3
  51. data/app/models/fe/paragraph.rb +1 -1
  52. data/app/models/fe/person.rb +16 -13
  53. data/app/models/fe/phone_number.rb +1 -1
  54. data/app/models/fe/question.rb +64 -44
  55. data/app/models/fe/question_grid.rb +16 -4
  56. data/app/models/fe/question_grid_with_total.rb +15 -0
  57. data/app/models/fe/question_set.rb +54 -14
  58. data/app/models/fe/question_sheet.rb +54 -19
  59. data/app/models/fe/reference_question.rb +9 -13
  60. data/app/models/fe/reference_sheet.rb +113 -54
  61. data/app/models/fe/state_chooser.rb +2 -2
  62. data/app/models/fe/text_field.rb +2 -2
  63. data/app/models/fe/user.rb +1 -1
  64. data/app/models/staff.rb +8 -6
  65. data/app/validators/email_validator.rb +11 -0
  66. data/app/views/fe/admin/elements/create.js.erb +4 -3
  67. data/app/views/fe/admin/elements/destroy.js.erb +1 -1
  68. data/app/views/fe/admin/elements/drop.js.erb +2 -1
  69. data/app/views/fe/admin/elements/duplicate.js.erb +2 -1
  70. data/app/views/fe/admin/elements/edit.js.erb +1 -1
  71. data/app/views/fe/admin/elements/error.js.erb +1 -1
  72. data/app/views/fe/admin/elements/new.js.erb +13 -6
  73. data/app/views/fe/admin/elements/update.js.erb +1 -1
  74. data/app/views/fe/admin/email_templates/_form.html.erb +3 -3
  75. data/app/views/fe/admin/email_templates/edit.html.erb +3 -3
  76. data/app/views/fe/admin/email_templates/index.html.erb +3 -3
  77. data/app/views/fe/admin/email_templates/new.html.erb +3 -3
  78. data/app/views/fe/admin/panels/_advanced_options.html.erb +16 -10
  79. data/app/views/fe/admin/panels/_common_boolean_fields.html.erb +1 -0
  80. data/app/views/fe/admin/panels/_common_boolean_fields_default.html.erb +11 -0
  81. data/app/views/fe/admin/panels/_common_fields.html.erb +18 -19
  82. data/app/views/fe/admin/panels/_condition.html.erb +1 -1
  83. data/app/views/fe/admin/panels/_insert.html.erb +25 -25
  84. data/app/views/fe/admin/panels/_nav_controls.html.erb +4 -4
  85. data/app/views/fe/admin/panels/_page.html.erb +2 -2
  86. data/app/views/fe/admin/panels/_pages_list.html.erb +3 -3
  87. data/app/views/fe/admin/panels/_prop_attachment_field.html.erb +2 -2
  88. data/app/views/fe/admin/panels/_prop_choice_field.html.erb +52 -24
  89. data/app/views/fe/admin/panels/_prop_date_field.html.erb +1 -1
  90. data/app/views/fe/admin/panels/_prop_element.html.erb +7 -14
  91. data/app/views/fe/admin/panels/_prop_page.html.erb +11 -6
  92. data/app/views/fe/admin/panels/_prop_paragraph.html.erb +38 -24
  93. data/app/views/fe/admin/panels/_prop_question_grid.html.erb +7 -2
  94. data/app/views/fe/admin/panels/_prop_question_grid_with_total.html.erb +2 -2
  95. data/app/views/fe/admin/panels/_prop_reference_question.html.erb +3 -3
  96. data/app/views/fe/admin/panels/_prop_section.html.erb +8 -2
  97. data/app/views/fe/admin/panels/_prop_sheet.html.erb +7 -4
  98. data/app/views/fe/admin/panels/_prop_text_field.html.erb +12 -12
  99. data/app/views/fe/admin/question_pages/_element.html.erb +16 -6
  100. data/app/views/fe/admin/question_pages/_element_show.html.erb +2 -2
  101. data/app/views/fe/admin/question_pages/_question_page.html.erb +4 -4
  102. data/app/views/fe/admin/question_pages/create.js.erb +3 -3
  103. data/app/views/fe/admin/question_pages/destroy.js.erb +3 -3
  104. data/app/views/fe/admin/question_pages/edit.js.erb +1 -1
  105. data/app/views/fe/admin/question_pages/error.js.erb +1 -1
  106. data/app/views/fe/admin/question_pages/show.js.erb +2 -2
  107. data/app/views/fe/admin/question_pages/show_panel.js.erb +1 -1
  108. data/app/views/fe/admin/question_pages/update.js.erb +1 -1
  109. data/app/views/fe/admin/question_sheets/edit.js.erb +1 -1
  110. data/app/views/fe/admin/question_sheets/error.js.erb +1 -1
  111. data/app/views/fe/admin/question_sheets/index.html.erb +8 -8
  112. data/app/views/fe/admin/question_sheets/new.html.erb +3 -3
  113. data/app/views/fe/admin/question_sheets/show.html.erb +5 -5
  114. data/app/views/fe/admin/question_sheets/update.js.erb +1 -1
  115. data/app/views/fe/answer_pages/_answer_page.html.erb +14 -14
  116. data/app/views/fe/answer_pages/_element.html.erb +25 -6
  117. data/app/views/fe/answer_pages/_page_name.html.erb +1 -0
  118. data/app/views/fe/answer_pages/show.html.erb +39 -0
  119. data/app/views/fe/answer_pages/update.js.erb +11 -3
  120. data/app/views/fe/answer_sheets/_answer_sheet.html.erb +6 -6
  121. data/app/views/fe/answer_sheets/_element.html.erb +55 -35
  122. data/app/views/fe/answer_sheets/_incomplete.html.erb +1 -1
  123. data/app/views/fe/answer_sheets/_page_link.html.erb +9 -7
  124. data/app/views/fe/answer_sheets/_pages_list.html.erb +4 -4
  125. data/app/views/fe/answer_sheets/_submit_to.html.erb +1 -0
  126. data/app/views/fe/answer_sheets/_title.html.erb +1 -1
  127. data/app/views/fe/answer_sheets/edit.html.erb +24 -24
  128. data/app/views/fe/answer_sheets/incomplete.js.erb +9 -3
  129. data/app/views/fe/answer_sheets/index.html.erb +3 -3
  130. data/app/views/fe/answer_sheets/show.html.erb +1 -1
  131. data/app/views/fe/applications/_logout.html.erb +1 -0
  132. data/app/views/fe/applications/show.html.erb +1 -0
  133. data/app/views/fe/questions/fe/_acceptance.html.erb +11 -10
  134. data/app/views/fe/questions/fe/_attachment_field.html.erb +133 -10
  135. data/app/views/fe/questions/fe/_checkbox_field.html.erb +34 -30
  136. data/app/views/fe/questions/fe/_country.html.erb +6 -6
  137. data/app/views/fe/questions/fe/_date_field.html.erb +5 -5
  138. data/app/views/fe/questions/fe/_date_field_mmyy.html.erb +8 -8
  139. data/app/views/fe/questions/fe/_drop_down_field.html.erb +7 -6
  140. data/app/views/fe/questions/fe/_paragraph.html.erb +1 -1
  141. data/app/views/fe/questions/fe/_question_grid.html.erb +21 -16
  142. data/app/views/fe/questions/fe/_question_grid_with_total.html.erb +25 -18
  143. data/app/views/fe/questions/fe/_questions.html.erb +11 -5
  144. data/app/views/fe/questions/fe/_radio_button_field.html.erb +42 -25
  145. data/app/views/fe/questions/fe/_rating.html.erb +57 -18
  146. data/app/views/fe/questions/fe/_reference_discipler.html.erb +1 -1
  147. data/app/views/fe/questions/fe/_reference_friend.html.erb +1 -1
  148. data/app/views/fe/questions/fe/_reference_parent.html.erb +1 -1
  149. data/app/views/fe/questions/fe/_reference_peer.html.erb +1 -1
  150. data/app/views/fe/questions/fe/_reference_question.html.erb +44 -21
  151. data/app/views/fe/questions/fe/_reference_roommate.html.erb +1 -1
  152. data/app/views/fe/questions/fe/_reference_spiritual.html.erb +1 -1
  153. data/app/views/fe/questions/fe/_reference_staff.html.erb +1 -1
  154. data/app/views/fe/questions/fe/_section.html.erb +1 -1
  155. data/app/views/fe/questions/fe/_state_chooser.html.erb +6 -6
  156. data/app/views/fe/questions/fe/_text_area_field.html.erb +17 -6
  157. data/app/views/fe/questions/fe/_text_field.html.erb +7 -6
  158. data/app/views/fe/questions/fe/_yes_no.html.erb +8 -8
  159. data/app/views/fe/questions/fe/_yes_no_field.erb +12 -9
  160. data/app/views/fe/reference_pages/_reference.html.erb +15 -15
  161. data/app/views/fe/reference_pages/edit.html.erb +9 -9
  162. data/app/views/fe/reference_sheets/done.html.erb +2 -2
  163. data/app/views/fe/reference_sheets/not_found.html.erb +4 -4
  164. data/app/views/fe/references/edit.html.erb +6 -6
  165. data/app/views/fe/references/show.html.erb +8 -8
  166. data/app/views/fe/references/submit.js.erb +3 -3
  167. data/app/views/fe/submit_pages/_thankyou.html.erb +1 -1
  168. data/app/views/fe/submit_pages/edit.html.erb +12 -12
  169. data/app/views/fe/submit_pages/error.js.erb +1 -1
  170. data/app/views/fe/submit_pages/submit.js.erb +2 -2
  171. data/app/views/layouts/fe/_error_messages_for.html.erb +7 -0
  172. data/app/views/layouts/fe/application.html.erb +4 -5
  173. data/app/views/layouts/fe/fe_admin.html.erb +30 -0
  174. data/app/views.current/fe/admin/elements/_errors.html.erb +11 -0
  175. data/app/views.current/fe/admin/elements/create.js.erb +12 -0
  176. data/app/views.current/fe/admin/elements/destroy.js.erb +4 -0
  177. data/app/views.current/fe/admin/elements/drop.js.erb +3 -0
  178. data/app/views.current/fe/admin/elements/duplicate.js.erb +3 -0
  179. data/app/views.current/fe/admin/elements/edit.js.erb +4 -0
  180. data/app/views.current/fe/admin/elements/error.js.erb +4 -0
  181. data/app/views.current/fe/admin/elements/new.js.erb +17 -0
  182. data/app/views.current/fe/admin/elements/reorder.js.erb +0 -0
  183. data/app/views.current/fe/admin/elements/update.js.erb +9 -0
  184. data/app/views.current/fe/admin/email_templates/_form.html.erb +8 -0
  185. data/app/views.current/fe/admin/email_templates/edit.html.erb +13 -0
  186. data/app/views.current/fe/admin/email_templates/index.html.erb +20 -0
  187. data/app/views.current/fe/admin/email_templates/new.html.erb +11 -0
  188. data/app/views.current/fe/admin/panels/_advanced_options.html.erb +49 -0
  189. data/app/views.current/fe/admin/panels/_common_boolean_fields.html.erb +1 -0
  190. data/app/views.current/fe/admin/panels/_common_boolean_fields_default.html.erb +11 -0
  191. data/app/views.current/fe/admin/panels/_common_fields.html.erb +23 -0
  192. data/app/views.current/fe/admin/panels/_condition.html.erb +6 -0
  193. data/app/views.current/fe/admin/panels/_insert.html.erb +39 -0
  194. data/app/views.current/fe/admin/panels/_nav_controls.html.erb +6 -0
  195. data/app/views.current/fe/admin/panels/_page.html.erb +3 -0
  196. data/app/views.current/fe/admin/panels/_pages_list.html.erb +16 -0
  197. data/app/views.current/fe/admin/panels/_prop_attachment_field.html.erb +2 -0
  198. data/app/views.current/fe/admin/panels/_prop_choice_field.html.erb +74 -0
  199. data/app/views.current/fe/admin/panels/_prop_date_field.html.erb +7 -0
  200. data/app/views.current/fe/admin/panels/_prop_element.html.erb +23 -0
  201. data/app/views.current/fe/admin/panels/_prop_page.html.erb +26 -0
  202. data/app/views.current/fe/admin/panels/_prop_paragraph.html.erb +46 -0
  203. data/app/views.current/fe/admin/panels/_prop_question_grid.html.erb +28 -0
  204. data/app/views.current/fe/admin/panels/_prop_question_grid_with_total.html.erb +14 -0
  205. data/app/views.current/fe/admin/panels/_prop_reference_question.html.erb +12 -0
  206. data/app/views.current/fe/admin/panels/_prop_section.html.erb +8 -0
  207. data/app/views.current/fe/admin/panels/_prop_sheet.html.erb +20 -0
  208. data/app/views.current/fe/admin/panels/_prop_text_field.html.erb +20 -0
  209. data/app/views.current/fe/admin/question_pages/_element.html.erb +28 -0
  210. data/app/views.current/fe/admin/question_pages/_element_show.html.erb +10 -0
  211. data/app/views.current/fe/admin/question_pages/_errors.html.erb +10 -0
  212. data/app/views.current/fe/admin/question_pages/_question_page.html.erb +13 -0
  213. data/app/views.current/fe/admin/question_pages/create.js.erb +11 -0
  214. data/app/views.current/fe/admin/question_pages/destroy.js.erb +5 -0
  215. data/app/views.current/fe/admin/question_pages/edit.js.erb +3 -0
  216. data/app/views.current/fe/admin/question_pages/error.js.erb +4 -0
  217. data/app/views.current/fe/admin/question_pages/show.js.erb +9 -0
  218. data/app/views.current/fe/admin/question_pages/show_panel.js.erb +3 -0
  219. data/app/views.current/fe/admin/question_pages/update.js.erb +2 -0
  220. data/app/views.current/fe/admin/question_sheets/_errors.html.erb +11 -0
  221. data/app/views.current/fe/admin/question_sheets/edit.js.erb +3 -0
  222. data/app/views.current/fe/admin/question_sheets/error.js.erb +5 -0
  223. data/app/views.current/fe/admin/question_sheets/index.html.erb +41 -0
  224. data/app/views.current/fe/admin/question_sheets/new.html.erb +15 -0
  225. data/app/views.current/fe/admin/question_sheets/show.html.erb +27 -0
  226. data/app/views.current/fe/admin/question_sheets/update.js.erb +2 -0
  227. data/app/views.current/fe/answer_pages/_answer_page.html.erb +53 -0
  228. data/app/views.current/fe/answer_pages/_element.html.erb +32 -0
  229. data/app/views.current/fe/answer_pages/_page_name.html.erb +1 -0
  230. data/app/views.current/fe/answer_pages/show.html.erb +39 -0
  231. data/app/views.current/fe/answer_pages/update.js.erb +13 -0
  232. data/app/views.current/fe/answer_sheets/_answer_sheet.html.erb +26 -0
  233. data/app/views.current/fe/answer_sheets/_element.html.erb +74 -0
  234. data/app/views.current/fe/answer_sheets/_incomplete.html.erb +10 -0
  235. data/app/views.current/fe/answer_sheets/_page_link.html.erb +9 -0
  236. data/app/views.current/fe/answer_sheets/_pages_list.html.erb +11 -0
  237. data/app/views.current/fe/answer_sheets/_submit_to.html.erb +1 -0
  238. data/app/views.current/fe/answer_sheets/_title.html.erb +1 -0
  239. data/app/views.current/fe/answer_sheets/edit.html.erb +66 -0
  240. data/app/views.current/fe/answer_sheets/incomplete.js.erb +11 -0
  241. data/app/views.current/fe/answer_sheets/index.html.erb +18 -0
  242. data/app/views.current/fe/answer_sheets/send_reference_invite.js.erb +8 -0
  243. data/app/views.current/fe/answer_sheets/show.html.erb +13 -0
  244. data/app/views.current/fe/applications/_logout.html.erb +1 -0
  245. data/app/views.current/fe/applications/show.html.erb +1 -0
  246. data/app/views.current/fe/help/builder.html +33 -0
  247. data/app/views.current/fe/help/question_grid.html +18 -0
  248. data/app/views.current/fe/questions/fe/_acceptance.html.erb +14 -0
  249. data/app/views.current/fe/questions/fe/_attachment_field.html.erb +165 -0
  250. data/app/views.current/fe/questions/fe/_checkbox_field.html.erb +53 -0
  251. data/app/views.current/fe/questions/fe/_country.html.erb +7 -0
  252. data/app/views.current/fe/questions/fe/_date_field.html.erb +7 -0
  253. data/app/views.current/fe/questions/fe/_date_field_mmyy.html.erb +9 -0
  254. data/app/views.current/fe/questions/fe/_drop_down_field.html.erb +8 -0
  255. data/app/views.current/fe/questions/fe/_paragraph.html.erb +1 -0
  256. data/app/views.current/fe/questions/fe/_question_grid.html.erb +70 -0
  257. data/app/views.current/fe/questions/fe/_question_grid_with_total.html.erb +64 -0
  258. data/app/views.current/fe/questions/fe/_questions.html.erb +15 -0
  259. data/app/views.current/fe/questions/fe/_radio_button_field.html.erb +60 -0
  260. data/app/views.current/fe/questions/fe/_rating.html.erb +64 -0
  261. data/app/views.current/fe/questions/fe/_reference_discipler.html.erb +1 -0
  262. data/app/views.current/fe/questions/fe/_reference_friend.html.erb +1 -0
  263. data/app/views.current/fe/questions/fe/_reference_parent.html.erb +1 -0
  264. data/app/views.current/fe/questions/fe/_reference_peer.html.erb +1 -0
  265. data/app/views.current/fe/questions/fe/_reference_question.html.erb +61 -0
  266. data/app/views.current/fe/questions/fe/_reference_roommate.html.erb +1 -0
  267. data/app/views.current/fe/questions/fe/_reference_spiritual.html.erb +1 -0
  268. data/app/views.current/fe/questions/fe/_reference_staff.html.erb +1 -0
  269. data/app/views.current/fe/questions/fe/_section.html.erb +1 -0
  270. data/app/views.current/fe/questions/fe/_state_chooser.html.erb +7 -0
  271. data/app/views.current/fe/questions/fe/_text_area_field.html.erb +17 -0
  272. data/app/views.current/fe/questions/fe/_text_field.html.erb +9 -0
  273. data/app/views.current/fe/questions/fe/_yes_no.html.erb +17 -0
  274. data/app/views.current/fe/questions/fe/_yes_no_field.erb +20 -0
  275. data/app/views.current/fe/reference_pages/_reference.html.erb +31 -0
  276. data/app/views.current/fe/reference_pages/edit.html.erb +24 -0
  277. data/app/views.current/fe/reference_sheets/done.html.erb +2 -0
  278. data/app/views.current/fe/reference_sheets/not_found.html.erb +5 -0
  279. data/app/views.current/fe/reference_sheets/submitted.js.erb +1 -0
  280. data/app/views.current/fe/references/edit.html.erb +8 -0
  281. data/app/views.current/fe/references/send_invite.js.erb +7 -0
  282. data/app/views.current/fe/references/show.html.erb +18 -0
  283. data/app/views.current/fe/references/submit.js.erb +3 -0
  284. data/app/views.current/fe/submit_pages/_errors.html.erb +1 -0
  285. data/app/views.current/fe/submit_pages/_thankyou.html.erb +2 -0
  286. data/app/views.current/fe/submit_pages/edit.html.erb +36 -0
  287. data/app/views.current/fe/submit_pages/error.js.erb +1 -0
  288. data/app/views.current/fe/submit_pages/submit.js.erb +3 -0
  289. data/app/views.current/layouts/fe/_error_messages_for.html.erb +7 -0
  290. data/app/views.current/layouts/fe/application.html.erb +47 -0
  291. data/app/{views/layouts/fe/fe.admin.html.erb → views.current/layouts/fe/fe_admin.html.erb} +4 -4
  292. data/config/initializers/paper_trail.rb +3 -0
  293. data/config/routes.rb +3 -37
  294. data/db/migrate/20131003041856_core.rb +23 -23
  295. data/db/migrate/20131003044250_create_reference_sheets.rb +2 -1
  296. data/db/migrate/20131003044436_add_element_and_answer_fields.rb +3 -3
  297. data/db/migrate/20131003044518_create_email_templates.rb +2 -2
  298. data/db/migrate/20131003044621_add_max_lengths.rb +1 -1
  299. data/db/migrate/20131003044714_create_join_table.rb +1 -1
  300. data/db/migrate/20131016162128_remove_question_id_from_element.rb +1 -1
  301. data/db/migrate/20140623153424_create_fe_people.rb +2 -2
  302. data/db/migrate/20140624180246_create_fe_addresses.rb +2 -2
  303. data/db/migrate/{20140624182216_create_create_fe_phone_numbers.rb → 20140624182216_create_fe_phone_numbers.rb} +2 -2
  304. data/db/migrate/20140625160545_create_fe_users.rb +2 -2
  305. data/db/migrate/20140808202507_add_conditional_type_to_elements.rb +1 -1
  306. data/db/migrate/20140808203609_add_conditional_answer_to_elements.rb +1 -1
  307. data/db/migrate/20141103204704_remove_short_value_column.rb +1 -1
  308. data/db/migrate/20141109154522_move_conditional_ids_used_for_choice_field_to_their_own_column.rb +1 -1
  309. data/db/migrate/20150504221439_add_all_element_ids_to_pages.rb +5 -0
  310. data/db/migrate/20150713022326_add_locale_columns.rb +9 -0
  311. data/db/migrate/20150714220730_add_locale_to_answer_sheet.rb +5 -0
  312. data/db/migrate/20150925181652_add_share_to_elements.rb +5 -0
  313. data/db/migrate/20150928085325_change_pages_all_element_ids_to_text.rb +5 -0
  314. data/db/migrate/20150930191538_add_locale_to_reference_sheets.rb +5 -0
  315. data/db/migrate/20151021181928_switch_conditional_answer_separator_to_semicolon.rb +7 -0
  316. data/db/migrate/20151021184250_add_question_sheet_id_in_refs.rb +12 -0
  317. data/db/migrate/20160201185838_add_visible_and_visibility_cache_key_to_reference_sheets.rb +6 -0
  318. data/db/migrate/20160805221415_add_rating_extra_labels.rb +10 -0
  319. data/db/migrate/20181108201746_create_versions.rb +80 -0
  320. data/db/migrate/20181218201130_increase_slug_length.rb +5 -0
  321. data/lib/access_key_generator.rb +12 -0
  322. data/lib/distinct_distinct_patch.rb +20 -0
  323. data/lib/fe/engine.rb +26 -14
  324. data/lib/fe/version.rb +1 -1
  325. data/lib/fe.rb +11 -1
  326. data/spec/controllers/fe/admin/elements_controller_spec.rb +211 -1
  327. data/spec/controllers/fe/admin/email_templates_controller_spec.rb +26 -1
  328. data/spec/controllers/fe/admin/question_pages_controller_spec.rb +8 -1
  329. data/spec/controllers/fe/admin/question_sheets_controller_spec.rb +48 -1
  330. data/spec/controllers/fe/answer_pages_controller_spec.rb +129 -1
  331. data/spec/controllers/fe/answer_sheets_controller_spec.rb +136 -1
  332. data/spec/controllers/fe/reference_pages_controller.rb +4 -0
  333. data/spec/controllers/fe/references_controller_spec.rb +4 -0
  334. data/spec/controllers/fe/submit_pages_controller_spec.rb +4 -0
  335. data/spec/dummy/app/assets/config/manifest.js +0 -0
  336. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  337. data/spec/dummy/app/helpers/application_helper.rb +9 -0
  338. data/spec/dummy/app/models/application.rb +3 -0
  339. data/spec/dummy/app/models/person.rb +11 -0
  340. data/spec/dummy/app/models/user.rb +3 -0
  341. data/spec/dummy/app/views/layouts/application.html.erb +2 -2
  342. data/spec/dummy/config/application.rb +3 -1
  343. data/spec/dummy/config/database.yml +20 -17
  344. data/spec/dummy/config/environments/production.rb +1 -5
  345. data/spec/dummy/config/environments/test.rb +4 -2
  346. data/spec/dummy/config/initializers/assets.rb +5 -2
  347. data/spec/dummy/config/initializers/fast_gettext.rb +5 -0
  348. data/spec/dummy/config/initializers/to_unsafe_h.rb +5 -0
  349. data/spec/dummy/config/initializers/to_unsafe_h.rb.new +5 -0
  350. data/spec/dummy/config/secrets.yml +2 -2
  351. data/spec/dummy/db/migrate/20141203214017_core.fe_engine.rb +92 -0
  352. data/spec/dummy/db/migrate/20141203214018_create_reference_sheets.fe_engine.rb +25 -0
  353. data/spec/dummy/db/migrate/20141203214019_add_element_and_answer_fields.fe_engine.rb +11 -0
  354. data/spec/dummy/db/migrate/20141203214020_create_email_templates.fe_engine.rb +18 -0
  355. data/spec/dummy/db/migrate/20141203214021_add_max_lengths.fe_engine.rb +9 -0
  356. data/spec/dummy/db/migrate/20141203214022_create_join_table.fe_engine.rb +12 -0
  357. data/spec/dummy/db/migrate/20141203214023_remove_question_id_from_element.fe_engine.rb +10 -0
  358. data/spec/dummy/db/migrate/20141203214024_create_fe_people.fe_engine.rb +13 -0
  359. data/spec/dummy/db/migrate/20141203214025_create_fe_addresses.fe_engine.rb +21 -0
  360. data/spec/dummy/db/migrate/20141203214027_create_fe_users.fe_engine.rb +13 -0
  361. data/spec/dummy/db/migrate/20141203214028_add_conditional_type_to_elements.fe_engine.rb +6 -0
  362. data/spec/dummy/db/migrate/20141203214029_add_conditional_answer_to_elements.fe_engine.rb +6 -0
  363. data/spec/dummy/db/migrate/20141203214030_remove_short_value_column.fe_engine.rb +6 -0
  364. data/spec/dummy/db/migrate/20141203214031_move_conditional_ids_used_for_choice_field_to_their_own_column.fe_engine.rb +8 -0
  365. data/spec/dummy/db/migrate/20150123215803_create_users.rb +9 -0
  366. data/spec/dummy/db/migrate/20150504222619_add_all_element_ids_to_pages.fe_engine.rb +6 -0
  367. data/spec/dummy/db/migrate/20150925192557_add_share_to_elements.fe_engine.rb +6 -0
  368. data/spec/dummy/db/migrate/20150930190001_create_fe_phone_numbers.fe_engine.rb +20 -0
  369. data/spec/dummy/db/migrate/20150930190002_add_locale_columns.fe_engine.rb +10 -0
  370. data/spec/dummy/db/migrate/20150930190003_add_locale_to_answer_sheet.fe_engine.rb +6 -0
  371. data/spec/dummy/db/migrate/20150930190004_change_pages_all_element_ids_to_text.fe_engine.rb +6 -0
  372. data/spec/dummy/db/migrate/20150930191756_add_locale_to_reference_sheets.fe_engine.rb +6 -0
  373. data/spec/dummy/db/migrate/20151021190027_add_question_sheet_id_in_refs.fe_engine.rb +13 -0
  374. data/spec/dummy/db/migrate/20160204164612_switch_conditional_answer_separator_to_semicolon.fe_engine.rb +8 -0
  375. data/spec/dummy/db/migrate/20160204164613_add_visible_and_visibility_cache_key_to_reference_sheets.fe_engine.rb +7 -0
  376. data/spec/dummy/db/migrate/20181108201746_create_versions.rb +80 -0
  377. data/spec/dummy/db/schema.rb +91 -69
  378. data/spec/dummy/log/test.log +101278 -419
  379. data/spec/factories/answer_sheet_question_sheets.rb +1 -1
  380. data/spec/factories/answer_sheets.rb +2 -2
  381. data/spec/factories/answers.rb +1 -1
  382. data/spec/factories/applications.rb +3 -4
  383. data/spec/factories/dummy_applications.rb +6 -0
  384. data/spec/factories/dummy_people.rb +6 -0
  385. data/spec/factories/dummy_users.rb +6 -0
  386. data/spec/factories/elements.rb +35 -10
  387. data/spec/factories/email_templates.rb +5 -0
  388. data/spec/factories/fe_addresses.rb +10 -10
  389. data/spec/factories/fe_email_addresses.rb +3 -3
  390. data/spec/factories/fe_email_templates.rb +9 -0
  391. data/spec/factories/fe_people.rb +5 -7
  392. data/spec/factories/fe_phone_numbers.rb +3 -3
  393. data/spec/factories/fe_user.rb +6 -0
  394. data/spec/factories/page.rb +1 -1
  395. data/spec/factories/page_elements.rb +1 -1
  396. data/spec/factories/paragraphs.rb +1 -1
  397. data/spec/factories/question_sheet.rb +3 -3
  398. data/spec/factories/reference_questions.rb +1 -1
  399. data/spec/factories/reference_sheets.rb +9 -0
  400. data/spec/jobs/fe/update_reference_sheet_visibility_job_spec.rb +40 -0
  401. data/spec/mailers/fe/notifier_spec.rb +39 -0
  402. data/spec/models/fe/answer_sheet_question_sheet_spec.rb +1 -1
  403. data/spec/models/fe/answer_spec.rb +2 -2
  404. data/spec/models/fe/application_spec.rb +94 -1
  405. data/spec/models/fe/choice_field_spec.rb +66 -0
  406. data/spec/models/fe/condition_spec.rb +2 -2
  407. data/spec/models/fe/element_spec.rb +414 -37
  408. data/spec/models/fe/email_template_spec.rb +1 -1
  409. data/spec/models/fe/page_element_spec.rb +1 -1
  410. data/spec/models/fe/page_spec.rb +168 -11
  411. data/spec/models/fe/person_spec.rb +1 -1
  412. data/spec/models/fe/question_set_spec.rb +91 -0
  413. data/spec/models/fe/question_sheet_spec.rb +103 -1
  414. data/spec/models/fe/question_spec.rb +73 -6
  415. data/spec/models/fe/reference_question_spec.rb +20 -0
  416. data/spec/models/fe/reference_sheet_spec.rb +305 -2
  417. data/spec/models/fe/text_field_spec.rb +22 -0
  418. data/spec/rails_helper.rb +85 -54
  419. data/spec/support/choices.xml +6 -0
  420. metadata +310 -84
  421. data/app/assets/javascripts/fe/fe.common.js +0 -57
  422. data/app/assets/javascripts/fe/jquery.scrollTo-min.js +0 -7
  423. data/app/assets/javascripts/fe/rails.extra.js +0 -6
  424. data/app/controllers/fe/applications_controller.rb +0 -183
  425. data/app/controllers/fe/concerns/answer_pages_controller_concern.rb +0 -83
  426. data/app/controllers/fe/payments_controller.rb +0 -184
  427. data/app/models/fe/concerns/answer_sheet_concern.rb +0 -55
  428. data/app/models/fe/payment.rb +0 -77
  429. data/app/models/fe/payment_question.rb +0 -22
  430. data/app/views/fe/admin/panels/_prop_payment_question.html.erb +0 -1
  431. data/app/views/fe/application/_logout.html.erb +0 -1
  432. data/app/views/fe/payment_pages/_credit.html.erb +0 -47
  433. data/app/views/fe/payment_pages/_mail.html.erb +0 -27
  434. data/app/views/fe/payment_pages/_payment.html.erb +0 -6
  435. data/app/views/fe/payment_pages/_staff.html.erb +0 -25
  436. data/app/views/fe/payment_pages/_staff_results.html.erb +0 -17
  437. data/app/views/fe/payment_pages/edit.html.erb +0 -75
  438. data/app/views/fe/payment_pages/staff_search.js.erb +0 -2
  439. data/app/views/fe/payments/_credit.html.erb +0 -47
  440. data/app/views/fe/payments/_errors.html.erb +0 -1
  441. data/app/views/fe/payments/_payment.html.erb +0 -13
  442. data/app/views/fe/payments/_staff.html.erb +0 -21
  443. data/app/views/fe/payments/_staff_results.html.erb +0 -18
  444. data/app/views/fe/payments/approve.js.erb +0 -3
  445. data/app/views/fe/payments/create.js.erb +0 -19
  446. data/app/views/fe/payments/destroy.js.erb +0 -7
  447. data/app/views/fe/payments/edit.html.erb +0 -56
  448. data/app/views/fe/payments/error.js.erb +0 -3
  449. data/app/views/fe/payments/no_access.html.erb +0 -7
  450. data/app/views/fe/payments/staff_search.js.erb +0 -1
  451. data/app/views/fe/payments/update.html.erb +0 -24
  452. data/app/views/fe/questions/fe/_payment_question.html.erb +0 -70
  453. data/db/migrate/20140828045339_create_payments.rb +0 -13
  454. data/spec/dummy/db/test.sqlite3 +0 -0
  455. data/spec/factories/payments.rb +0 -7
  456. data/spec/models/fe/payment_question_spec.rb +0 -65
@@ -1,4 +1,132 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe Fe::AnswerPagesController do
3
+ describe Fe::AnswerPagesController, type: :controller do
4
+ context '#edit' do
5
+ let(:answer_sheet) { create(:answer_sheet) }
6
+ let(:page) { create(:page) }
7
+
8
+ it 'should work' do
9
+ question_sheet = page.question_sheet
10
+ create(:answer_sheet_question_sheet, answer_sheet: answer_sheet, question_sheet: question_sheet)
11
+ get :edit, params: {id: page.id, answer_sheet_id: answer_sheet.id}
12
+ expect(response).to render_template('fe/answer_pages/_answer_page')
13
+ end
14
+ context 'filtering' do
15
+ let(:el_confidential) { create(:text_field_element, is_confidential: true) }
16
+ let(:el_visible) { create(:text_field_element, is_confidential: false) }
17
+ let(:el_visible2) { create(:text_field_element, is_confidential: false) }
18
+
19
+ before do
20
+ page.elements << el_confidential << el_visible << el_visible2
21
+ question_sheet = page.question_sheet
22
+ create(:answer_sheet_question_sheet, answer_sheet: answer_sheet, question_sheet: question_sheet)
23
+ end
24
+
25
+ it 'should filter out elements' do
26
+ allow_any_instance_of(Fe::AnswerPagesController).to receive(:get_filter).and_return(filter_default: :show, filter: [ :is_confidential ])
27
+ get :edit, params: {id: page.id, answer_sheet_id: answer_sheet.id}
28
+ expect(assigns(:elements)).to_not include(el_confidential)
29
+ expect(assigns(:elements)).to include(el_visible)
30
+ expect(assigns(:elements)).to include(el_visible2)
31
+ end
32
+ it 'should filter in elements' do
33
+ allow_any_instance_of(Fe::AnswerPagesController).to receive(:get_filter).and_return(filter_default: :hide, filter: [ :is_confidential ])
34
+ get :edit, params: {id: page.id, answer_sheet_id: answer_sheet.id}
35
+ expect(assigns(:elements)).to include(el_confidential)
36
+ expect(assigns(:elements)).to_not include(el_visible)
37
+ expect(assigns(:elements)).to_not include(el_visible2)
38
+ end
39
+ end
40
+ end
41
+
42
+ context '#update' do
43
+ let(:answer_sheet) { create(:answer_sheet) }
44
+ let(:page) { create(:page) }
45
+ let(:question_sheet) { question_sheet = page.question_sheet }
46
+ let(:element) { create(:text_field_element) }
47
+
48
+ before do
49
+ create(:answer_sheet_question_sheet, answer_sheet: answer_sheet, question_sheet: question_sheet)
50
+ create(:page_element, element: element, page: page)
51
+ end
52
+
53
+ it 'should work' do
54
+ # ref
55
+ reference_question = create(:reference_question)
56
+ reference_sheet = create(:reference_sheet, applicant_answer_sheet_id: answer_sheet.id, email: 'initial@ref.com')
57
+
58
+ expect {
59
+ put :update, params: {
60
+ answers: { "#{element.id}" => 'answer here' },
61
+ reference: { "#{reference_sheet.id}" => {
62
+ relationship: 'roommate',
63
+ title: 'A',
64
+ first_name: 'FN',
65
+ last_name: 'LN',
66
+ phone: 'phone',
67
+ email: 'email@reference.com'
68
+ } },
69
+ id: page.id,
70
+ answer_sheet_id: answer_sheet.id
71
+ }, xhr: true
72
+ }.to have_enqueued_job(Fe::UpdateReferenceSheetVisibilityJob)
73
+
74
+ expect(response).to render_template('fe/answer_pages/update')
75
+ expect(Fe::Answer.find_by(answer_sheet_id: answer_sheet.id, question_id: element.id).value).to eq('answer here')
76
+ expect(reference_sheet.reload.email).to eq('email@reference.com')
77
+ end
78
+
79
+ it 'should store a reference sheet answer' do
80
+ # create a normal applicant sheet to make sure the answer isn't saved to that
81
+ # ref
82
+ ref_page = create(:page, label: 'Ref Page')
83
+ ref_question_sheet = ref_page.question_sheet
84
+ ref_element = create(:text_field_element)
85
+ create(:page_element, element: ref_element, page: ref_page)
86
+ reference_question = create(:reference_question, related_question_sheet_id: ref_question_sheet.id)
87
+ reference_sheet = create(:reference_sheet, question_id: reference_question.id, applicant_answer_sheet_id: answer_sheet.id, email: 'initial@ref.com')
88
+
89
+ put :update, params: {
90
+ answers: { "#{ref_element.id}" => 'ref answer here' },
91
+ id: ref_page.id,
92
+ answer_sheet_id: reference_sheet.id,
93
+ answer_sheet_type: 'Fe::ReferenceSheet'
94
+ }, xhr: true
95
+
96
+ expect(response).to render_template('fe/answer_pages/update')
97
+ expect(Fe::Answer.find_by(answer_sheet_id: reference_sheet.id, question_id: ref_element.id).value).to eq('ref answer here')
98
+ expect(Fe::Answer.find_by(answer_sheet_id: answer_sheet.id, question_id: element.id)).to be_nil
99
+ # check the associations on reference/answer sheet returns the correct answers
100
+ expect(reference_sheet.reload.answers.collect(&:value)).to eq(['ref answer here'])
101
+ expect(answer_sheet.reload.answers).to eq([])
102
+ end
103
+ context 'when filling out a reference' do
104
+ it 'should not reset the reference even when the email changes' do
105
+ # ref
106
+ ref_page = create(:page, label: 'Ref Page')
107
+ ref_question_sheet = ref_page.question_sheet
108
+ ref_element = create(:text_field_element, object_name: 'answer_sheet', attribute_name: 'email')
109
+ create(:page_element, element: ref_element, page: ref_page)
110
+ reference_question = create(:reference_question, related_question_sheet_id: ref_question_sheet.id)
111
+ reference_sheet = create(:reference_sheet, question_id: reference_question.id, applicant_answer_sheet_id: answer_sheet.id, email: 'initial@ref.com')
112
+ reference_sheet.generate_access_key
113
+ reference_sheet.save!
114
+ key_before = reference_sheet.access_key
115
+
116
+ put :update, params: {
117
+ answers: { "#{ref_element.id}" => 'other@email.com' },
118
+ id: ref_page.id,
119
+ answer_sheet_id: reference_sheet.id,
120
+ answer_sheet_type: 'Fe::ReferenceSheet',
121
+ a: reference_sheet.access_key
122
+ }, xhr: true
123
+
124
+ expect(response).to render_template('fe/answer_pages/update')
125
+ reference_sheet.reload
126
+ expect(reference_sheet.email).to eq('other@email.com')
127
+ # make sure the access key isn't reset
128
+ expect(reference_sheet.access_key).to eq(key_before)
129
+ end
130
+ end
131
+ end
4
132
  end
@@ -1,4 +1,139 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe Fe::AnswerSheetsController do
3
+ describe Fe::AnswerSheetsController, type: :controller do
4
+ let(:question_sheet) { create(:question_sheet) }
5
+ let(:answer_sheet) { create(:answer_sheet, applicant_id: create(:fe_person).id) }
6
+
7
+ context '#index' do
8
+ it 'should work' do
9
+ create(:answer_sheet_question_sheet, question_sheet: question_sheet, answer_sheet: answer_sheet)
10
+
11
+ get :index
12
+ expect(assigns(:answer_sheets).to_a).to eq([answer_sheet])
13
+ end
14
+ end
15
+ context '#create' do
16
+ it 'should work' do
17
+ create(:answer_sheet_question_sheet, question_sheet: question_sheet, answer_sheet: answer_sheet)
18
+
19
+ post :create, params: {question_sheet_id: question_sheet.id}
20
+ expect(assigns(:answer_sheet)).to_not be_nil
21
+ end
22
+ end
23
+ context '#edit' do
24
+ it 'should work' do
25
+ create(:answer_sheet_question_sheet, question_sheet: question_sheet, answer_sheet: answer_sheet)
26
+ page = create(:page, question_sheet: question_sheet)
27
+
28
+ get :edit, params: {id: answer_sheet.id}
29
+ expect(assigns(:elements)).to eq([])
30
+ expect(assigns(:page)).to eq(page)
31
+ end
32
+ context 'when the question_sheet is blank' do
33
+ context 'when referrer is available' do
34
+ it 'should redirect to referrer' do
35
+ create(:answer_sheet_question_sheet, question_sheet: question_sheet, answer_sheet: answer_sheet)
36
+ request.env['HTTP_REFERER'] = '/referrer'
37
+
38
+ get :edit, params: {id: answer_sheet.id}
39
+ expect(response).to redirect_to('http://test.host/referrer')
40
+ end
41
+ end
42
+ context 'when referrer is not available' do
43
+ it 'should render an empty page with a flash message' do
44
+ create(:answer_sheet_question_sheet, question_sheet: question_sheet, answer_sheet: answer_sheet)
45
+
46
+ get :edit, params: {id: answer_sheet.id}
47
+ expect(response.body['Sorry, there are no questions for this form yet.']).to_not be_nil
48
+ end
49
+ end
50
+ end
51
+ end
52
+ context '#show' do
53
+ let(:page) { create(:page, question_sheet: question_sheet) }
54
+ let(:el_confidential) { create(:text_field_element, is_confidential: true) }
55
+ let(:el_visible) { create(:text_field_element, is_confidential: false) }
56
+
57
+ before do
58
+ answer_sheet.question_sheets << question_sheet
59
+ end
60
+
61
+ it 'should work' do
62
+ text_field = create(:text_field_element)
63
+ page.elements << text_field
64
+
65
+ get :show, params: {id: answer_sheet.id}
66
+ expect(assigns(:elements)).to eq(page => [text_field])
67
+ end
68
+ context 'filtering' do
69
+ let(:el_confidential) { create(:text_field_element, is_confidential: true) }
70
+ let(:el_visible) { create(:text_field_element, is_confidential: false) }
71
+ let(:el_visible2) { create(:text_field_element, is_confidential: false) }
72
+
73
+ before do
74
+ page.elements << el_confidential << el_visible << el_visible2
75
+ end
76
+
77
+ it 'should filter out elements' do
78
+ allow_any_instance_of(Fe::AnswerSheetsController).to receive(:get_filter).and_return(filter_default: :show, filter: [ :is_confidential ])
79
+
80
+ get :show, params: {id: answer_sheet.id}
81
+ expect(assigns(:elements)).to eq(page => [el_visible, el_visible2])
82
+ end
83
+ it 'should filter in elements' do
84
+ allow_any_instance_of(Fe::AnswerSheetsController).to receive(:get_filter).and_return(filter_default: :hide, filter: [ :is_confidential ])
85
+
86
+ get :show, params: {id: answer_sheet.id}
87
+ expect(assigns(:elements)).to eq(page => [el_confidential])
88
+ end
89
+ end
90
+ context 'element on multiple pages' do
91
+ let!(:question_sheet2) { create(:question_sheet) }
92
+ let!(:page2) { create(:page, question_sheet: question_sheet2) }
93
+
94
+ it 'should pull the right page' do
95
+ text_field = create(:text_field_element)
96
+ page.elements << text_field
97
+ page2.elements << text_field
98
+
99
+ get :show, params: {id: answer_sheet.id}
100
+ expect(assigns(:elements)).to eq(page => [text_field])
101
+ end
102
+ end
103
+ end
104
+ context '#send_reference_invite' do
105
+ it 'should work' do
106
+ create(:answer_sheet_question_sheet, question_sheet: question_sheet, answer_sheet: answer_sheet)
107
+ page = create(:page, question_sheet: question_sheet)
108
+ ref_question = create(:reference_element)
109
+ create(:page_element, element: ref_question, page: page)
110
+ ref_sheet = create(:reference_sheet, applicant_answer_sheet: answer_sheet, question: ref_question)
111
+ create(:email_template, name: 'Reference Invite')
112
+ create(:email_template, name: 'Reference Notification to Applicant')
113
+
114
+ post :send_reference_invite, params: {
115
+ reference: {
116
+ ref_sheet.id.to_s => {
117
+ relationship: 'rel', title: 'title', first_name: 'first_name',
118
+ last_name: 'last_name', phone: 'phone', email: 'email@email.com' }
119
+ },
120
+ reference_id: ref_sheet.id, id: answer_sheet.id
121
+ }, xhr: true
122
+ ref_sheet.reload
123
+ expect(ref_sheet.relationship).to eq('rel')
124
+ expect(ref_sheet.title).to eq('title')
125
+ expect(ref_sheet.first_name).to eq('first_name')
126
+ expect(ref_sheet.last_name).to eq('last_name')
127
+ expect(ref_sheet.phone).to eq('phone')
128
+ expect(ref_sheet.email).to eq('email@email.com')
129
+ end
130
+ end
131
+ context '#pages' do
132
+ it 'filters out hidden pages' do
133
+ create(:answer_sheet_question_sheet, question_sheet: question_sheet, answer_sheet: answer_sheet)
134
+ page = create(:page, question_sheet: question_sheet)
135
+ page2 = create(:page, question_sheet: question_sheet, hidden: true)
136
+ expect(answer_sheet.pages).to eq([page])
137
+ end
138
+ end
4
139
  end
@@ -0,0 +1,4 @@
1
+ require 'rails_helper'
2
+
3
+ describe Fe::ReferencePages do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'rails_helper'
2
+
3
+ describe Fe::ReferencesController do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'rails_helper'
2
+
3
+ describe Fe::SubmitPagesController do
4
+ end
File without changes
@@ -2,4 +2,9 @@ class ApplicationController < ActionController::Base
2
2
  # Prevent CSRF attacks by raising an exception.
3
3
  # For APIs, you may want to use :null_session instead.
4
4
  protect_from_forgery with: :exception
5
+
6
+ protected
7
+
8
+ def check_valid_user
9
+ end
5
10
  end
@@ -1,2 +1,11 @@
1
1
  module ApplicationHelper
2
+ # apps will define their own implementation of this, to facilitate tests running just allow anyone
3
+ def user_signed_in?
4
+ true
5
+ end
6
+
7
+ # apps will define their own implementation of this, to facilitate tests running just allow anyone
8
+ def destroy_user_session_path
9
+ "/sessions/destroy"
10
+ end
2
11
  end
@@ -0,0 +1,3 @@
1
+ class Application < Fe::Application
2
+ belongs_to :applicant, class_name: "Person"
3
+ end
@@ -0,0 +1,11 @@
1
+ class Person < Fe::Person
2
+ belongs_to :user
3
+ has_many :applications, class_name: Fe.answer_sheet_class, foreign_key: :applicant_id
4
+
5
+ def application
6
+ applications.first
7
+ end
8
+ def application=(val)
9
+ applications << val unless applications.include?(val)
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ class User < ApplicationRecord
2
+ has_one :person
3
+ end
@@ -2,8 +2,8 @@
2
2
  <html>
3
3
  <head>
4
4
  <title>Dummy</title>
5
- <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
6
- <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
5
+ <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
6
+ <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
7
7
  <%= csrf_meta_tags %>
8
8
  </head>
9
9
  <body>
@@ -1,3 +1,4 @@
1
+ require 'uri'
1
2
  require File.expand_path('../boot', __FILE__)
2
3
 
3
4
  # Pick the frameworks you want:
@@ -23,7 +24,8 @@ module Dummy
23
24
 
24
25
  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
25
26
  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
26
- # config.i18n.default_locale = :de
27
+ config.i18n.default_locale = :en
28
+ config.action_view.raise_on_missing_translations = false
27
29
  end
28
30
  end
29
31
 
@@ -1,25 +1,28 @@
1
- # SQLite version 3.x
2
- # gem install sqlite3
3
- #
4
- # Ensure the SQLite 3 gem is defined in your Gemfile
5
- # gem 'sqlite3'
6
- #
7
- default: &default
8
- adapter: sqlite3
1
+ mysql: &mysql
2
+ adapter: mysql<%= "2" unless ( ENV["TRAVIS_RUBY_VERSION"].include? "j" if ENV["TRAVIS_RUBY_VERSION"] ) %>
3
+ username: root
4
+ password:
5
+
6
+ postgresql: &postgresql
7
+ adapter: postgresql
8
+ username: postgres
9
+ password:
10
+ min_messages: ERROR
11
+
12
+ defaults: &defaults
9
13
  pool: 5
10
14
  timeout: 5000
15
+ host: localhost
16
+ <<: *<%= ENV['DB'] || "mysql" %>
11
17
 
12
18
  development:
13
- <<: *default
14
- database: db/development.sqlite3
19
+ database: fe_dev
20
+ <<: *defaults
15
21
 
16
- # Warning: The database defined as "test" will be erased and
17
- # re-generated from your development database when you run "rake".
18
- # Do not set this db to the same as development or production.
19
22
  test:
20
- <<: *default
21
- database: db/test.sqlite3
23
+ database: fe_test
24
+ <<: *defaults
22
25
 
23
26
  production:
24
- <<: *default
25
- database: db/production.sqlite3
27
+ database: fe_prod
28
+ <<: *defaults
@@ -32,7 +32,7 @@ Rails.application.configure do
32
32
  # Generate digests for assets URLs.
33
33
  config.assets.digest = true
34
34
 
35
- # `config.assets.precompile` has moved to config/initializers/assets.rb
35
+ # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
36
36
 
37
37
  # Specifies the header that your server uses for sending files.
38
38
  # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
@@ -56,10 +56,6 @@ Rails.application.configure do
56
56
  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
57
57
  # config.action_controller.asset_host = "http://assets.example.com"
58
58
 
59
- # Precompile additional assets.
60
- # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
61
- # config.assets.precompile += %w( search.js )
62
-
63
59
  # Ignore bad email addresses and do not raise email delivery errors.
64
60
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
65
61
  # config.action_mailer.raise_delivery_errors = false
@@ -13,8 +13,8 @@ Rails.application.configure do
13
13
  config.eager_load = false
14
14
 
15
15
  # Configure static asset server for tests with Cache-Control for performance.
16
- config.serve_static_assets = true
17
- config.static_cache_control = 'public, max-age=3600'
16
+ config.public_file_server.enabled = true
17
+ config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' }
18
18
 
19
19
  # Show full error reports and disable caching.
20
20
  config.consider_all_requests_local = true
@@ -36,4 +36,6 @@ Rails.application.configure do
36
36
 
37
37
  # Raises error for missing translations
38
38
  # config.action_view.raise_on_missing_translations = true
39
+
40
+ config.action_mailer.default_url_options = { host: 'test.com' }
39
41
  end
@@ -4,5 +4,8 @@
4
4
  Rails.application.config.assets.version = '1.0'
5
5
 
6
6
  # Precompile additional assets.
7
- # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
8
- # Rails.application.config.assets.precompile += %w( search.js )
7
+
8
+ # javascripts
9
+ Rails.application.config.assets.precompile += %w(fe/fe.public.js)
10
+ # images
11
+ Rails.application.config.assets.precompile += %w(fe/ajax-loader.gif fe/status.gif fe/icons/question-balloon.png)
@@ -0,0 +1,5 @@
1
+ FastGettext.add_text_domain 'app', path: 'locale', type: :po
2
+ FastGettext.default_available_locales = ['en', 'fr'] #all you want to allow
3
+ FastGettext.default_text_domain = 'app'
4
+ FastGettext.locale = 'en'
5
+ I18n.backend = I18n::Backend::Chain.new(GettextI18nRails::Backend.new, I18n.backend)
@@ -0,0 +1,5 @@
1
+ class Hash
2
+ def to_unsafe_h
3
+ self
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class Hash
2
+ def to_unsafe_h
3
+ self
4
+ end
5
+ end
@@ -11,10 +11,10 @@
11
11
  # if you're sharing your code publicly.
12
12
 
13
13
  development:
14
- secret_key_base: 4c4dbf94a427eb6648bcf5d0ceee9735494fb8c05b3da4dcf5351573b07e3c9cf4dcb236e552ae525f0c53408b1c5fcbb5f8714fba8a1133ee6d5af8c46e708b
14
+ secret_key_base: 613f7a6dfc25927231de971f1e695b8660ef741aad76edba571d2401be7849a46d5272b34c7d05cc06a9372aafafda3e444f9c430a3734c816975d9da328d808
15
15
 
16
16
  test:
17
- secret_key_base: 82e472cce2f166e5518ca8e743e5fa872e481940b342280ed65abc058a9b64783b149e6ecbeeca224f96049cafb521be2bbffec1ee80d2daee63844bea002445
17
+ secret_key_base: d464adcbe289a6e1ccf10e9e52739cb066f7732242cb7274da4332bd453689e3c07a4f105a66d1bd075dfc08ff23fe82309524bac6e9b7976b39e94690ae77e7
18
18
 
19
19
  # Do not keep production secrets in the repository,
20
20
  # instead read values from the environment.
@@ -0,0 +1,92 @@
1
+ # This migration comes from fe_engine (originally 20131003041856)
2
+ class Core < ActiveRecord::Migration[4.2]
3
+ def change
4
+ create_table Fe::QuestionSheet.table_name do |t|
5
+ t.string :label, limit: 100, null: false # name used internally in admin
6
+ t.boolean :archived, default: false, nil: false
7
+ t.timestamps
8
+ end
9
+
10
+ create_table Fe.answer_sheet_class.constantize.table_name do |t|
11
+ t.integer :applicant_id
12
+ t.string :status
13
+ t.datetime :submitted_at
14
+ t.timestamps
15
+ end
16
+
17
+ add_index Fe.answer_sheet_class.constantize.table_name, :applicant_id, name: 'question_sheet_id'
18
+
19
+ create_table Fe::Page.table_name do |t|
20
+ t.integer :question_sheet_id, null: false
21
+ t.string :label, limit: 60, null: false # page title
22
+ t.integer :number # page number (order)
23
+ t.boolean :no_cache, default: false
24
+ t.boolean :hidden, default: false
25
+ t.timestamps
26
+ end
27
+
28
+ create_table Fe::Element.table_name do |t|
29
+ t.integer :question_grid_id, null: true
30
+ t.string :kind, limit: 40, null: false # single table inheritance: class name
31
+ t.string :style, limit: 40 # render style
32
+ t.string :label, limit: 255 # question label, section heading
33
+ t.text :content, null: true # for content/instructions, and for choices (one per line)
34
+ t.boolean :required # question is required?
35
+ t.string :slug, limit: 36 # variable reference
36
+ t.integer :position
37
+ t.string :object_name, :attribute_name
38
+ t.string :source
39
+ t.string :value_xpath
40
+ t.string :text_xpath
41
+ t.string :cols
42
+ t.boolean :is_confidential, default: false
43
+ t.string :total_cols
44
+ t.string :css_id
45
+ t.string :css_class
46
+ t.integer :question_sheet_id, null: false
47
+ t.timestamps
48
+ end
49
+ add_index Fe::Element.table_name, :slug
50
+
51
+ create_table Fe::PageElement.table_name do |t|
52
+ t.integer :page_id
53
+ t.integer :element_id
54
+ t.integer :position
55
+ t.timestamps
56
+ end
57
+
58
+ add_index Fe::PageElement.table_name, [:page_id, :element_id], name: 'page_element'
59
+
60
+
61
+ create_table Fe::Answer.table_name do |t|
62
+ t.integer :answer_sheet_id, null: false
63
+ t.integer :question_id, null: false
64
+ t.text :value
65
+ t.string :short_value, null: true, limit: 255 # indexed copy of :value
66
+ # paperclip columns
67
+ t.integer :attachment_file_size
68
+ t.string :attachment_content_type
69
+ t.string :attachment_file_name
70
+ t.datetime :attachment_updated_at
71
+ t.timestamps
72
+ end
73
+
74
+ add_index Fe::Answer.table_name, :short_value
75
+ add_index Fe::Answer.table_name, [:answer_sheet_id, :question_id], name: 'answer_sheet_question'
76
+
77
+ create_table Fe::Condition.table_name do |t|
78
+ t.integer :question_sheet_id, null: false
79
+ t.integer :trigger_id, null: false
80
+ t.string :expression, null: false, limit: 255
81
+ t.integer :toggle_page_id, null: false
82
+ t.integer :toggle_id, null: true # null if toggles whole page
83
+ t.timestamps
84
+ end
85
+
86
+ add_index Fe::Condition.table_name, :question_sheet_id
87
+ add_index Fe::Condition.table_name, :trigger_id
88
+ add_index Fe::Condition.table_name, :toggle_page_id
89
+ add_index Fe::Condition.table_name, :toggle_id
90
+
91
+ end
92
+ end
@@ -0,0 +1,25 @@
1
+ # This migration comes from fe_engine (originally 20131003044250)
2
+ class CreateReferenceSheets < ActiveRecord::Migration[4.2]
3
+ def change
4
+ create_table Fe::ReferenceSheet.table_name do |t|
5
+ t.integer :question_id
6
+ t.integer :applicant_answer_sheet_id
7
+ t.datetime :email_sent_at
8
+ t.string :relationship
9
+ t.string :title
10
+ t.string :first_name
11
+ t.string :last_name
12
+ t.string :phone
13
+ t.string :email
14
+ t.string :status
15
+ t.datetime :submitted_at
16
+ t.datetime :started_at
17
+ t.string :access_key
18
+ t.timestamps
19
+ end
20
+
21
+ add_column Fe::Element.table_name, :related_question_sheet_id, :integer
22
+ add_index Fe::ReferenceSheet.table_name, :question_id
23
+ add_index Fe::ReferenceSheet.table_name, :applicant_answer_sheet_id
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ # This migration comes from fe_engine (originally 20131003044436)
2
+ class AddElementAndAnswerFields < ActiveRecord::Migration[4.2]
3
+ def change
4
+ add_column Fe::Element.table_name, :conditional_id, :integer
5
+ add_column Fe::Element.table_name, :tooltip, :text
6
+ add_column Fe::Element.table_name, :hide_label, :boolean, default: false, nil: false
7
+ add_column Fe::Element.table_name, :hide_option_labels, :boolean, default: false, nil: false
8
+
9
+ #add_index Fe::Element.table_name, :conditional_id
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ # This migration comes from fe_engine (originally 20131003044518)
2
+ class CreateEmailTemplates < ActiveRecord::Migration[4.2]
3
+ def up
4
+ create_table Fe::EmailTemplate.table_name do |t|
5
+ t.string :name, limit: 1000, null: false
6
+ t.text :content
7
+ t.boolean :enabled
8
+ t.string :subject
9
+
10
+ t.timestamps
11
+ end
12
+ # add_index Fe::EmailTemplate.table_name, :name
13
+ end
14
+
15
+ def down
16
+ remove_table Fe::EmailTemplate.table_name
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ # This migration comes from fe_engine (originally 20131003044621)
2
+ class AddMaxLengths < ActiveRecord::Migration[4.2]
3
+ def change
4
+ add_column Fe::Element.table_name, :max_length, :integer
5
+
6
+ add_index Fe::Element.table_name, :conditional_id
7
+ add_index Fe::Element.table_name, :question_grid_id
8
+ end
9
+ end