studium 0.13.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of studium might be problematic. Click here for more details.

Files changed (871) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +2785 -0
  3. data/bin/ask_exam_question +7 -0
  4. data/bin/check_description_of_these_lectures +7 -0
  5. data/bin/curriculum_module_displayer +7 -0
  6. data/bin/cycle +7 -0
  7. data/bin/d10 +7 -0
  8. data/bin/d100 +7 -0
  9. data/bin/d15 +7 -0
  10. data/bin/d20 +7 -0
  11. data/bin/d25 +7 -0
  12. data/bin/d3 +7 -0
  13. data/bin/d30 +7 -0
  14. data/bin/d5 +7 -0
  15. data/bin/determine_curricula +7 -0
  16. data/bin/display_lecture_url +7 -0
  17. data/bin/exam_registration_at +7 -0
  18. data/bin/exam_statistics +7 -0
  19. data/bin/exams_per_month +9 -0
  20. data/bin/finished_exams_at_this_university +7 -0
  21. data/bin/flashcards +7 -0
  22. data/bin/from_curriculum_id_to_university +9 -0
  23. data/bin/location_to_this_exam_topic.rb +7 -0
  24. data/bin/mandatory_continuous_assessment +7 -0
  25. data/bin/mandatory_upcoming_courses +7 -0
  26. data/bin/n_ECTS +7 -0
  27. data/bin/n_exam_questions_already_answered +16 -0
  28. data/bin/nquestions +7 -0
  29. data/bin/nsolved +7 -0
  30. data/bin/open_last_exam_question_asked_file +7 -0
  31. data/bin/passed_exams +7 -0
  32. data/bin/passed_pr/303/274fungsimmanente_courses +7 -0
  33. data/bin/pdf_for +7 -0
  34. data/bin/random_exam_topic +7 -0
  35. data/bin/report_solved_topics +7 -0
  36. data/bin/return_n_ects_from_this_file +7 -0
  37. data/bin/search_for_n_ects +7 -0
  38. data/bin/show_lectures_on_the_commandline +7 -0
  39. data/bin/show_themes +7 -0
  40. data/bin/solved +9 -0
  41. data/bin/solved_ects +7 -0
  42. data/bin/studienkennzahl +7 -0
  43. data/bin/studium +7 -0
  44. data/bin/studium_skeleton +7 -0
  45. data/bin/ufind +7 -0
  46. data/bin/upcoming_exams +7 -0
  47. data/bin/week_parser +7 -0
  48. data/doc/ECTS_CONSIDERATIONS.md +81 -0
  49. data/doc/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER.md +44 -0
  50. data/doc/README.gen +2742 -0
  51. data/doc/SQL_database_specification.md +46 -0
  52. data/doc/deprecated_components.md +24 -0
  53. data/doc/documentation_for_the_file_lecture_information.md +311 -0
  54. data/doc/elegant_colours.md +21 -0
  55. data/doc/todo/TODO_FOR_STUDIUM_GEM.md +112 -0
  56. data/doc/todo/TODO_FOR_THE_GRAPHICAL_PARTS_OF_THE_STUDIUM_GEM_INCLUDING_WWW_RELATED_ASPECTS.md +35 -0
  57. data/img/STUDIES.png +0 -0
  58. data/lib/studium/autoinclude.rb +7 -0
  59. data/lib/studium/base/base.rb +2710 -0
  60. data/lib/studium/base/prototype.rb +543 -0
  61. data/lib/studium/c/README.md +2 -0
  62. data/lib/studium/c/a.out +0 -0
  63. data/lib/studium/c/obtain_random_entry.c +11 -0
  64. data/lib/studium/check_and_sanitize/README.md +11 -0
  65. data/lib/studium/check_and_sanitize/check_curriculum_for_correct_separation_of_bachelor_and_master.rb +141 -0
  66. data/lib/studium/check_and_sanitize/check_for_all_exam_topics_being_registered.rb +110 -0
  67. data/lib/studium/check_and_sanitize/check_for_correct_themes_of_each_course.rb +90 -0
  68. data/lib/studium/check_and_sanitize/check_for_existing_description_of_this_lecture.rb +189 -0
  69. data/lib/studium/check_and_sanitize/check_the_lecture_information_file.rb +163 -0
  70. data/lib/studium/check_and_sanitize/find_duplicate_lectures.rb +115 -0
  71. data/lib/studium/check_and_sanitize/missing_priority_entry.rb +44 -0
  72. data/lib/studium/check_and_sanitize/sanitize_this_string_containing_the_lva_dates.rb +79 -0
  73. data/lib/studium/colours/colours.rb +549 -0
  74. data/lib/studium/colours/sfancy.rb +46 -0
  75. data/lib/studium/colours/sfile.rb +35 -0
  76. data/lib/studium/colours/simp.rb +40 -0
  77. data/lib/studium/colours/use_colours.rb +39 -0
  78. data/lib/studium/colours/use_this_colour_for_exam_questions_and_exam_answers.rb +80 -0
  79. data/lib/studium/commandline/commandline.rb +932 -0
  80. data/lib/studium/commandline/menu.rb +903 -0
  81. data/lib/studium/constants/colours.rb +14 -0
  82. data/lib/studium/constants/constants.rb +2142 -0
  83. data/lib/studium/constants/image_constants.rb +217 -0
  84. data/lib/studium/constants/web_constants.rb +25 -0
  85. data/lib/studium/css/project.css +267 -0
  86. data/lib/studium/curricula/curriculum.rb +210 -0
  87. data/lib/studium/curricula/curriculum_as_string.rb +280 -0
  88. data/lib/studium/curricula/curriculum_module_displayer/constants.rb +33 -0
  89. data/lib/studium/curricula/curriculum_module_displayer/curriculum_module_displayer.rb +417 -0
  90. data/lib/studium/curricula/curriculum_module_displayer/initialize.rb +25 -0
  91. data/lib/studium/curricula/curriculum_module_displayer/menu.rb +45 -0
  92. data/lib/studium/curricula/curriculum_module_displayer/reset.rb +74 -0
  93. data/lib/studium/curricula/curriculum_module_displayer/run.rb +20 -0
  94. data/lib/studium/curricula/curriculum_module_displayer/set_use_this_curriculum.rb +93 -0
  95. data/lib/studium/curricula/curriculum_module_displayer/show_and_report.rb +190 -0
  96. data/lib/studium/curricula/determine_curricula/constants.rb +11 -0
  97. data/lib/studium/curricula/determine_curricula/determine_curricula.rb +36 -0
  98. data/lib/studium/curricula/determine_curricula/help.rb +39 -0
  99. data/lib/studium/curricula/determine_curricula/initialize.rb +48 -0
  100. data/lib/studium/curricula/determine_curricula/menu.rb +151 -0
  101. data/lib/studium/curricula/determine_curricula/misc.rb +403 -0
  102. data/lib/studium/curricula/determine_curricula/report.rb +143 -0
  103. data/lib/studium/curricula/determine_curricula/reset.rb +59 -0
  104. data/lib/studium/curricula/determine_curricula/run.rb +19 -0
  105. data/lib/studium/curricula/determine_elective_courses_in_this_curriculum.rb +112 -0
  106. data/lib/studium/curricula/display_bachelor_curricula.rb +90 -0
  107. data/lib/studium/curricula/mitteilungsbl/303/244tter/mitteilungsbl/303/244tter.rb +324 -0
  108. data/lib/studium/curricula/modules/display_on_the_commandline.rb +319 -0
  109. data/lib/studium/curricula/modules/return_n_ects_in_this_module.rb +75 -0
  110. data/lib/studium/curricula/n_percent_solved_in_this_curriculum.rb +75 -0
  111. data/lib/studium/curricula/prepare_individual_curriculum.rb +304 -0
  112. data/lib/studium/curricula/random_curriculum_creator/random_curriculum_creator.rb +163 -0
  113. data/lib/studium/curricula/show_lectures_of_this_curriculum.rb +114 -0
  114. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/constants.rb +11 -0
  115. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/initialize.rb +27 -0
  116. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/menu.rb +35 -0
  117. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/misc.rb +264 -0
  118. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/report.rb +163 -0
  119. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/reset.rb +64 -0
  120. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/show_lectures_of_this_curriculum_id.rb +38 -0
  121. data/lib/studium/curricula/show_solved_percentage_among_the_registered_curricula.rb +87 -0
  122. data/lib/studium/ects/boku_ects_splitter.rb +128 -0
  123. data/lib/studium/ects/ects_per_university.rb +179 -0
  124. data/lib/studium/ects/ects_scanner.rb +141 -0
  125. data/lib/studium/ects/ects_to_university_parser.rb +142 -0
  126. data/lib/studium/ects/last_entry_is_curriculum.rb +150 -0
  127. data/lib/studium/ects/n_ects_in_these_lectures.rb +196 -0
  128. data/lib/studium/ects/n_ects_points_in_mandatory_presence_courses.rb +50 -0
  129. data/lib/studium/ects/return_n_ects_from_this_file.rb +59 -0
  130. data/lib/studium/ects/return_n_ects_from_this_url.rb +196 -0
  131. data/lib/studium/ects/search_for_n_ects.rb +614 -0
  132. data/lib/studium/ects/show_completed_ects_in_all_curricula.rb +191 -0
  133. data/lib/studium/ects/show_passed_credits_per_curriculum.rb +276 -0
  134. data/lib/studium/ects/simple_total_ects_points.rb +135 -0
  135. data/lib/studium/ects/solved_ects/constants.rb +19 -0
  136. data/lib/studium/ects/solved_ects/reset.rb +51 -0
  137. data/lib/studium/ects/solved_ects/solved_ects.rb +325 -0
  138. data/lib/studium/ects/solved_ects_per_university/reset.rb +25 -0
  139. data/lib/studium/ects/solved_ects_per_university/solved_ects_per_university.rb +106 -0
  140. data/lib/studium/ects/still_missing.rb +129 -0
  141. data/lib/studium/ects/sum_of_ects.rb +144 -0
  142. data/lib/studium/encoding/encoding.rb +108 -0
  143. data/lib/studium/exam_topics/RNAi_siRNA_and_miRNA +86 -0
  144. data/lib/studium/exam_topics/abfall_als_ressource +86 -0
  145. data/lib/studium/exam_topics/advanced_biochemistry +781 -0
  146. data/lib/studium/exam_topics/advanced_biotechnology +214 -0
  147. data/lib/studium/exam_topics/advanced_cellbiology +27 -0
  148. data/lib/studium/exam_topics/advanced_chemistry +504 -0
  149. data/lib/studium/exam_topics/advanced_microbiology +43 -0
  150. data/lib/studium/exam_topics/advanced_topics_in_plant_sciences +85 -0
  151. data/lib/studium/exam_topics/advanced_virology +218 -0
  152. data/lib/studium/exam_topics/ageing +114 -0
  153. data/lib/studium/exam_topics/agrar_ecology +63 -0
  154. data/lib/studium/exam_topics/agrarmarkt +71 -0
  155. data/lib/studium/exam_topics/agrarphysik +35 -0
  156. data/lib/studium/exam_topics/alcohols +29 -0
  157. data/lib/studium/exam_topics/algorithms +52 -0
  158. data/lib/studium/exam_topics/allergie +75 -0
  159. data/lib/studium/exam_topics/allgemeine_genetik +1006 -0
  160. data/lib/studium/exam_topics/allgemeine_mikrobiologie +946 -0
  161. data/lib/studium/exam_topics/aminoacids +438 -0
  162. data/lib/studium/exam_topics/analytische_chemie_1 +132 -0
  163. data/lib/studium/exam_topics/analytische_chemie_2 +31 -0
  164. data/lib/studium/exam_topics/anatomie +290 -0
  165. data/lib/studium/exam_topics/anorganische_chemie +311 -0
  166. data/lib/studium/exam_topics/anthropologie +116 -0
  167. data/lib/studium/exam_topics/antibodies_and_antigens +764 -0
  168. data/lib/studium/exam_topics/apoptosis +35 -0
  169. data/lib/studium/exam_topics/archaea +60 -0
  170. data/lib/studium/exam_topics/architecture +8 -0
  171. data/lib/studium/exam_topics/artificial_intelligence +81 -0
  172. data/lib/studium/exam_topics/atomemissionsspektrometrie +6 -0
  173. data/lib/studium/exam_topics/audio +11 -0
  174. data/lib/studium/exam_topics/bacteriophages +240 -0
  175. data/lib/studium/exam_topics/basic_biochemistry +1002 -0
  176. data/lib/studium/exam_topics/basic_biotechnology +1001 -0
  177. data/lib/studium/exam_topics/basic_chemistry +1007 -0
  178. data/lib/studium/exam_topics/basic_virology +1008 -0
  179. data/lib/studium/exam_topics/bauwesen +6 -0
  180. data/lib/studium/exam_topics/betriebssysteme +126 -0
  181. data/lib/studium/exam_topics/betriebswirtschaftslehre +29 -0
  182. data/lib/studium/exam_topics/bioanalytik_und_biosensoren +382 -0
  183. data/lib/studium/exam_topics/biochips +78 -0
  184. data/lib/studium/exam_topics/bioelektrochemie +57 -0
  185. data/lib/studium/exam_topics/biofilms +22 -0
  186. data/lib/studium/exam_topics/bioinformatics +503 -0
  187. data/lib/studium/exam_topics/biological_therapeutics +153 -0
  188. data/lib/studium/exam_topics/biologie +137 -0
  189. data/lib/studium/exam_topics/biomarkers +106 -0
  190. data/lib/studium/exam_topics/biomaterials +89 -0
  191. data/lib/studium/exam_topics/biomembranes +6 -0
  192. data/lib/studium/exam_topics/bionik +65 -0
  193. data/lib/studium/exam_topics/biophysik +34 -0
  194. data/lib/studium/exam_topics/biopolymers +10 -0
  195. data/lib/studium/exam_topics/bioprozesstechnik +149 -0
  196. data/lib/studium/exam_topics/bioressourcenmanagement +78 -0
  197. data/lib/studium/exam_topics/bodenkunde +373 -0
  198. data/lib/studium/exam_topics/bodenmikrobiologie +40 -0
  199. data/lib/studium/exam_topics/cancerbiology +442 -0
  200. data/lib/studium/exam_topics/cell_cultures +155 -0
  201. data/lib/studium/exam_topics/cellbiology +995 -0
  202. data/lib/studium/exam_topics/cellular_transport_and_protein_secretion +27 -0
  203. data/lib/studium/exam_topics/cellulose +6 -0
  204. data/lib/studium/exam_topics/chemische_technologie_anorganischer_stoffe +209 -0
  205. data/lib/studium/exam_topics/chemische_technologie_organischer_stoffe +25 -0
  206. data/lib/studium/exam_topics/chemisches_labor +60 -0
  207. data/lib/studium/exam_topics/chemotaxis_and_motility_in_prokaryotes +87 -0
  208. data/lib/studium/exam_topics/citric_acid_cycle +80 -0
  209. data/lib/studium/exam_topics/clinical_microbiology +492 -0
  210. data/lib/studium/exam_topics/computer_graphics +5 -0
  211. data/lib/studium/exam_topics/computer_science +280 -0
  212. data/lib/studium/exam_topics/crispr +28 -0
  213. data/lib/studium/exam_topics/cyanobacteria +42 -0
  214. data/lib/studium/exam_topics/cytogenetics_and_chromosome_biology +551 -0
  215. data/lib/studium/exam_topics/cytokines +5 -0
  216. data/lib/studium/exam_topics/databases_and_sql +106 -0
  217. data/lib/studium/exam_topics/dna_mutation_and_dna_repair +35 -0
  218. data/lib/studium/exam_topics/dna_replication +56 -0
  219. data/lib/studium/exam_topics/ecogenetics +26 -0
  220. data/lib/studium/exam_topics/ecological_agriculture +12 -0
  221. data/lib/studium/exam_topics/ecology +314 -0
  222. data/lib/studium/exam_topics/economy +211 -0
  223. data/lib/studium/exam_topics/elektronenmikroskopie +354 -0
  224. data/lib/studium/exam_topics/elektrophorese +89 -0
  225. data/lib/studium/exam_topics/elektrotechnik_und_elektrizit/303/244t +41 -0
  226. data/lib/studium/exam_topics/elisa +54 -0
  227. data/lib/studium/exam_topics/embryologie_und_entwicklung +547 -0
  228. data/lib/studium/exam_topics/endospores_and_spores +104 -0
  229. data/lib/studium/exam_topics/enzymes_and_cofactors +345 -0
  230. data/lib/studium/exam_topics/epigenetik +179 -0
  231. data/lib/studium/exam_topics/ethik +138 -0
  232. data/lib/studium/exam_topics/evolution_and_evolutionary_genetics +328 -0
  233. data/lib/studium/exam_topics/excel +7 -0
  234. data/lib/studium/exam_topics/fish +19 -0
  235. data/lib/studium/exam_topics/fluorescence_microscopy +7 -0
  236. data/lib/studium/exam_topics/food_microbiology_and_food_biotechnology +71 -0
  237. data/lib/studium/exam_topics/forensik +11 -0
  238. data/lib/studium/exam_topics/forstwirtschaft +53 -0
  239. data/lib/studium/exam_topics/fortgeschrittene_genetik +511 -0
  240. data/lib/studium/exam_topics/fortgeschrittene_gentechnik +211 -0
  241. data/lib/studium/exam_topics/fortgeschrittene_physik +6 -0
  242. data/lib/studium/exam_topics/fungi +79 -0
  243. data/lib/studium/exam_topics/genetische_krankheiten +176 -0
  244. data/lib/studium/exam_topics/genexpression +1008 -0
  245. data/lib/studium/exam_topics/genomics_and_metagenomics +244 -0
  246. data/lib/studium/exam_topics/gentechnik_und_praktische_biochemie +901 -0
  247. data/lib/studium/exam_topics/geochemistry +67 -0
  248. data/lib/studium/exam_topics/geography +8 -0
  249. data/lib/studium/exam_topics/geologie_und_mineralogie +621 -0
  250. data/lib/studium/exam_topics/geometrie +47 -0
  251. data/lib/studium/exam_topics/geschichte +93 -0
  252. data/lib/studium/exam_topics/gluconeogenesis +59 -0
  253. data/lib/studium/exam_topics/glycogen +25 -0
  254. data/lib/studium/exam_topics/glycolysis +109 -0
  255. data/lib/studium/exam_topics/glykomik +100 -0
  256. data/lib/studium/exam_topics/glyoxylatzyklus +31 -0
  257. data/lib/studium/exam_topics/grassland_cultivation +32 -0
  258. data/lib/studium/exam_topics/hormone +134 -0
  259. data/lib/studium/exam_topics/html +7 -0
  260. data/lib/studium/exam_topics/human_ecology +8 -0
  261. data/lib/studium/exam_topics/hygiene +191 -0
  262. data/lib/studium/exam_topics/imaging_and_microscopy +241 -0
  263. data/lib/studium/exam_topics/immunanalytik +94 -0
  264. data/lib/studium/exam_topics/immunologie +982 -0
  265. data/lib/studium/exam_topics/informatik +97 -0
  266. data/lib/studium/exam_topics/innate_immunity +22 -0
  267. data/lib/studium/exam_topics/insekten +57 -0
  268. data/lib/studium/exam_topics/insulin_and_diabetes +57 -0
  269. data/lib/studium/exam_topics/java +502 -0
  270. data/lib/studium/exam_topics/javascript +12 -0
  271. data/lib/studium/exam_topics/klima +6 -0
  272. data/lib/studium/exam_topics/kryptographie +5 -0
  273. data/lib/studium/exam_topics/landtechnik +26 -0
  274. data/lib/studium/exam_topics/lebensmittel +208 -0
  275. data/lib/studium/exam_topics/lebensmitteltechnologie +16 -0
  276. data/lib/studium/exam_topics/linux +5 -0
  277. data/lib/studium/exam_topics/lipids +94 -0
  278. data/lib/studium/exam_topics/macroeconomics +40 -0
  279. data/lib/studium/exam_topics/mathematics +254 -0
  280. data/lib/studium/exam_topics/medizin_und_biomedizinische_technik +250 -0
  281. data/lib/studium/exam_topics/medizinische_chemie_und_pharmazie +398 -0
  282. data/lib/studium/exam_topics/messtechnik_und_regeltechnik +104 -0
  283. data/lib/studium/exam_topics/metabolismus +406 -0
  284. data/lib/studium/exam_topics/microbial_ecology +35 -0
  285. data/lib/studium/exam_topics/microcontrollers +11 -0
  286. data/lib/studium/exam_topics/mikrobielle_lebensgemeinschaften +33 -0
  287. data/lib/studium/exam_topics/mikrobielle_physiologie +172 -0
  288. data/lib/studium/exam_topics/mitochondria +32 -0
  289. data/lib/studium/exam_topics/mixed +278 -0
  290. data/lib/studium/exam_topics/molecular_biology_of_plants +242 -0
  291. data/lib/studium/exam_topics/molekulare_medizin +131 -0
  292. data/lib/studium/exam_topics/nanotechnologie +453 -0
  293. data/lib/studium/exam_topics/nature_conservation_and_biodiversity +166 -0
  294. data/lib/studium/exam_topics/naturstoffe +9 -0
  295. data/lib/studium/exam_topics/netzwerke +32 -0
  296. data/lib/studium/exam_topics/neurobiology +267 -0
  297. data/lib/studium/exam_topics/nucleotide_sequencing +32 -0
  298. data/lib/studium/exam_topics/nutztierethologie +11 -0
  299. data/lib/studium/exam_topics/object_oriented_modeling +14 -0
  300. data/lib/studium/exam_topics/obstbau +234 -0
  301. data/lib/studium/exam_topics/organische_chemie +1007 -0
  302. data/lib/studium/exam_topics/organische_chemie_2 +118 -0
  303. data/lib/studium/exam_topics/paleobiology +35 -0
  304. data/lib/studium/exam_topics/parasitic_diseases_and_molecular_infection_biology +335 -0
  305. data/lib/studium/exam_topics/patent_law +55 -0
  306. data/lib/studium/exam_topics/pathologie +717 -0
  307. data/lib/studium/exam_topics/pcr +144 -0
  308. data/lib/studium/exam_topics/pentosephosphatweg +41 -0
  309. data/lib/studium/exam_topics/peroxisomes_glycosomes_and_lysosomes +54 -0
  310. data/lib/studium/exam_topics/pflanzenanatomie +255 -0
  311. data/lib/studium/exam_topics/pflanzenbau +24 -0
  312. data/lib/studium/exam_topics/pflanzenschutz +35 -0
  313. data/lib/studium/exam_topics/pflanzenwissenschaften +1009 -0
  314. data/lib/studium/exam_topics/pharmaceutical_biotechnology +250 -0
  315. data/lib/studium/exam_topics/physik +433 -1
  316. data/lib/studium/exam_topics/physikalische_chemie +86 -0
  317. data/lib/studium/exam_topics/physiology_and_histology +506 -0
  318. data/lib/studium/exam_topics/phytochemie +33 -0
  319. data/lib/studium/exam_topics/plant_biotechnology +128 -0
  320. data/lib/studium/exam_topics/plant_breeding +64 -0
  321. data/lib/studium/exam_topics/plant_development +50 -0
  322. data/lib/studium/exam_topics/populationsgenetik +136 -0
  323. data/lib/studium/exam_topics/posttranslationale_modifikation_von_proteinen +191 -0
  324. data/lib/studium/exam_topics/projektmanagement +219 -0
  325. data/lib/studium/exam_topics/prokaryote_genetics +531 -0
  326. data/lib/studium/exam_topics/protein_engineering +8 -0
  327. data/lib/studium/exam_topics/proteolyse +33 -0
  328. data/lib/studium/exam_topics/proteomik +40 -0
  329. data/lib/studium/exam_topics/prozesstechnik +95 -0
  330. data/lib/studium/exam_topics/psychologie +13 -0
  331. data/lib/studium/exam_topics/python +353 -0
  332. data/lib/studium/exam_topics/quality_management +256 -0
  333. data/lib/studium/exam_topics/rechtsgrundlagen +115 -0
  334. data/lib/studium/exam_topics/research_topics_in_immunobiology +42 -0
  335. data/lib/studium/exam_topics/rna_and_dna +395 -0
  336. data/lib/studium/exam_topics/rna_seq +11 -0
  337. data/lib/studium/exam_topics/ruby +146 -0
  338. data/lib/studium/exam_topics/ruby_on_rails +63 -0
  339. data/lib/studium/exam_topics/scientific_writing_and_publishing +38 -0
  340. data/lib/studium/exam_topics/semisynthese_von_proteinen_und_nukleotiden +120 -0
  341. data/lib/studium/exam_topics/sexualbiologie +62 -0
  342. data/lib/studium/exam_topics/signal_transduction_and_laser_systems +167 -0
  343. data/lib/studium/exam_topics/splicing_exons_and_introns +63 -0
  344. data/lib/studium/exam_topics/statistik +233 -0
  345. data/lib/studium/exam_topics/stemcells +158 -0
  346. data/lib/studium/exam_topics/stickstofffixierung +75 -0
  347. data/lib/studium/exam_topics/structural_bioinformatics +54 -0
  348. data/lib/studium/exam_topics/strukturbiologie +380 -0
  349. data/lib/studium/exam_topics/system_biology_and_synthetic_biology +101 -0
  350. data/lib/studium/exam_topics/systematische_zoologie +433 -0
  351. data/lib/studium/exam_topics/technical_ecology +144 -0
  352. data/lib/studium/exam_topics/technische_chemie +202 -0
  353. data/lib/studium/exam_topics/technische_grundlagen_der_informatik +26 -0
  354. data/lib/studium/exam_topics/technische_mikrobiologie +393 -0
  355. data/lib/studium/exam_topics/technisches_zeichnen +5 -0
  356. data/lib/studium/exam_topics/the_bacterial_cell_wall +97 -0
  357. data/lib/studium/exam_topics/the_c_plus_plus_programming_language +489 -0
  358. data/lib/studium/exam_topics/the_c_programming_language +129 -0
  359. data/lib/studium/exam_topics/the_cellcycle +81 -0
  360. data/lib/studium/exam_topics/the_european_union +119 -0
  361. data/lib/studium/exam_topics/the_interferon_system +38 -0
  362. data/lib/studium/exam_topics/the_microbiome +163 -0
  363. data/lib/studium/exam_topics/the_universe +12 -0
  364. data/lib/studium/exam_topics/theoretische_chemie +5 -0
  365. data/lib/studium/exam_topics/theoretische_informatik +157 -0
  366. data/lib/studium/exam_topics/tierzucht +94 -0
  367. data/lib/studium/exam_topics/toxikologie +408 -0
  368. data/lib/studium/exam_topics/transcription +82 -0
  369. data/lib/studium/exam_topics/translation_ribosomes_and_translational_control +142 -0
  370. data/lib/studium/exam_topics/umweltbiotechnologie +63 -0
  371. data/lib/studium/exam_topics/umweltchemie +233 -0
  372. data/lib/studium/exam_topics/urbanism_and_traffic +19 -0
  373. data/lib/studium/exam_topics/urea_cycle +55 -0
  374. data/lib/studium/exam_topics/vaccines_and_vaccination +242 -0
  375. data/lib/studium/exam_topics/vectors_and_gene_therapy +240 -0
  376. data/lib/studium/exam_topics/verfahrenstechnik +32 -0
  377. data/lib/studium/exam_topics/veterinary_medicine +10 -0
  378. data/lib/studium/exam_topics/vitamine +24 -0
  379. data/lib/studium/exam_topics/wasserkunde +137 -0
  380. data/lib/studium/exam_topics/weinbau +59 -0
  381. data/lib/studium/exam_topics/wissenschaft +18 -0
  382. data/lib/studium/exam_topics/yeast +102 -0
  383. data/lib/studium/exam_topics/zoologie +330 -0
  384. data/lib/studium/exams/afterburn/afterburn.rb +257 -0
  385. data/lib/studium/exams/ask_exam_from_the_upcoming_exams_pool.rb +150 -0
  386. data/lib/studium/exams/ask_exam_topic_question.rb +112 -0
  387. data/lib/studium/exams/ask_question_from_alias.rb +141 -0
  388. data/lib/studium/exams/ask_question_from_any_of_the_still_missing_lectures.rb +131 -0
  389. data/lib/studium/exams/ask_question_from_grouped_themes.rb +141 -0
  390. data/lib/studium/exams/ask_question_from_last_topic.rb +91 -0
  391. data/lib/studium/exams/ask_random_question.rb +195 -0
  392. data/lib/studium/exams/autoinclude.rb +7 -0
  393. data/lib/studium/exams/csv/create_csv_passed_exams_file.rb +217 -0
  394. data/lib/studium/exams/cycle.rb +291 -0
  395. data/lib/studium/exams/dataset.rb +123 -0
  396. data/lib/studium/exams/designate_ten_random_exam_topics/designate_ten_random_exam_topics.rb +88 -0
  397. data/lib/studium/exams/exam/exam.rb +130 -0
  398. data/lib/studium/exams/exam_question/README.md +3 -0
  399. data/lib/studium/exams/exam_question/answer.rb +177 -0
  400. data/lib/studium/exams/exam_question/constants.rb +111 -0
  401. data/lib/studium/exams/exam_question/exam_question.rb +1135 -0
  402. data/lib/studium/exams/exam_question/menu.rb +333 -0
  403. data/lib/studium/exams/exam_question/misc.rb +895 -0
  404. data/lib/studium/exams/exam_question/question.rb +91 -0
  405. data/lib/studium/exams/exam_question/reset.rb +96 -0
  406. data/lib/studium/exams/exam_registration_at/constants.rb +49 -0
  407. data/lib/studium/exams/exam_registration_at/exam_registration_at.rb +242 -0
  408. data/lib/studium/exams/exam_registration_at/help.rb +46 -0
  409. data/lib/studium/exams/exam_registration_at/menu.rb +81 -0
  410. data/lib/studium/exams/exam_registration_at/report_and_show.rb +133 -0
  411. data/lib/studium/exams/exam_registration_at/reset.rb +54 -0
  412. data/lib/studium/exams/exam_statistics_from_this_file/exam_statistics_from_this_file.rb +119 -0
  413. data/lib/studium/exams/exam_topics.rb +194 -0
  414. data/lib/studium/exams/exams.rb +20 -0
  415. data/lib/studium/exams/exams_per_month/exams_per_month.rb +2438 -0
  416. data/lib/studium/exams/exams_this_week.rb +182 -0
  417. data/lib/studium/exams/fix_exam_dates.rb +121 -0
  418. data/lib/studium/exams/frozen.rb +36 -0
  419. data/lib/studium/exams/last_exams/last_exams.rb +398 -0
  420. data/lib/studium/exams/lectures_without_exam_entry.rb +137 -0
  421. data/lib/studium/exams/mandatory_continuous_assessment/mandatory_continuous_assessment.rb +1956 -0
  422. data/lib/studium/exams/move_the_last_exam_question_to_the_top_of_the_file/move_the_last_exam_question_to_the_top_of_the_file.rb +111 -0
  423. data/lib/studium/exams/n_exams_in_these_topics.rb +404 -0
  424. data/lib/studium/exams/next_exam.rb +107 -0
  425. data/lib/studium/exams/next_exams.rb +378 -0
  426. data/lib/studium/exams/open_exam_associated_url.rb +154 -0
  427. data/lib/studium/exams/open_last_exam_question_asked_file/constants.rb +15 -0
  428. data/lib/studium/exams/open_last_exam_question_asked_file/initialize.rb +29 -0
  429. data/lib/studium/exams/open_last_exam_question_asked_file/open_last_exam_question_asked_file.rb +109 -0
  430. data/lib/studium/exams/pr/303/274fung.rb +289 -0
  431. data/lib/studium/exams/push_solved_questions_on_top.rb +180 -0
  432. data/lib/studium/exams/questions_solved_from_day_to_day/questions_solved_from_day_to_day.rb +377 -0
  433. data/lib/studium/exams/remote_ftp_url.rb +52 -0
  434. data/lib/studium/exams/repeat_last_question.rb +78 -0
  435. data/lib/studium/exams/show_all_passed_exams_of_this_university.rb +252 -0
  436. data/lib/studium/exams/show_backlog_of_exams.rb +117 -0
  437. data/lib/studium/exams/show_next_exams_for.rb +133 -0
  438. data/lib/studium/exams/show_themes/constants.rb +28 -0
  439. data/lib/studium/exams/show_themes/menu.rb +61 -0
  440. data/lib/studium/exams/show_themes/misc.rb +537 -0
  441. data/lib/studium/exams/show_themes/reset.rb +62 -0
  442. data/lib/studium/exams/show_themes/show_themes.rb +27 -0
  443. data/lib/studium/exams/show_upcoming_exams/consider_autogenerating_exam_aliases.rb +181 -0
  444. data/lib/studium/exams/show_upcoming_exams/constants.rb +82 -0
  445. data/lib/studium/exams/show_upcoming_exams/help.rb +33 -0
  446. data/lib/studium/exams/show_upcoming_exams/initialize.rb +77 -0
  447. data/lib/studium/exams/show_upcoming_exams/menu.rb +60 -0
  448. data/lib/studium/exams/show_upcoming_exams/report.rb +200 -0
  449. data/lib/studium/exams/show_upcoming_exams/reset.rb +45 -0
  450. data/lib/studium/exams/show_upcoming_exams/run.rb +20 -0
  451. data/lib/studium/exams/show_upcoming_exams/show_upcoming_exams.rb +544 -0
  452. data/lib/studium/exams/solve_all_questions_from_this_topic.rb +114 -0
  453. data/lib/studium/exams/solved/constants.rb +32 -0
  454. data/lib/studium/exams/solved/help.rb +24 -0
  455. data/lib/studium/exams/solved/initialize.rb +55 -0
  456. data/lib/studium/exams/solved/menu.rb +41 -0
  457. data/lib/studium/exams/solved/reset.rb +28 -0
  458. data/lib/studium/exams/solved/solved.rb +313 -0
  459. data/lib/studium/exams/unsolve_all_questions_from_this_topic.rb +162 -0
  460. data/lib/studium/exams/upcoming_exams/constants.rb +15 -0
  461. data/lib/studium/exams/upcoming_exams/help.rb +41 -0
  462. data/lib/studium/exams/upcoming_exams/initialize.rb +27 -0
  463. data/lib/studium/exams/upcoming_exams/menu.rb +79 -0
  464. data/lib/studium/exams/upcoming_exams/misc.rb +415 -0
  465. data/lib/studium/exams/upcoming_exams/reset.rb +34 -0
  466. data/lib/studium/exams/upcoming_exams/run.rb +26 -0
  467. data/lib/studium/exams/upcoming_exams/upcoming_exams.rb +32 -0
  468. data/lib/studium/exams/upcoming_exams_at_the_boku/constants.rb +23 -0
  469. data/lib/studium/exams/upcoming_exams_at_the_boku/html.rb +64 -0
  470. data/lib/studium/exams/upcoming_exams_at_the_boku/upcoming_exams_at_the_boku.rb +194 -0
  471. data/lib/studium/exams/upcoming_exams_dataset.rb +247 -0
  472. data/lib/studium/exams/upload_exam_topics.rb +360 -0
  473. data/lib/studium/graphviz/README.md +4 -0
  474. data/lib/studium/graphviz/bachelor_vector_based_strategies.dot +160 -0
  475. data/lib/studium/graphviz/master_vector_based_strategies.dot +46 -0
  476. data/lib/studium/gui/gtk3/README.md +1 -0
  477. data/lib/studium/gui/gtk3/ask_exam_question/ask_exam_question.config +6 -0
  478. data/lib/studium/gui/gtk3/ask_exam_question/ask_exam_question.rb +760 -0
  479. data/lib/studium/gui/gtk3/ask_exam_question/manifest.yml +12 -0
  480. data/lib/studium/gui/gtk3/control_panel/control_panel.rb +39 -0
  481. data/lib/studium/gui/gtk3/curriculum_viewer/curriculum_viewer.rb +510 -0
  482. data/lib/studium/gui/gtk3/ects_per_university/ects_per_university.rb +217 -0
  483. data/lib/studium/gui/gtk3/exam_question_widget/exam_question_widget.rb +1887 -0
  484. data/lib/studium/gui/gtk3/expand_time_range/expand_time_range.rb +34 -0
  485. data/lib/studium/gui/gtk3/information_about_a_lecture/information_about_a_lecture.rb +34 -0
  486. data/lib/studium/gui/gtk3/lecture_information/lecture_information.rb +200 -0
  487. data/lib/studium/gui/gtk3/show_upcoming_exams/show_upcoming_exams.rb +34 -0
  488. data/lib/studium/gui/java/exam_question/ExamQuestion$1.class +0 -0
  489. data/lib/studium/gui/java/exam_question/ExamQuestion.class +0 -0
  490. data/lib/studium/gui/java/exam_question/ExamQuestion.java +215 -0
  491. data/lib/studium/gui/javafx/exam_question_widget/exam_question_widget.rb +58 -0
  492. data/lib/studium/gui/jruby/exam_question_widget/exam_question_widget.rb +317 -0
  493. data/lib/studium/gui/libui/ask_exam_question/ask_exam_question.rb +349 -0
  494. data/lib/studium/gui/shared_code/control_panel/control_panel_module.rb +314 -0
  495. data/lib/studium/gui/shared_code/exam_question_widget/exam_question_widget_module.rb +39 -0
  496. data/lib/studium/gui/shared_code/expand_time_range/expand_time_range.css +0 -0
  497. data/lib/studium/gui/shared_code/expand_time_range/expand_time_range_module.rb +190 -0
  498. data/lib/studium/gui/shared_code/information_about_a_lecture/information_about_a_lecture_module.rb +180 -0
  499. data/lib/studium/gui/shared_code/show_upcoming_exams/show_upcoming_exams_module.rb +206 -0
  500. data/lib/studium/images/libui_ask_exam_question.png +0 -0
  501. data/lib/studium/images/small_logos/DNA.png +0 -0
  502. data/lib/studium/images/small_logos/README.md +2 -0
  503. data/lib/studium/images/studies_favicon.png +0 -0
  504. data/lib/studium/java/Mkdir.java +15 -0
  505. data/lib/studium/java/README.md +2 -0
  506. data/lib/studium/java/ask_exam_question/AskExamQuestion.java +477 -0
  507. data/lib/studium/java/solved/Solved.class +0 -0
  508. data/lib/studium/java/solved/Solved.java +110 -0
  509. data/lib/studium/java/utility_scripts/OpenLastExamQuestionurlLinkViaTheBrowser.class +0 -0
  510. data/lib/studium/java/utility_scripts/OpenLastExamQuestionurlLinkViaTheBrowser.java +80 -0
  511. data/lib/studium/logging/README.md +2 -0
  512. data/lib/studium/logging/ensure_that_the_log_directory_exists.rb +47 -0
  513. data/lib/studium/logging/html_log_directory.rb +41 -0
  514. data/lib/studium/logging/log_directory.rb +112 -0
  515. data/lib/studium/logging/store_last_question_asked_into_file.rb +137 -0
  516. data/lib/studium/parsers/README.md +2 -0
  517. data/lib/studium/parsers/custom_exam_results_parser.rb +206 -0
  518. data/lib/studium/parsers/parse_lva_dates.rb +190 -0
  519. data/lib/studium/parsers/parse_remote_lecture.rb +325 -0
  520. data/lib/studium/project/project.rb +76 -0
  521. data/lib/studium/requires/common_popular_requires.rb +37 -0
  522. data/lib/studium/requires/commonly_used_requires.rb +14 -0
  523. data/lib/studium/requires/require_class_exams_solved.rb +7 -0
  524. data/lib/studium/requires/require_ects_scripts.rb +27 -0
  525. data/lib/studium/requires/require_encoding.rb +7 -0
  526. data/lib/studium/requires/require_the_check_and_sanitize_files.rb +31 -0
  527. data/lib/studium/requires/require_the_curricula_files.rb +28 -0
  528. data/lib/studium/requires/require_the_exam_question_class.rb +7 -0
  529. data/lib/studium/requires/require_the_exams_files.rb +45 -0
  530. data/lib/studium/requires/require_the_logging_files.rb +23 -0
  531. data/lib/studium/requires/require_the_parsers.rb +28 -0
  532. data/lib/studium/requires/require_the_studium_constants.rb +10 -0
  533. data/lib/studium/requires/require_the_studium_project.rb +54 -0
  534. data/lib/studium/requires/require_the_toplevel_methods.rb +27 -0
  535. data/lib/studium/requires/require_the_utility_scripts.rb +49 -0
  536. data/lib/studium/requires/require_upcoming_exams.rb +7 -0
  537. data/lib/studium/requires/require_yaml.rb +7 -0
  538. data/lib/studium/requires/return_remote_homepage_of_this_lecture.rb +7 -0
  539. data/lib/studium/requires/with_GUI.rb +13 -0
  540. data/lib/studium/requires/www_mode.rb +17 -0
  541. data/lib/studium/statistics/README.md +4 -0
  542. data/lib/studium/statistics/best_exam_months.rb +92 -0
  543. data/lib/studium/statistics/curriculum_comparer.rb +336 -0
  544. data/lib/studium/statistics/determine_exam_statistics_from_this_file.rb +142 -0
  545. data/lib/studium/statistics/exam_topics_that_are_about_to_be_completed.rb +119 -0
  546. data/lib/studium/statistics/max_stats.rb +170 -0
  547. data/lib/studium/statistics/new_questions_per_year.rb +147 -0
  548. data/lib/studium/statistics/report_how_many_ects_points_per_curriculum_were_completed.rb +167 -0
  549. data/lib/studium/statistics/report_how_many_exam_questions_were_answered.rb +473 -0
  550. data/lib/studium/statistics/show_exam_statistics.rb +60 -0
  551. data/lib/studium/statistics/show_which_courses_are_in_a_bachelor_or_master_curriculum_respectively.rb +104 -0
  552. data/lib/studium/statistics/top_stats.rb +127 -0
  553. data/lib/studium/toplevel_methods/all_passed_exams.rb +37 -0
  554. data/lib/studium/toplevel_methods/already_solved_this_lecture.rb +100 -0
  555. data/lib/studium/toplevel_methods/available_topics.rb +156 -0
  556. data/lib/studium/toplevel_methods/average_grade.rb +141 -0
  557. data/lib/studium/toplevel_methods/calculate_pr/303/274fungsimmanente_lectures_from_this_file.rb +55 -0
  558. data/lib/studium/toplevel_methods/copy_the_last_backup_of_file_lecture_information.rb +34 -0
  559. data/lib/studium/toplevel_methods/curriculum_related_code.rb +999 -0
  560. data/lib/studium/toplevel_methods/determine_local_directory_of_this_lecture.rb +72 -0
  561. data/lib/studium/toplevel_methods/does_this_course_require_mandatory_presence.rb +51 -0
  562. data/lib/studium/toplevel_methods/download.rb +163 -0
  563. data/lib/studium/toplevel_methods/e.rb +16 -0
  564. data/lib/studium/toplevel_methods/ects_from_lectures.rb +250 -0
  565. data/lib/studium/toplevel_methods/editor.rb +65 -0
  566. data/lib/studium/toplevel_methods/esystem.rb +22 -0
  567. data/lib/studium/toplevel_methods/filter_away_invalid_questions.rb +77 -0
  568. data/lib/studium/toplevel_methods/find_exam_topic_and_exam_title.rb +3442 -0
  569. data/lib/studium/toplevel_methods/handle_archive_of_the_exam_questions.rb +136 -0
  570. data/lib/studium/toplevel_methods/has_this_lecture_been_already_passed_but_the_id_was_changed_lateron.rb +42 -0
  571. data/lib/studium/toplevel_methods/has_this_module_been_completed.rb +206 -0
  572. data/lib/studium/toplevel_methods/install_the_project_on_the_given_hostsystem.rb +32 -0
  573. data/lib/studium/toplevel_methods/is_on_roebe.rb +26 -0
  574. data/lib/studium/toplevel_methods/is_this_exam_topic_included.rb +46 -0
  575. data/lib/studium/toplevel_methods/is_this_homepage_registered.rb +31 -0
  576. data/lib/studium/toplevel_methods/is_this_lecture_a_practical_course.rb +100 -0
  577. data/lib/studium/toplevel_methods/is_this_lecture_registered_in_upcoming_exams.rb +42 -0
  578. data/lib/studium/toplevel_methods/java.rb +32 -0
  579. data/lib/studium/toplevel_methods/lecture_information.rb +106 -0
  580. data/lib/studium/toplevel_methods/lva_numbers.rb +355 -0
  581. data/lib/studium/toplevel_methods/main_dataset.rb +73 -0
  582. data/lib/studium/toplevel_methods/methods_related_to_directories.rb +225 -0
  583. data/lib/studium/toplevel_methods/methods_related_to_files.rb +205 -0
  584. data/lib/studium/toplevel_methods/misc.rb +169 -0
  585. data/lib/studium/toplevel_methods/n_questions_available.rb +137 -0
  586. data/lib/studium/toplevel_methods/n_topics_available.rb +63 -0
  587. data/lib/studium/toplevel_methods/names_of_all_solved_exams.rb +71 -0
  588. data/lib/studium/toplevel_methods/note_down_the_start_time_and_how_many_exams_have_been_already_solved.rb +69 -0
  589. data/lib/studium/toplevel_methods/opnn.rb +25 -0
  590. data/lib/studium/toplevel_methods/passed_this_exam_on.rb +105 -0
  591. data/lib/studium/toplevel_methods/pristine.rb +69 -0
  592. data/lib/studium/toplevel_methods/read_delay_between_questions_from_file.rb +34 -0
  593. data/lib/studium/toplevel_methods/regexes.rb +90 -0
  594. data/lib/studium/toplevel_methods/registered_for_this_exam.rb +62 -0
  595. data/lib/studium/toplevel_methods/remove_comments.rb +26 -0
  596. data/lib/studium/toplevel_methods/remove_exam_topics_that_were_already_answered.rb +27 -0
  597. data/lib/studium/toplevel_methods/remove_tags.rb +32 -0
  598. data/lib/studium/toplevel_methods/report.rb +419 -0
  599. data/lib/studium/toplevel_methods/return_all_exams_on_this_day.rb +66 -0
  600. data/lib/studium/toplevel_methods/return_dataset_for_this_exam_topic.rb +41 -0
  601. data/lib/studium/toplevel_methods/return_div_timetable_of_upcoming_exams.rb +498 -0
  602. data/lib/studium/toplevel_methods/return_ects_from_this_lecture_stored_in_the_file_lecture_information.rb +194 -0
  603. data/lib/studium/toplevel_methods/return_hash_of_already_solved_lectures.rb +46 -0
  604. data/lib/studium/toplevel_methods/return_last_exam_question.rb +34 -0
  605. data/lib/studium/toplevel_methods/return_local_path_of_this_pwdstud.rb +60 -0
  606. data/lib/studium/toplevel_methods/return_lva_number_of_this_lecture.rb +72 -0
  607. data/lib/studium/toplevel_methods/return_n_percent_solved_from_this_topic.rb +90 -0
  608. data/lib/studium/toplevel_methods/return_n_questions_were_answered_for_this_topic.rb +60 -0
  609. data/lib/studium/toplevel_methods/return_proper_university_image.rb +86 -0
  610. data/lib/studium/toplevel_methods/return_question_answer_string_from_this_topic.rb +63 -0
  611. data/lib/studium/toplevel_methods/return_remote_homepage_of_this_lecture.rb +9400 -0
  612. data/lib/studium/toplevel_methods/return_remote_moodle_link_of_this_lecture.rb +1661 -0
  613. data/lib/studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb +110 -0
  614. data/lib/studium/toplevel_methods/return_theme_of_the_next_upcoming_exam.rb +38 -0
  615. data/lib/studium/toplevel_methods/rinstall2.rb +34 -0
  616. data/lib/studium/toplevel_methods/rti_conflict.rb +35 -0
  617. data/lib/studium/toplevel_methods/runmode.rb +87 -0
  618. data/lib/studium/toplevel_methods/sanitized_dataset_from_file_passed_exams_per_month.rb +52 -0
  619. data/lib/studium/toplevel_methods/set_last_file_for_exam_questions.rb +64 -0
  620. data/lib/studium/toplevel_methods/set_this_cd_alias_to.rb +86 -0
  621. data/lib/studium/toplevel_methods/show_passed_exams_having_this_grade.rb +34 -0
  622. data/lib/studium/toplevel_methods/spacer.rb +18 -0
  623. data/lib/studium/toplevel_methods/time.rb +239 -0
  624. data/lib/studium/toplevel_methods/total_ects_points_passed.rb +72 -0
  625. data/lib/studium/toplevel_methods/try_to_guess_the_most_likely_lva_id.rb +57 -0
  626. data/lib/studium/toplevel_methods/try_to_return_the_expanded_name_of_this_lecture.rb +63 -0
  627. data/lib/studium/toplevel_methods/unfinished.rb +51 -0
  628. data/lib/studium/toplevel_methods/url.rb +100 -0
  629. data/lib/studium/toplevel_methods/verbose_truth.rb +36 -0
  630. data/lib/studium/toplevel_methods/when_was_this_lecture_passed.rb +54 -0
  631. data/lib/studium/toplevel_methods/word_wrap.rb +56 -0
  632. data/lib/studium/toplevel_methods/write_into_file_related_functionality.rb +189 -0
  633. data/lib/studium/toplevel_methods/yes_or_no_ja_oder_nein.rb +33 -0
  634. data/lib/studium/universities_in_austria/README.md +2 -0
  635. data/lib/studium/universities_in_austria/boku/README.md +4 -0
  636. data/lib/studium/universities_in_austria/boku/boku_/303/266ffnungszeiten.rb +28 -0
  637. data/lib/studium/universities_in_austria/boku/show_three_pillars_of_these_lectures.rb +110 -0
  638. data/lib/studium/universities_in_austria/boku/three_pillars.rb +237 -0
  639. data/lib/studium/universities_in_austria/tu_vienna/README.md +6 -0
  640. data/lib/studium/universities_in_austria/tu_vienna/tu_ferien.rb +42 -0
  641. data/lib/studium/universities_in_austria/tu_vienna/tu_/303/266ffnungszeiten.rb +34 -0
  642. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_boku_lecture_to_curriculum.rb +384 -0
  643. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_lecture_to_curriculum.rb +238 -0
  644. data/lib/studium/utility_scripts/attribute_lectures_to_university/attribute_lectures_to_university.rb +375 -0
  645. data/lib/studium/utility_scripts/audio_stats.rb +171 -0
  646. data/lib/studium/utility_scripts/auto_stud/auto_stud.rb +252 -0
  647. data/lib/studium/utility_scripts/auto_stud/constants.rb +18 -0
  648. data/lib/studium/utility_scripts/auto_stud/initialize.rb +23 -0
  649. data/lib/studium/utility_scripts/auto_stud/misc.rb +18 -0
  650. data/lib/studium/utility_scripts/autopurge_this_lecture_date.rb +93 -0
  651. data/lib/studium/utility_scripts/average_grade_of_this_curriculum.rb +101 -0
  652. data/lib/studium/utility_scripts/calendar/README.md +2 -0
  653. data/lib/studium/utility_scripts/calendar/calendar.rb +251 -0
  654. data/lib/studium/utility_scripts/calendar/misc.rb +35 -0
  655. data/lib/studium/utility_scripts/check_description_of_these_lectures.rb +221 -0
  656. data/lib/studium/utility_scripts/create_database/create_database.rb +106 -0
  657. data/lib/studium/utility_scripts/current_lectures_belonging_to_both_bachelor_and_master_curriculum.rb +113 -0
  658. data/lib/studium/utility_scripts/currently_participating_in_these_lectures/currently_participating_in_these_lectures.rb +104 -0
  659. data/lib/studium/utility_scripts/display_lecture_url.rb +160 -0
  660. data/lib/studium/utility_scripts/expand_time_range/expand_time_range.rb +414 -0
  661. data/lib/studium/utility_scripts/finished_exams_at_this_university.rb +94 -0
  662. data/lib/studium/utility_scripts/foreign_language_percentage/constants.rb +23 -0
  663. data/lib/studium/utility_scripts/foreign_language_percentage/foreign_language_percentage.rb +149 -0
  664. data/lib/studium/utility_scripts/foreign_language_percentage/help.rb +31 -0
  665. data/lib/studium/utility_scripts/foreign_language_percentage/initialize.rb +25 -0
  666. data/lib/studium/utility_scripts/foreign_language_percentage/menu.rb +158 -0
  667. data/lib/studium/utility_scripts/foreign_language_percentage/report.rb +62 -0
  668. data/lib/studium/utility_scripts/foreign_language_percentage/reset.rb +50 -0
  669. data/lib/studium/utility_scripts/foreign_language_percentage/run.rb +19 -0
  670. data/lib/studium/utility_scripts/generate_spreadsheet/generate_spreadsheet.rb +354 -0
  671. data/lib/studium/utility_scripts/generate_spreadsheet/misc.rb +144 -0
  672. data/lib/studium/utility_scripts/holidays/holidays.rb +150 -0
  673. data/lib/studium/utility_scripts/homepage_of_these_courses.rb +118 -0
  674. data/lib/studium/utility_scripts/lecture_downloader.rb +107 -0
  675. data/lib/studium/utility_scripts/lectures_attributed_to_universities.rb +336 -0
  676. data/lib/studium/utility_scripts/lva_dates_of_the_important_courses.rb +111 -0
  677. data/lib/studium/utility_scripts/lva_nummer.rb +431 -0
  678. data/lib/studium/utility_scripts/mandatory_lectures_in_this_month/mandatory_lectures_in_this_month.rb +316 -0
  679. data/lib/studium/utility_scripts/name_of_this_lva_id.rb +110 -0
  680. data/lib/studium/utility_scripts/new_stud.rb +324 -0
  681. data/lib/studium/utility_scripts/next_week.rb +103 -0
  682. data/lib/studium/utility_scripts/open_last_exam_question_url_link_via_the_browser.rb +76 -0
  683. data/lib/studium/utility_scripts/passed_ects_per_year/passed_ects_per_year.rb +177 -0
  684. data/lib/studium/utility_scripts/passed_pr/303/274fungsimmanente_courses/passed_pr/303/274fungsimmanente_courses.rb +181 -0
  685. data/lib/studium/utility_scripts/pdf/README.md +2 -0
  686. data/lib/studium/utility_scripts/pdf/create_pdf_file_for_this_exam_topic.rb +355 -0
  687. data/lib/studium/utility_scripts/pdf/hexapdf_support.rb +50 -0
  688. data/lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb +312 -0
  689. data/lib/studium/utility_scripts/priority.rb +164 -0
  690. data/lib/studium/utility_scripts/priority_points/priority_points.rb +263 -0
  691. data/lib/studium/utility_scripts/publish_my_exams.rb +174 -0
  692. data/lib/studium/utility_scripts/regexes/README.md +1 -0
  693. data/lib/studium/utility_scripts/regexes/generate_regex.rb +300 -0
  694. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_available_moodle_links.rb +55 -0
  695. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_registered_lectures.rb +48 -0
  696. data/lib/studium/utility_scripts/report_outdated_timetable_entries/report_outdated_timetable_entries.rb +142 -0
  697. data/lib/studium/utility_scripts/report_total_amount_of_questions_and_answers_for.rb +116 -0
  698. data/lib/studium/utility_scripts/report_whether_this_lecture_is_registered_in_the_file_lecture_information.rb +128 -0
  699. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/individual_resolve_practical_courses_date_conflicts.rb +254 -0
  700. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/resolve_practical_courses_date_conflicts.rb +265 -0
  701. data/lib/studium/utility_scripts/scrape_remote_university_url.rb +138 -0
  702. data/lib/studium/utility_scripts/semester_schedule_creator/semester_container.rb +144 -0
  703. data/lib/studium/utility_scripts/semester_schedule_creator/semester_schedule_creator.rb +374 -0
  704. data/lib/studium/utility_scripts/semesterplaner.rb +289 -0
  705. data/lib/studium/utility_scripts/set_aliases_based_on_this_file.rb +95 -0
  706. data/lib/studium/utility_scripts/show_all_passed_master_lectures.rb +119 -0
  707. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/show_conflicting_lva_lectures.rb +1238 -0
  708. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/constants.rb +23 -0
  709. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/menu.rb +63 -0
  710. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/reset.rb +33 -0
  711. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/run.rb +50 -0
  712. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/show_descriptions_of_lectures_belonging_to_this_module.rb +145 -0
  713. data/lib/studium/utility_scripts/show_lecturers/show_lecturers.rb +147 -0
  714. data/lib/studium/utility_scripts/show_lectures/constants.rb +11 -0
  715. data/lib/studium/utility_scripts/show_lectures/help.rb +34 -0
  716. data/lib/studium/utility_scripts/show_lectures/initialize.rb +23 -0
  717. data/lib/studium/utility_scripts/show_lectures/menu.rb +127 -0
  718. data/lib/studium/utility_scripts/show_lectures/misc.rb +584 -0
  719. data/lib/studium/utility_scripts/show_lectures/reset.rb +89 -0
  720. data/lib/studium/utility_scripts/show_lectures/run.rb +27 -0
  721. data/lib/studium/utility_scripts/show_lectures/show_lectures.rb +48 -0
  722. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_language/show_lectures_fitting_to_this_language.rb +121 -0
  723. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_theme/show_lectures_fitting_to_this_theme.rb +105 -0
  724. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/constants.rb +17 -0
  725. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/determine.rb +673 -0
  726. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/help.rb +44 -0
  727. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/html.rb +605 -0
  728. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/initialize.rb +56 -0
  729. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/konsole.rb +32 -0
  730. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/menu.rb +472 -0
  731. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/misc.rb +837 -0
  732. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/reset.rb +121 -0
  733. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/run.rb +44 -0
  734. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/show.rb +106 -0
  735. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb +261 -0
  736. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/sorted_individual_curricula.rb +121 -0
  737. data/lib/studium/utility_scripts/show_lectures_on_this_day.rb +149 -0
  738. data/lib/studium/utility_scripts/show_lva_dates_of_this_lecture.rb +169 -0
  739. data/lib/studium/utility_scripts/show_mixed_bachelor_master_courses/show_mixed_bachelor_master_courses.rb +91 -0
  740. data/lib/studium/utility_scripts/show_outdated_lva_dates/show_outdated_lva_dates.rb +210 -0
  741. data/lib/studium/utility_scripts/show_solved_english_lectures/show_solved_english_lectures.rb +139 -0
  742. data/lib/studium/utility_scripts/steop/README.md +4 -0
  743. data/lib/studium/utility_scripts/steop/show_all_steop_lectures.rb +93 -0
  744. data/lib/studium/utility_scripts/steop/steop_lectures_in_this_curriculum.rb +284 -0
  745. data/lib/studium/utility_scripts/steop/steop_lva_dates.rb +119 -0
  746. data/lib/studium/utility_scripts/studienkennzahl.rb +116 -0
  747. data/lib/studium/utility_scripts/studium_skeleton/studium_skeleton.rb +227 -0
  748. data/lib/studium/utility_scripts/stundenplan.rb +595 -0
  749. data/lib/studium/utility_scripts/sync_studium_relevant_entries_one_level_downwards.rb +217 -0
  750. data/lib/studium/utility_scripts/ufind/ufind.rb +98 -0
  751. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/constants.rb +26 -0
  752. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/run.rb +20 -0
  753. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/upcoming_mandatory_presence_courses.rb +181 -0
  754. data/lib/studium/utility_scripts/week_parser/constants.rb +23 -0
  755. data/lib/studium/utility_scripts/week_parser/help.rb +32 -0
  756. data/lib/studium/utility_scripts/week_parser/menu.rb +59 -0
  757. data/lib/studium/utility_scripts/week_parser/misc.rb +373 -0
  758. data/lib/studium/utility_scripts/week_parser/reset.rb +65 -0
  759. data/lib/studium/utility_scripts/week_parser/run.rb +18 -0
  760. data/lib/studium/utility_scripts/week_parser/show.rb +236 -0
  761. data/lib/studium/utility_scripts/week_parser/week_parser.rb +49 -0
  762. data/lib/studium/utility_scripts/weekday_parser.rb +155 -0
  763. data/lib/studium/utility_scripts/weekly_schedule.rb +198 -0
  764. data/lib/studium/utility_scripts/wochenplanung.rb +261 -0
  765. data/lib/studium/version/version.rb +46 -0
  766. data/lib/studium/www/curricula_displayer.cgi +197 -0
  767. data/lib/studium/www/curriculum_displayer.rb +162 -0
  768. data/lib/studium/www/exams.cgi +53 -0
  769. data/lib/studium/www/fast_ask_exam_question.cgi +155 -0
  770. data/lib/studium/www/sinatra/app.rb +231 -0
  771. data/lib/studium/www/sinatra/misc.rb +115 -0
  772. data/lib/studium/www/statistics/statistics.cgi +59 -0
  773. data/lib/studium/yaml/ad_hoc_trainer/README.md +2 -0
  774. data/lib/studium/yaml/ad_hoc_trainer/exam_topics.md +15 -0
  775. data/lib/studium/yaml/allowed_themes_for_exams.yml +344 -0
  776. data/lib/studium/yaml/array_allowed_entries_for_the_file_lecture_information.yml +70 -0
  777. data/lib/studium/yaml/available_exam_topics/available_exam_topics.yml +234 -0
  778. data/lib/studium/yaml/backlog_of_exams.yml +37 -0
  779. data/lib/studium/yaml/colours/custom_colours.yml +28 -0
  780. data/lib/studium/yaml/colours/use_colours.yml +1 -0
  781. data/lib/studium/yaml/current_exams.yml +19 -0
  782. data/lib/studium/yaml/curricula/README.md +9 -0
  783. data/lib/studium/yaml/curricula/bachelor/bachelor_agrarwissenschaften_033255.yml +142 -0
  784. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_basisblock_033630.yml +65 -0
  785. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_botanik_033630.yml +84 -0
  786. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_ecology_033630.yml +74 -0
  787. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_mikrobiologie_und_genetik_033630.yml +120 -0
  788. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_molekulare_biologie_033630.yml +104 -0
  789. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_zoologie_033630.yml +87 -0
  790. data/lib/studium/yaml/curricula/bachelor/bachelor_chemie_033662.yml +165 -0
  791. data/lib/studium/yaml/curricula/bachelor/bachelor_dummy_curriculum.yml +183 -0
  792. data/lib/studium/yaml/curricula/bachelor/bachelor_elektrotechnik_und_informationstechnik_033235.yml +13 -0
  793. data/lib/studium/yaml/curricula/bachelor/bachelor_forstwirtschaft_033225.yml +115 -0
  794. data/lib/studium/yaml/curricula/bachelor/bachelor_informatik_033521.yml +130 -0
  795. data/lib/studium/yaml/curricula/bachelor/bachelor_ktww_033231.yml +84 -0
  796. data/lib/studium/yaml/curricula/bachelor/bachelor_lmbt_033217.yml +118 -0
  797. data/lib/studium/yaml/curricula/bachelor/bachelor_medizinische_informatik_033533.yml +203 -0
  798. data/lib/studium/yaml/curricula/bachelor/bachelor_molekularbiologie_033665.yml +95 -0
  799. data/lib/studium/yaml/curricula/bachelor/bachelor_nutrition_science_033638.yml +119 -0
  800. data/lib/studium/yaml/curricula/bachelor/bachelor_pharmazie_033305.yml +170 -0
  801. data/lib/studium/yaml/curricula/bachelor/bachelor_technische_chemie_033290.yml +129 -0
  802. data/lib/studium/yaml/curricula/bachelor/bachelor_technische_informatik_033535.yml +23 -0
  803. data/lib/studium/yaml/curricula/bachelor/bachelor_ubrm_033227.yml +136 -0
  804. data/lib/studium/yaml/curricula/bachelor/bachelor_verfahrenstechnik_033273.yml +167 -0
  805. data/lib/studium/yaml/curricula/bachelor/bachelor_wirtschaftsinformatik_033526.yml +29 -0
  806. data/lib/studium/yaml/curricula/individual/bachelor_informatik_und_molekulare_biologie.yml +1161 -0
  807. data/lib/studium/yaml/curricula/individual/bachelor_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +1157 -0
  808. data/lib/studium/yaml/curricula/individual/master_bioinformatics_and_nanobiotechnology_in_molecular_medicine.yml +306 -0
  809. data/lib/studium/yaml/curricula/individual/master_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +741 -0
  810. data/lib/studium/yaml/curricula/master/master_bioinformatik_066875.yml +76 -0
  811. data/lib/studium/yaml/curricula/master/master_biologie_molekulare_mikrobiologie_mikrobielle_oekologie_und_immunbiologie_066830.yml +78 -0
  812. data/lib/studium/yaml/curricula/master/master_biologische_chemie_066863.yml +61 -0
  813. data/lib/studium/yaml/curricula/master/master_dummy_curriculum.yml +197 -0
  814. data/lib/studium/yaml/curricula/master/master_genetik_und_entwicklungsbiologie_066877.yml +89 -0
  815. data/lib/studium/yaml/curricula/master/master_lmbt_066418.yml +111 -0
  816. data/lib/studium/yaml/curricula/master/master_molekulare_biologie_066834.yml +142 -0
  817. data/lib/studium/yaml/curricula/master/master_pharmazie_066605.yml +170 -0
  818. data/lib/studium/yaml/curricula/master/master_technische_chemie_066490.yml +123 -0
  819. data/lib/studium/yaml/curricula/outdated/master_bioinformatics_and_molecular_biotechnology_including_aspects_from_molecular_medicine.yml +438 -0
  820. data/lib/studium/yaml/curricula/outdated/master_food_science_and_plant_biotechnology.yml +31 -0
  821. data/lib/studium/yaml/curricula.yml +538 -0
  822. data/lib/studium/yaml/daily_questions_solved.yml +1468 -0
  823. data/lib/studium/yaml/default_delay.yml +4 -0
  824. data/lib/studium/yaml/default_encoding.yml +1 -0
  825. data/lib/studium/yaml/directory_to_the_exam_topics.yml +0 -0
  826. data/lib/studium/yaml/editor.yml +1 -0
  827. data/lib/studium/yaml/file_for_exam_questions.yml +1 -0
  828. data/lib/studium/yaml/german/README.md +2 -0
  829. data/lib/studium/yaml/german/german_to_english_month_names.yml +16 -0
  830. data/lib/studium/yaml/grouped_themes.yml +192 -0
  831. data/lib/studium/yaml/holidays.yml +194 -0
  832. data/lib/studium/yaml/important_exams.yml +226 -0
  833. data/lib/studium/yaml/inscription_dates_of_universities.yml +60 -0
  834. data/lib/studium/yaml/lecture_aliases.yml +138 -0
  835. data/lib/studium/yaml/lecture_information/lecture_information.yml +55870 -0
  836. data/lib/studium/yaml/log_dir.yml +1 -0
  837. data/lib/studium/yaml/main_topic.yml +11 -0
  838. data/lib/studium/yaml/max_stats.yml +241 -0
  839. data/lib/studium/yaml/meta_themes/README.md +13 -0
  840. data/lib/studium/yaml/meta_themes/biochemistry.md +6 -0
  841. data/lib/studium/yaml/meta_themes/bioinformatics.md +6 -0
  842. data/lib/studium/yaml/meta_themes/biotechnology.md +9 -0
  843. data/lib/studium/yaml/meta_themes/chemistry.md +9 -0
  844. data/lib/studium/yaml/meta_themes/genetics.md +10 -0
  845. data/lib/studium/yaml/meta_themes/immunology.md +5 -0
  846. data/lib/studium/yaml/meta_themes/metabolic_pathways.md +12 -0
  847. data/lib/studium/yaml/meta_themes/molecular_biology.md +9 -0
  848. data/lib/studium/yaml/meta_themes/protein_engineering.md +10 -0
  849. data/lib/studium/yaml/meta_themes/statistics.md +2 -0
  850. data/lib/studium/yaml/mitbelegung/README.md +4 -0
  851. data/lib/studium/yaml/mitbelegung/mitbelegung.yml +23 -0
  852. data/lib/studium/yaml/mitteilungsbl/303/244tter/mitteilungsbl/303/244tter.yml +363 -0
  853. data/lib/studium/yaml/n_total_questions.yml +1 -0
  854. data/lib/studium/yaml/rename_konsole_tab.yml +1 -0
  855. data/lib/studium/yaml/show_topic.yml +1 -0
  856. data/lib/studium/yaml/statistics/max_stats.yml +239 -0
  857. data/lib/studium/yaml/statistics/statistics.yml +69 -0
  858. data/lib/studium/yaml/week/01_monday.yml +5 -0
  859. data/lib/studium/yaml/week/02_tuesday.yml +75 -0
  860. data/lib/studium/yaml/week/03_wednesday.yml +62 -0
  861. data/lib/studium/yaml/week/04_thursday.yml +14 -0
  862. data/lib/studium/yaml/week/05_friday.yml +31 -0
  863. data/lib/studium/yaml/week/06_saturday.yml +16 -0
  864. data/lib/studium/yaml/week/07_sunday.yml +0 -0
  865. data/lib/studium/yaml/week/README.md +13 -0
  866. data/lib/studium.rb +5 -0
  867. data/studium.gemspec +80 -0
  868. data/test/testing_studium.rb +244 -0
  869. data/test/testing_studium_base_class.rb +17 -0
  870. data/test/testing_time_component.rb +29 -0
  871. metadata +1078 -0
@@ -0,0 +1,895 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/exams/exam_question/misc.rb'
6
+ # =========================================================================== #
7
+ require 'studium/base/base.rb'
8
+
9
+ module Studium
10
+
11
+ module Exams
12
+
13
+ class ExamQuestion < ::Studium::Base # === Studium::Exams::ExamQuestion
14
+
15
+ require 'studium/toplevel_methods/handle_archive_of_the_exam_questions.rb'
16
+ require 'studium/toplevel_methods/write_into_file_related_functionality.rb'
17
+ require 'studium/exams/exam_question/constants.rb'
18
+ require 'studium/exams/exam_question/question.rb'
19
+
20
+ # ========================================================================= #
21
+ # === ask_the_question_then_sleep_then_reveal_the_answer_to_that_question
22
+ # ========================================================================= #
23
+ def ask_the_question_then_sleep_then_reveal_the_answer_to_that_question
24
+ # ======================================================================= #
25
+ # Next warn the user if there are too many exams registered. This
26
+ # should be shown after the topic has been optionally displayed.
27
+ # Afterwards we will begin to ask the exam-question at hand.
28
+ # ======================================================================= #
29
+ consider_warning_the_user_if_there_are_too_many_exams_registered
30
+ ask_the_exam_question
31
+ sleep_default_delay
32
+ reveal_the_exam_answer
33
+ end; alias ask_question_then_show_the_answer_after_a_delay ask_the_question_then_sleep_then_reveal_the_answer_to_that_question # === ask_question_then_show_the_answer_after_a_delay
34
+ alias do_ask_a_random_question_before_showing_the_answer ask_the_question_then_sleep_then_reveal_the_answer_to_that_question # === ask_question_then_show_the_answer_after_a_delay
35
+ alias show_question_then_sleep_then_show_answer ask_the_question_then_sleep_then_reveal_the_answer_to_that_question # === show_question_then_sleep_then_show_answer
36
+ alias ask_sleep_show ask_the_question_then_sleep_then_reveal_the_answer_to_that_question # === ask_sleep_show
37
+ alias ask_the_question_then_reveal_the_answer ask_the_question_then_sleep_then_reveal_the_answer_to_that_question # === ask_the_question_then_reveal_the_answer
38
+
39
+ # ========================================================================= #
40
+ # === fancy_cliner
41
+ #
42
+ # Since as of April 2022 this method can also optionally display some
43
+ # content. If this is the case then said content will be padded
44
+ # via '*'.
45
+ # ========================================================================= #
46
+ def fancy_cliner(
47
+ optional_content_to_be_displayed = nil
48
+ )
49
+ print seagreen('') # Always reset the colour here first.
50
+ if optional_content_to_be_displayed
51
+ e mediumaquamarine('*' * 3)+' '+
52
+ forestgreen( # or lightskyblue
53
+ optional_content_to_be_displayed
54
+ )+
55
+ ' '+
56
+ mediumaquamarine(
57
+ '*' * (75 - optional_content_to_be_displayed.size)
58
+ )
59
+ else
60
+ cliner('*', :mediumaquamarine)
61
+ end
62
+ end
63
+
64
+ require 'studium/toplevel_methods/report.rb'
65
+ # ========================================================================= #
66
+ # === show_how_many_exam_questions_were_already_solved_in_german
67
+ #
68
+ # Similar to the above, except that we will report in german.
69
+ #
70
+ # Invocation example:
71
+ #
72
+ # qa --solved-in-german
73
+ #
74
+ # ========================================================================= #
75
+ def show_how_many_exam_questions_were_already_solved_in_german
76
+ Studium::Exams.report_how_many_exam_questions_were_already_solved(:german)
77
+ end
78
+
79
+ # ========================================================================= #
80
+ # === open_the_last_file_via_your_editor
81
+ # ========================================================================= #
82
+ def open_the_last_file_via_your_editor(
83
+ this_file = last_file?
84
+ )
85
+ open_this_file_in_editor(this_file)
86
+ end
87
+
88
+ # ========================================================================= #
89
+ # === open_this_file_in_editor
90
+ #
91
+ # Open this file in the editor.
92
+ # ========================================================================= #
93
+ def open_this_file_in_editor(
94
+ this_file = __FILE__
95
+ )
96
+ use_this_editor = editor?
97
+ # ======================================================================= #
98
+ # Since as of December 2017, on my home system, I will use nano instead.
99
+ # ======================================================================= #
100
+ use_this_editor = 'nano -w' if is_on_roebe?
101
+ _ = "#{use_this_editor} #{this_file}" #&
102
+ esystem _
103
+ end
104
+
105
+ # ========================================================================= #
106
+ # === notify_the_user_that_all_questions_have_been_answered_already
107
+ # ========================================================================= #
108
+ def notify_the_user_that_all_questions_have_been_answered_already(
109
+ which_topic = which_topic?
110
+ )
111
+ opnn; e 'All questions have already been answered '
112
+ opnn; e "for the topic `#{orange(which_topic)}`. "\
113
+ "#{slateblue(cheering_person?)}"
114
+ end
115
+
116
+ # ========================================================================= #
117
+ # === custom_colours?
118
+ # ========================================================================= #
119
+ def custom_colours?
120
+ [
121
+ @internal_hash[:colour_for_questions],
122
+ @internal_hash[:colour_for_answers]
123
+ ]
124
+ end
125
+
126
+ # ========================================================================= #
127
+ # === set_exam_pool
128
+ #
129
+ # The "exam pool" constitutes the available, unanswered exams.
130
+ #
131
+ # What this means, essentially, is that every line ending with a '[]'
132
+ # will be disregarded.
133
+ # ========================================================================= #
134
+ def set_exam_pool(i = nil)
135
+ @internal_hash[:exam_pool] = i
136
+ end
137
+
138
+ # ========================================================================= #
139
+ # === store_delay (store tag)
140
+ #
141
+ # This method will store/save the delay into a file.
142
+ # ========================================================================= #
143
+ def store_delay(i)
144
+ Studium.save_this_delay_between_questions_and_answers(i)
145
+ end
146
+
147
+ # ========================================================================= #
148
+ # === load_file_rename_konsole_tab
149
+ # ========================================================================= #
150
+ def load_file_rename_konsole_tab
151
+ YAML.load_file(FILE_RENAME_KONSOLE_TAB)
152
+ end
153
+
154
+ # ========================================================================= #
155
+ # === exam_file?
156
+ #
157
+ # This query-method shows as to where the specific file at hand is.
158
+ # ========================================================================= #
159
+ def exam_file?
160
+ @internal_hash[:exam_file]
161
+ end; alias file? exam_file? # === file?
162
+
163
+ # ========================================================================= #
164
+ # === main_file_exists?
165
+ # ========================================================================= #
166
+ def main_file_exists?(
167
+ i = exam_file?
168
+ )
169
+ i and File.exist?(i)
170
+ end
171
+
172
+ # ========================================================================= #
173
+ # === show_the_last_topic
174
+ #
175
+ # Invocation example:
176
+ #
177
+ # qa --show-last-topic
178
+ #
179
+ # ========================================================================= #
180
+ def show_the_last_topic(
181
+ _ = FILE_LAST_TOPIC
182
+ )
183
+ if File.exist? _
184
+ e rev+'The last topic was `'+
185
+ simp(
186
+ expand_topic(File.read(_).chomp)
187
+ )+'`.'
188
+ else
189
+ opnn; no_file_exists_at(_.to_s)
190
+ end
191
+ end
192
+
193
+ # ========================================================================= #
194
+ # === set_all_questions_from_the_topic_to_solved
195
+ #
196
+ # This will solve all questions from a given topic.
197
+ #
198
+ # Invocation example:
199
+ #
200
+ # qa ALL_SOLVED
201
+ #
202
+ # ========================================================================= #
203
+ def set_all_questions_from_the_topic_to_solved
204
+ if commandline?
205
+ require 'studium/exams/solve_all_questions_from_this_topic.rb'
206
+ this_topic = which_topic?
207
+ e "#{rev}Setting all questions from the topic "\
208
+ "#{sfancy(this_topic)} to solved."
209
+ Studium::SolveAllQuestionsFromThisTopic.new(this_topic)
210
+ end
211
+ end
212
+
213
+ # ========================================================================= #
214
+ # === report_this_error
215
+ # ========================================================================= #
216
+ def report_this_error(error = nil)
217
+ opnn; e 'We encountered an '+swarn('error')+
218
+ '. The @index_position was probably '\
219
+ 'out of range.'
220
+ opnn; e 'Feedbacking @line next:'
221
+ pp line?
222
+ opnn; e "Feedbacking #{royalblue('the split position')} next:"
223
+ pp split_position?
224
+ if error
225
+ pp error
226
+ pp error.class
227
+ end
228
+ end
229
+
230
+ # ========================================================================= #
231
+ # === report_how_many_registered_questions_are_available
232
+ # ========================================================================= #
233
+ def report_how_many_registered_questions_are_available(
234
+ n_questions = ::Studium.n_questions_available?
235
+ )
236
+ opnn; e "#{rev}There are #{simp(n_questions.to_s)} registered "\
237
+ "questions available."
238
+ end
239
+
240
+ # ========================================================================= #
241
+ # === show_how_many_exam_questions_were_already_solved
242
+ #
243
+ # Use this method to show how many exam questions were already solved.
244
+ #
245
+ # To invoke this method, do:
246
+ #
247
+ # qa SOLVED?
248
+ #
249
+ # Or in code, do:
250
+ #
251
+ # Studium::Exams.report_how_many_exam_questions_were_already_solved
252
+ #
253
+ # ========================================================================= #
254
+ def show_how_many_exam_questions_were_already_solved
255
+ Studium.report_how_many_exam_questions_were_already_solved
256
+ end
257
+
258
+ # ========================================================================= #
259
+ # === edit_sanitize_topics_in_vim
260
+ #
261
+ # To trigger this, do:
262
+ #
263
+ # qa --vim
264
+ #
265
+ # ========================================================================= #
266
+ def edit_sanitize_topics_in_vim
267
+ position_in_the_file = 445
268
+ file =
269
+ RUBY_STUDIUM_HOME_DIR+'toplevel_methods/find_exam_topic_and_exam_title.rb'
270
+ _ = 'vim '+file+' +'+position_in_the_file.to_s
271
+ esystem _
272
+ end
273
+
274
+ # ========================================================================= #
275
+ # === show_content_of_this_topic
276
+ #
277
+ # Invocation example:
278
+ #
279
+ # qa ethik --show-everything
280
+ #
281
+ # ========================================================================= #
282
+ def show_content_of_this_topic(
283
+ i = topic?
284
+ )
285
+ dataset = filter_away_invalid_questions(
286
+ File.readlines(directory_to_the_exam_topics?+i)
287
+ )
288
+ dataset.each {|line|
289
+ e " #{simp(line.chomp)}"
290
+ }
291
+ end
292
+
293
+ # ========================================================================= #
294
+ # === try_to_save_the_line (save tag)
295
+ #
296
+ # This is called whenever the main line is obtained. The original line
297
+ # is copied, not any modified variant.
298
+ #
299
+ # We will store into a file, which is kept at @store_where.
300
+ #
301
+ # It usually defaults to the file /Depot/Studium/last_question_asked.md
302
+ # or wherever else the base-directory has been defined.
303
+ # ========================================================================= #
304
+ def try_to_save_the_line(
305
+ i = line?
306
+ )
307
+ _ = store_where? # Where to store.
308
+ if File.exist?(File.dirname(_))
309
+ if debug?
310
+ opnn; e "Now saving: #{bold_blue(i)} into the file #{sfile(_)}"
311
+ end if commandline?
312
+ if File.writable?(File.dirname(_))
313
+ write_what_into(i, _) # Save it.
314
+ end
315
+ end
316
+ end
317
+
318
+ # ========================================================================= #
319
+ # === store_where?
320
+ # ========================================================================= #
321
+ def store_where?
322
+ Studium.file_last_question_asked?
323
+ end
324
+
325
+ require 'studium/logging/store_last_question_asked_into_file.rb'
326
+ # ========================================================================= #
327
+ # === do_log_related_and_backup_related_actions
328
+ #
329
+ # This method will backup files and similar activities.
330
+ # ========================================================================= #
331
+ def do_log_related_and_backup_related_actions
332
+ unless Studium.is_in_www_mode?
333
+ Studium.backup_this_exam_file(exam_file?) # { :be_verbose }
334
+ hash = {} # Build up our data structure here, as a Hash.
335
+ hash[:question_was_asked_when] = Time.now
336
+ hash[:question_full_line] = line?
337
+ Studium::Log::StoreLastQuestionAskedIntoFile.new(hash) # { :be_verbose }
338
+ end
339
+ end
340
+
341
+ # ========================================================================= #
342
+ # === generate_statistical_webpage
343
+ #
344
+ # Invoke like so:
345
+ #
346
+ # qa --www
347
+ #
348
+ # ========================================================================= #
349
+ def generate_statistical_webpage
350
+ require 'studium/statistics/report_how_many_exam_questions_were_answered.rb'
351
+ Studium::Statistics::ReportHowManyExamQuestionsWereAnswered.generate_webpage
352
+ require 'open'
353
+ Open.in_browser(
354
+ Dir.home+'/Studium/html/statistics.html'
355
+ )
356
+ end
357
+
358
+ # ========================================================================= #
359
+ # === report_file_does_not_exist
360
+ # ========================================================================= #
361
+ def report_file_does_not_exist(
362
+ this_file = exam_file?
363
+ )
364
+ opnn; e "#{rev}No file at `#{sfile(this_file)}` exists."
365
+ end
366
+
367
+ require 'studium/toplevel_methods/set_last_file_for_exam_questions.rb'
368
+ # ========================================================================= #
369
+ # === register_last_modified_file
370
+ # ========================================================================= #
371
+ def register_last_modified_file(
372
+ i = exam_file?
373
+ )
374
+ Studium.set_last_file_for_exam_questions(i) # , :be_verbose
375
+ end
376
+
377
+ require 'studium/toplevel_methods/n_questions_available.rb'
378
+ # ========================================================================= #
379
+ # === show_how_many_exam_questions_are_available
380
+ #
381
+ # This method can be called by passing in 'TOTAL' as argument.
382
+ #
383
+ # Example:
384
+ #
385
+ # qa TOTAL?
386
+ #
387
+ # ========================================================================= #
388
+ def show_how_many_exam_questions_are_available
389
+ n_questions = ::Studium.n_questions_available?.to_s
390
+ result = 'Total amount of registered questions: '.dup
391
+ if commandline? and use_colours?
392
+ result << simp(n_questions.to_s)
393
+ else
394
+ result << n_questions.to_s
395
+ end
396
+ e result
397
+ end; alias total show_how_many_exam_questions_are_available # === total (total tag)
398
+ alias n_total_questions_available? show_how_many_exam_questions_are_available # === n_total_questions_available?
399
+
400
+ # ========================================================================= #
401
+ # === opnn
402
+ # ========================================================================= #
403
+ def opnn
404
+ super(
405
+ namespace: @namespace,
406
+ use_colours: use_colours?
407
+ )
408
+ end
409
+
410
+ # ========================================================================= #
411
+ # === determine_whether_we_will_rename_the_konsole_tab
412
+ #
413
+ # This method should be called from within the method called reset().
414
+ # ========================================================================= #
415
+ def determine_whether_we_will_rename_the_konsole_tab
416
+ if is_on_roebe?
417
+ if File.exist? FILE_RENAME_KONSOLE_TAB
418
+ _ = load_file_rename_konsole_tab
419
+ if _ == true
420
+ do_rename_konsole_tab
421
+ else
422
+ do_not_rename_konsole_tab
423
+ end
424
+ else
425
+ do_not_rename_konsole_tab
426
+ end
427
+ else
428
+ do_not_rename_konsole_tab
429
+ end
430
+ end
431
+
432
+ # ========================================================================= #
433
+ # === show_last_question_asked
434
+ #
435
+ # This will show the last question asked.
436
+ # ========================================================================= #
437
+ def show_last_question_asked(
438
+ i = store_where?
439
+ )
440
+ if File.exist? i
441
+ e File.read(i)
442
+ end
443
+ end
444
+
445
+ # ========================================================================= #
446
+ # === consider_renaming_konsole_tab
447
+ #
448
+ # We will delegate to class SetTerminalTitle in order to rename the KDE
449
+ # konsole title.
450
+ # ========================================================================= #
451
+ def consider_renaming_konsole_tab
452
+ if Studium::Exams::ExamQuestion.rename_konsole_tab?
453
+ rename_kde_konsole_tab(topic?)
454
+ end
455
+ end
456
+
457
+ # ========================================================================= #
458
+ # === do_rename_konsole_tab
459
+ # ========================================================================= #
460
+ def do_rename_konsole_tab
461
+ Studium::Exams::ExamQuestion.set_rename_konsole_tab(true)
462
+ end
463
+
464
+ # ========================================================================= #
465
+ # === do_not_rename_konsole_tab
466
+ # ========================================================================= #
467
+ def do_not_rename_konsole_tab
468
+ Studium::Exams::ExamQuestion.set_rename_konsole_tab(false)
469
+ end
470
+
471
+ # ========================================================================= #
472
+ # === try_to_read_in_the_dataset_from_the_corresponding_exam_file
473
+ # ========================================================================= #
474
+ def try_to_read_in_the_dataset_from_the_corresponding_exam_file(
475
+ _ = exam_topics_directory?+
476
+ topic?.to_s
477
+ )
478
+ if File.exist? _
479
+ # ===================================================================== #
480
+ # Keep track of where the exam-file can be found.
481
+ # ===================================================================== #
482
+ set_exam_file(_)
483
+ @internal_hash[:dataset_from_the_file] =
484
+ read_in_exam_dataset_from_this_file(_)
485
+ else
486
+ report_file_does_not_exist(_)
487
+ end
488
+ end
489
+
490
+ require 'studium/toplevel_methods/download.rb'
491
+ # ========================================================================= #
492
+ # === download_exam_topics
493
+ #
494
+ # You can use this method to download all exam topics.
495
+ #
496
+ # To call this, do:
497
+ #
498
+ # qa --dexamtopics
499
+ #
500
+ # ========================================================================= #
501
+ def download_exam_topics
502
+ Studium.download_exam_topics
503
+ end
504
+
505
+ # ========================================================================= #
506
+ # === result?
507
+ # ========================================================================= #
508
+ def result?
509
+ @internal_hash[:result_for_www]
510
+ end
511
+
512
+ # ========================================================================= #
513
+ # === exam_pool?
514
+ # ========================================================================= #
515
+ def exam_pool?
516
+ @internal_hash[:exam_pool]
517
+ end
518
+
519
+ # ========================================================================= #
520
+ # === show_available_topics (topics tag)
521
+ #
522
+ # This method will show which topics are all available.
523
+ #
524
+ # By default, it will also exit after having done so.
525
+ #
526
+ # To invoke this method, try:
527
+ #
528
+ # qa topics?
529
+ # qa --show-available-topics
530
+ #
531
+ # ========================================================================= #
532
+ def show_available_topics(
533
+ shall_we_exit = true
534
+ )
535
+ e
536
+ use_these_topics = Studium.available_topics.sort # And sort it.
537
+ use_these_topics.each_with_index {|category, index|
538
+ # ===================================================================== #
539
+ # Number the results via the index.
540
+ # ===================================================================== #
541
+ index = '%4s' % ('('+(index+1).to_s)
542
+ result = ' '.dup
543
+ if use_colours?
544
+ result << ::Colours::CYAN if commandline?
545
+ end
546
+ result << "#{index}) - " # Add the index here.
547
+ if use_colours? # And "close" the escape-sequences next.
548
+ result << rev if commandline?
549
+ end
550
+ category = category.to_s.delete('_')
551
+ category = steelblue(category) if use_colours?
552
+ result << category
553
+ e result
554
+ }
555
+ e
556
+ exit if shall_we_exit
557
+ end
558
+
559
+ # ========================================================================= #
560
+ # === word_wrap_at?
561
+ # ========================================================================= #
562
+ def word_wrap_at?
563
+ @internal_hash[:word_wrap_at]
564
+ end
565
+
566
+ # ========================================================================= #
567
+ # === set_exam_topic
568
+ #
569
+ # We need to store the expanded topic name, so that something like
570
+ # "bioanalytik" is turned into "bioanalytik_und_biosensoren".
571
+ #
572
+ # Whenever a topic is set through this method, this will also be
573
+ # stored into a file. This then allows us to query what the
574
+ # last topic was, e. g. via "qa --last_topic?".
575
+ # ========================================================================= #
576
+ def set_exam_topic(
577
+ i = first_non_hyphen_argument?
578
+ )
579
+ i = i.first if i.is_a? Array
580
+ # ======================================================================= #
581
+ # === Handle Hashes
582
+ #
583
+ # If a Hash is given then we will try to find a specific key in that
584
+ # Hash.
585
+ # ======================================================================= #
586
+ if i.is_a?(Hash) and i.has_key?(:use_this_topic)
587
+ i = i[:use_this_topic]
588
+ end
589
+ case i
590
+ when nil, ''
591
+ i = 'random_topic' # or :random
592
+ end
593
+ i = i.to_s.dup # Work with a String past this point.
594
+ i.downcase! # Convention is to store the file downcased.
595
+ case i
596
+ # ======================================================================= #
597
+ # === random
598
+ #
599
+ # We fetch a random topic via this entry-point.
600
+ # ======================================================================= #
601
+ when 'fetch_a_random_topic',
602
+ 'random_topic',
603
+ 'random',
604
+ 'rand'
605
+ i = ::Studium::Exams.random_short_name_topic # This is allowed, for random topics.
606
+ # i = ::Studium.return_random_exam_topic # ← This may be an alternative.
607
+ # ======================================================================= #
608
+ # === molbio
609
+ #
610
+ # This entry point is special.
611
+ # ======================================================================= #
612
+ when 'molbio',
613
+ 'molekularbiologie',
614
+ 'molbio?'
615
+ i = 'amg|amg2|genex1|gentech1|gentech2|pcr'
616
+ # ======================================================================= #
617
+ # === OLAST
618
+ # ======================================================================= #
619
+ when /^qlast$/i,
620
+ /^olast$/i # === olast tag
621
+ _ = FILE_LAST_TOPIC
622
+ if File.exist? _
623
+ i = File.read(FILE_LAST_TOPIC).strip
624
+ else
625
+ opnn; no_file_exists_at(_)
626
+ end
627
+ end
628
+ # ======================================================================= #
629
+ # If the input has a '|', we assume that the user wants to randomly
630
+ # pick one entry.
631
+ # ======================================================================= #
632
+ if i.include? '|'
633
+ i = i.split('|').shuffle
634
+ end
635
+ # ======================================================================= #
636
+ # Before we do the real assignment, we will sanitize this through
637
+ # the Studium.find_corresponding_exam_topic "filter".
638
+ # ======================================================================= #
639
+ if Studium.is_this_a_registered_exam_topic?(i)
640
+ i = Studium.find_corresponding_exam_topic(i)
641
+ else
642
+ opnn; e "Not a registered exam topic: #{i}"
643
+ end
644
+ @internal_hash[:topic] = i
645
+ # ======================================================================= #
646
+ # Next we will store the topic into a file.
647
+ # ======================================================================= #
648
+ unless in_www_mode?
649
+ store_last_topic_into_file(i)
650
+ end
651
+ end; alias set_this_topic set_exam_topic # === set_this_topic
652
+ alias determine_the_topic set_exam_topic # === determine_the_topic
653
+ alias determine_the_exam_topic set_exam_topic # === determine_the_exam_topic
654
+
655
+ # ========================================================================= #
656
+ # === assign_url
657
+ #
658
+ # Only call this method after making a line.include? 'URL:' check.
659
+ # The reason for this is that we will only apply this method on
660
+ # a line that has this substring representing a remote URL.
661
+ # ========================================================================= #
662
+ def assign_url(i)
663
+ if use_unicode_symbols?
664
+ nice_token = '➡' # We will use a slightly prettier symbol for Unicode in this case.
665
+ else
666
+ nice_token = '=>'
667
+ end
668
+ i =~ /URL:\s*(.*)( |)/
669
+ url = sanitize_url($1.to_s.dup) # URL is something like: "http://de.wikipedia.org/wiki/Ester"
670
+ url = url.first if url.is_a? Array
671
+ i = i.dup if i.frozen?
672
+ begin
673
+ # ===================================================================== #
674
+ # The next regex shall also check for input such as:
675
+ #
676
+ # URL: https://en.wikipedia.org/wiki/2,4-Dinitrophenol
677
+ # URL: https://en.wikipedia.org/wiki/File:Histidin_-_Histidine.svg
678
+ #
679
+ # Since as of 11.11.2018, we also include any other entry that
680
+ # starts with 'https:'.
681
+ # ===================================================================== #
682
+ if $1 # See: https://rubular.com/r/rNeLS2MH6f
683
+ remote_URL = $1.to_s.dup
684
+ i.gsub!(/URL:\s*(.*)( |)/, nice_token+' \1') # ← Also add a '=>' token.
685
+ if is_on_roebe?
686
+ # ================================================================= #
687
+ # Store this on my home system in a file, in this case.
688
+ # ================================================================= #
689
+ what = "#{remote_URL}\n"
690
+ into = log_dir?+'last_exam_questions_URL.md'
691
+ append_what_into(what, into)
692
+ end
693
+ end
694
+ i = i.to_s.dup
695
+ return i
696
+ rescue Exception => error
697
+ e "Debugging for `#{sfancy(i.to_s)}`:"
698
+ pp error
699
+ p url.class
700
+ e sfancy(url)
701
+ end
702
+ end
703
+
704
+ # ========================================================================= #
705
+ # === show_statistics
706
+ #
707
+ # To invoke this method from the commandline, try:
708
+ #
709
+ # qa --show-statistics
710
+ #
711
+ # ========================================================================= #
712
+ def show_statistics(
713
+ dataset = dataset?
714
+ )
715
+ unless in_www_mode?
716
+ n_questions = n_questions_available?
717
+ n_answered = n_questions_already_answered?
718
+ percentage = (n_answered.to_f * 100) / n_questions
719
+ result = olivedrab(n_questions.to_s)+' questions available, '+
720
+ mediumaquamarine(n_answered.to_s)+
721
+ ' ('+
722
+ colourize_percentage(percentage.round(2).to_s+'%')+
723
+ ') already answered.'+N
724
+ # ===================================================================== #
725
+ # Also add how many questions in absolute numbers have to be answered
726
+ # still.
727
+ # ===================================================================== #
728
+ padded_amount_of_questions_answered = (n_questions - n_answered).to_s
729
+ padded_amount_of_questions_answered =
730
+ padded_amount_of_questions_answered.rjust(n_questions.to_s.size)
731
+ result << "#{crimson(padded_amount_of_questions_answered)} questions "\
732
+ "could still be answered. Topic: "\
733
+ "#{olive(return_the_full_expanded_exam_title)}.#{rev}"
734
+ e result
735
+ end
736
+ end; alias report_statistics show_statistics # === report_statistics
737
+
738
+ # ========================================================================= #
739
+ # === parse_the_random_line_from_the_obtained_dataset
740
+ #
741
+ # This method must also determine the split-position in the given
742
+ # exam-question-line, which is also called the "index" position.
743
+ #
744
+ # Example string:
745
+ #
746
+ # - Name abc def. A: <one>DNA-Methylation</one>.
747
+ #
748
+ # ========================================================================= #
749
+ def parse_the_random_line_from_the_obtained_dataset(
750
+ # ===================================================================== #
751
+ # Obtain a handle to the exam-question-line first.
752
+ # ===================================================================== #
753
+ _ = @internal_hash[:exam_question_line]
754
+ )
755
+ # if _
756
+ # # =================================================================== #
757
+ # # We will chop off leading '- ' tokens next. The reason for this
758
+ # # is that these leading '- ' are NEVER a part of a question-answer
759
+ # # combination. They exist purely because of this being visually
760
+ # # more pleasing to my eyes, so a cosmetic thing.
761
+ # # This was, however had, disabled in January of 2022, because it
762
+ # # led to problems in regards to storing the full line, which had
763
+ # # to be stored in an unmodified manner.
764
+ # # =================================================================== #
765
+ # _ = _.dup if _.frozen?
766
+ # if _.start_with? '- '
767
+ # _[0, 2] = '' # Chop off leading '- ' tokens.
768
+ # end
769
+ # end
770
+ if _.nil?
771
+ notify_the_user_that_all_questions_have_been_answered_already
772
+ exit_program
773
+ return
774
+ end
775
+ # ======================================================================= #
776
+ # We must determine the question and answer next. We do this by
777
+ # determining the index to split at. First, initialize it to 0.
778
+ # ======================================================================= #
779
+ index_to_split_at = 0
780
+ # ======================================================================= #
781
+ # The first strategy that is employed by this method is that the most
782
+ # important '?' token is to be found. If it is found then we can split
783
+ # split on it. This is, by definition, the very last '?' that
784
+ # we can find in the given String, hence why we use .rindex()
785
+ # rather than .index().
786
+ # ======================================================================= #
787
+ if _.include?('?')
788
+ index_to_split_at = _.rindex('?')
789
+ # ===================================================================== #
790
+ # Some entries may have a '?' but also a 'A:' token. In this case,
791
+ # we have to change the index position. However had, we must be
792
+ # careful here, as a few answers will contain something like this
793
+ # here:
794
+ #
795
+ # '(1) A: Asymmetry (2) B: Border (3) C: Color (4) D: Diameter (5) E: Evolving'
796
+ #
797
+ # ===================================================================== #
798
+ if _.include?('?') and
799
+ _.include?(' A: ') and
800
+ !(_ =~ /\d{1}\) A: /) # The last one here is explained above.
801
+ index_to_split_at = _.index(' A: ')
802
+ end
803
+ set_split_position(index_to_split_at)
804
+ elsif _.include?(' A: ') # This should be the only valid format in this case.
805
+ index_to_split_at = _.index(' A: ')
806
+ set_split_position(index_to_split_at)
807
+ else # And here we report that something isn't quite right in the given file.
808
+ opnn; e 'No ? and no A: was found. Please check the following line:'
809
+ e
810
+ e " #{tomato(_)}"
811
+ e
812
+ opnn; e
813
+ opnn; report_this_error
814
+ opnn; e
815
+ end
816
+ set_exam_question(_[0 .. index_to_split_at])
817
+ set_exam_answer(_[index_to_split_at .. -1])
818
+ end; alias determine_the_split_position parse_the_random_line_from_the_obtained_dataset # === determine_the_split_position
819
+ alias determine_index_position parse_the_random_line_from_the_obtained_dataset # === determine_index_position
820
+ alias parse_that_line parse_the_random_line_from_the_obtained_dataset # === parse_that_line
821
+ alias determine_the_question_and_the_answer parse_the_random_line_from_the_obtained_dataset # === determine_the_question_and_the_answer
822
+ alias determine_question_answer parse_the_random_line_from_the_obtained_dataset # === determine_question_answer
823
+
824
+ # ========================================================================= #
825
+ # === set_exam_question_line
826
+ #
827
+ # A full exam-question line, also shorter called "line", is a line that
828
+ # contains a question, and the associated answer to this question.
829
+ #
830
+ # This setter may not modify anything - we just want to assign to the
831
+ # correct entry in our main Hash. Additionally the line itself may
832
+ # not be tampered with at all, so that we can act on that information,
833
+ # such as by storing that line into a local file.
834
+ # ========================================================================= #
835
+ def set_exam_question_line(i)
836
+ if i.is_a? Array
837
+ i = i.first.to_s.dup # We only need the first entry in this case, if it is an Array.
838
+ end
839
+ # ======================================================================= #
840
+ # === Handle blocks next
841
+ # ======================================================================= #
842
+ if block_given?
843
+ case yield
844
+ # ===================================================================== #
845
+ # === :then_determine_the_split_position
846
+ # ===================================================================== #
847
+ when :then_determine_the_split_position
848
+ determine_the_split_position
849
+ end
850
+ end
851
+ @internal_hash[:exam_question_line] = i
852
+ end; alias set_line set_exam_question_line # === set_line
853
+ alias set_this_line set_exam_question_line # === set_this_line
854
+
855
+ # ========================================================================= #
856
+ # === store_last_topic_into_file
857
+ #
858
+ # By default we will not report this activity.
859
+ # ========================================================================= #
860
+ def store_last_topic_into_file(
861
+ what = topic?,
862
+ into = FILE_LAST_TOPIC # This would store into: "/root/Studium/last_topic.md"
863
+ )
864
+ write_what_into(what, into)
865
+ end
866
+
867
+ # ========================================================================= #
868
+ # === show_all_finished_exam_topics
869
+ #
870
+ # To invoke this method, do:
871
+ #
872
+ # qa --finished?
873
+ #
874
+ # ========================================================================= #
875
+ def show_all_finished_exam_topics
876
+ stats = Studium::Statistics::ReportHowManyExamQuestionsWereAnswered.new {
877
+ :do_not_show_the_result
878
+ }.internal_dataset
879
+ e "#{rev}The following topics are completely answered "\
880
+ "(#{colourize_percentage('100%')} answered ratio)."
881
+ array_finished_topics = []
882
+ stats.select {|key, value|
883
+ percentage = value[:percentage_of_questions_answered]
884
+ if percentage == 100.0
885
+ array_finished_topics << ::Studium.beautify_this_topic(key)
886
+ end
887
+ }
888
+ e
889
+ array_finished_topics.each {|topic|
890
+ e " #{simp(topic)} is completely answered."
891
+ }
892
+ e
893
+ end
894
+
895
+ end; end; end