studium 0.10.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 (882) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1982 -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/d10 +7 -0
  7. data/bin/d100 +7 -0
  8. data/bin/d15 +7 -0
  9. data/bin/d20 +7 -0
  10. data/bin/d25 +7 -0
  11. data/bin/d3 +7 -0
  12. data/bin/d30 +7 -0
  13. data/bin/d5 +7 -0
  14. data/bin/determine_curricula +7 -0
  15. data/bin/exam_registration_at +7 -0
  16. data/bin/exam_statistics +7 -0
  17. data/bin/exams_per_month +9 -0
  18. data/bin/finished_exams_at_this_university +7 -0
  19. data/bin/flashcards +7 -0
  20. data/bin/mandatory_continuous_assessment +7 -0
  21. data/bin/mandatory_upcoming_courses +7 -0
  22. data/bin/n_exam_questions_already_answered +16 -0
  23. data/bin/nquestions +7 -0
  24. data/bin/nsolved +7 -0
  25. data/bin/open_last_exam_question_asked_file +7 -0
  26. data/bin/passed_pr/303/274fungsimmanente_courses +7 -0
  27. data/bin/return_n_ects_from_this_file +7 -0
  28. data/bin/show_lectures_on_the_commandline +7 -0
  29. data/bin/show_themes +7 -0
  30. data/bin/solved +9 -0
  31. data/bin/solved_ects +7 -0
  32. data/bin/studienkennzahl +7 -0
  33. data/bin/studium +7 -0
  34. data/bin/studium_skeleton +7 -0
  35. data/bin/ufind +7 -0
  36. data/bin/upcoming_exams +7 -0
  37. data/bin/week_parser +7 -0
  38. data/doc/ECTS_CONSIDERATIONS.md +81 -0
  39. data/doc/HOW_TO_ADAPT_THIS_PROJECT.md +43 -0
  40. data/doc/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER.md +47 -0
  41. data/doc/README.gen +1965 -0
  42. data/doc/TODO_FOR_STUDIUM_GEM.md +113 -0
  43. data/doc/deprecated_components.md +24 -0
  44. data/doc/documentation_for_the_file_lecture_information.md +294 -0
  45. data/doc/elegant_colours.md +20 -0
  46. data/img/STUDIES.png +0 -0
  47. data/lib/studium.rb +5 -0
  48. data/lib/studium/autoinclude.rb +7 -0
  49. data/lib/studium/base/base.rb +84 -0
  50. data/lib/studium/base/cliner.rb +58 -0
  51. data/lib/studium/base/colours.rb +307 -0
  52. data/lib/studium/base/commandline_arguments.rb +64 -0
  53. data/lib/studium/base/constants.rb +34 -0
  54. data/lib/studium/base/curriculum.rb +329 -0
  55. data/lib/studium/base/directory_to_the_exam_topics.rb +23 -0
  56. data/lib/studium/base/editor.rb +28 -0
  57. data/lib/studium/base/encoding.rb +36 -0
  58. data/lib/studium/base/esystem.rb +23 -0
  59. data/lib/studium/base/minimal_prototype.rb +66 -0
  60. data/lib/studium/base/misc.rb +854 -0
  61. data/lib/studium/base/mode.rb +92 -0
  62. data/lib/studium/base/obtain.rb +145 -0
  63. data/lib/studium/base/opnn.rb +46 -0
  64. data/lib/studium/base/prototype.rb +92 -0
  65. data/lib/studium/base/readlines.rb +55 -0
  66. data/lib/studium/base/replace.rb +110 -0
  67. data/lib/studium/base/reset.rb +77 -0
  68. data/lib/studium/base/run.rb +17 -0
  69. data/lib/studium/base/src_dir_at_home.rb +20 -0
  70. data/lib/studium/base/time.rb +634 -0
  71. data/lib/studium/base/unicode.rb +95 -0
  72. data/lib/studium/base/word_wrap.rb +58 -0
  73. data/lib/studium/boku/README.md +4 -0
  74. data/lib/studium/boku/boku_biotechnology_all_master_lectures.rb +142 -0
  75. data/lib/studium/boku/boku_/303/266ffnungszeiten.rb +29 -0
  76. data/lib/studium/boku/show_three_pillars_of_these_lectures.rb +96 -0
  77. data/lib/studium/boku/three_pillars.rb +232 -0
  78. data/lib/studium/check_and_sanitize/README.md +11 -0
  79. data/lib/studium/check_and_sanitize/check_curriculum_for_correct_separation_of_bachelor_and_master.rb +149 -0
  80. data/lib/studium/check_and_sanitize/check_for_all_exam_topics_being_registered.rb +107 -0
  81. data/lib/studium/check_and_sanitize/check_for_existing_description_of_this_lecture.rb +197 -0
  82. data/lib/studium/check_and_sanitize/check_the_lecture_information_file.rb +171 -0
  83. data/lib/studium/check_and_sanitize/missing_priority_entry.rb +44 -0
  84. data/lib/studium/check_and_sanitize/sanitize_this_string_containing_the_lva_dates.rb +79 -0
  85. data/lib/studium/colours/colours.rb +570 -0
  86. data/lib/studium/colours/sfancy.rb +40 -0
  87. data/lib/studium/colours/sfile.rb +35 -0
  88. data/lib/studium/colours/simp.rb +38 -0
  89. data/lib/studium/colours/use_this_colour_for_exam_questions_and_exam_answers.rb +76 -0
  90. data/lib/studium/commandline/commandline.rb +25 -0
  91. data/lib/studium/commandline/constants.rb +16 -0
  92. data/lib/studium/commandline/help.rb +152 -0
  93. data/lib/studium/commandline/initialize.rb +27 -0
  94. data/lib/studium/commandline/menu.rb +760 -0
  95. data/lib/studium/commandline/misc.rb +707 -0
  96. data/lib/studium/commandline/reset.rb +24 -0
  97. data/lib/studium/commandline/run.rb +20 -0
  98. data/lib/studium/constants/boku_wien.rb +52 -0
  99. data/lib/studium/constants/constants.rb +25 -0
  100. data/lib/studium/constants/delay.rb +28 -0
  101. data/lib/studium/constants/editor.rb +28 -0
  102. data/lib/studium/constants/exam_topics.rb +183 -0
  103. data/lib/studium/constants/file_constants.rb +875 -0
  104. data/lib/studium/constants/image_constants.rb +216 -0
  105. data/lib/studium/constants/last_question_asked.rb +38 -0
  106. data/lib/studium/constants/lecture_types_that_are_mandatory_continuous_assessment.rb +47 -0
  107. data/lib/studium/constants/misc.rb +163 -0
  108. data/lib/studium/constants/namespace.rb +14 -0
  109. data/lib/studium/constants/newline.rb +14 -0
  110. data/lib/studium/constants/regexes.rb +35 -0
  111. data/lib/studium/constants/return_file_for_this_curriculum.rb +411 -0
  112. data/lib/studium/constants/roebe.rb +173 -0
  113. data/lib/studium/constants/time.rb +52 -0
  114. data/lib/studium/constants/tu_wien.rb +39 -0
  115. data/lib/studium/constants/uni_wien.rb +24 -0
  116. data/lib/studium/constants/unicode.rb +27 -0
  117. data/lib/studium/constants/week.rb +138 -0
  118. data/lib/studium/constants/www_constants.rb +23 -0
  119. data/lib/studium/curricula/curriculum.rb +199 -0
  120. data/lib/studium/curricula/curriculum_as_string.rb +279 -0
  121. data/lib/studium/curricula/curriculum_module_displayer/constants.rb +38 -0
  122. data/lib/studium/curricula/curriculum_module_displayer/curriculum_module_displayer.rb +417 -0
  123. data/lib/studium/curricula/curriculum_module_displayer/initialize.rb +25 -0
  124. data/lib/studium/curricula/curriculum_module_displayer/menu.rb +45 -0
  125. data/lib/studium/curricula/curriculum_module_displayer/reset.rb +77 -0
  126. data/lib/studium/curricula/curriculum_module_displayer/run.rb +20 -0
  127. data/lib/studium/curricula/curriculum_module_displayer/set_use_this_curriculum.rb +93 -0
  128. data/lib/studium/curricula/curriculum_module_displayer/show_and_report.rb +190 -0
  129. data/lib/studium/curricula/determine_curricula/constants.rb +16 -0
  130. data/lib/studium/curricula/determine_curricula/determine_curricula.rb +36 -0
  131. data/lib/studium/curricula/determine_curricula/help.rb +39 -0
  132. data/lib/studium/curricula/determine_curricula/initialize.rb +48 -0
  133. data/lib/studium/curricula/determine_curricula/menu.rb +138 -0
  134. data/lib/studium/curricula/determine_curricula/misc.rb +402 -0
  135. data/lib/studium/curricula/determine_curricula/report.rb +131 -0
  136. data/lib/studium/curricula/determine_curricula/reset.rb +62 -0
  137. data/lib/studium/curricula/determine_curricula/run.rb +19 -0
  138. data/lib/studium/curricula/determine_elective_courses_in_this_curriculum.rb +112 -0
  139. data/lib/studium/curricula/display_bachelor_curricula.rb +89 -0
  140. data/lib/studium/curricula/mitteilungsbl/303/244tter.rb +336 -0
  141. data/lib/studium/curricula/modules/display_on_the_commandline.rb +316 -0
  142. data/lib/studium/curricula/modules/return_n_ects_in_this_module.rb +74 -0
  143. data/lib/studium/curricula/n_percent_solved_in_this_curriculum.rb +75 -0
  144. data/lib/studium/curricula/random_curriculum_creator.rb +171 -0
  145. data/lib/studium/curricula/show_lectures_of_this_curriculum.rb +114 -0
  146. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/constants.rb +16 -0
  147. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/initialize.rb +27 -0
  148. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/menu.rb +35 -0
  149. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/misc.rb +242 -0
  150. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/report.rb +140 -0
  151. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/reset.rb +67 -0
  152. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/show_lectures_of_this_curriculum_id.rb +37 -0
  153. data/lib/studium/curricula/show_solved_percentage_among_the_registered_curricula.rb +87 -0
  154. data/lib/studium/ects/boku_ects_splitter.rb +127 -0
  155. data/lib/studium/ects/ects_parser.rb +179 -0
  156. data/lib/studium/ects/ects_per_university.rb +140 -0
  157. data/lib/studium/ects/ects_scanner.rb +141 -0
  158. data/lib/studium/ects/ects_to_university_parser.rb +148 -0
  159. data/lib/studium/ects/erledigt.rb +131 -0
  160. data/lib/studium/ects/last_entry_is_curriculum.rb +147 -0
  161. data/lib/studium/ects/n_ects_in_these_lectures.rb +185 -0
  162. data/lib/studium/ects/n_ects_points_in_mandatory_presence_courses.rb +50 -0
  163. data/lib/studium/ects/noch_zu_absolvieren.rb +172 -0
  164. data/lib/studium/ects/return_n_ects_from_this_file.rb +58 -0
  165. data/lib/studium/ects/return_n_ects_from_this_url.rb +202 -0
  166. data/lib/studium/ects/search_for_n_ects.rb +540 -0
  167. data/lib/studium/ects/show_completed_ects_in_all_curricula.rb +210 -0
  168. data/lib/studium/ects/show_passed_credits_per_curriculum.rb +254 -0
  169. data/lib/studium/ects/simple_total_ects_points.rb +143 -0
  170. data/lib/studium/ects/solved_ects/constants.rb +24 -0
  171. data/lib/studium/ects/solved_ects/reset.rb +54 -0
  172. data/lib/studium/ects/solved_ects/solved_ects.rb +325 -0
  173. data/lib/studium/ects/solved_ects_per_university/reset.rb +25 -0
  174. data/lib/studium/ects/solved_ects_per_university/solved_ects_per_university.rb +106 -0
  175. data/lib/studium/ects/still_missing.rb +133 -0
  176. data/lib/studium/ects/sum_of_ects.rb +150 -0
  177. data/lib/studium/encoding/encoding.rb +150 -0
  178. data/lib/studium/exam_topics/RNAi_siRNA_and_miRNA +79 -0
  179. data/lib/studium/exam_topics/abfall_als_ressource +86 -0
  180. data/lib/studium/exam_topics/advanced_biochemistry +762 -0
  181. data/lib/studium/exam_topics/advanced_biotechnology +192 -0
  182. data/lib/studium/exam_topics/advanced_cellbiology +25 -0
  183. data/lib/studium/exam_topics/advanced_chemistry +453 -0
  184. data/lib/studium/exam_topics/advanced_microbiology +44 -0
  185. data/lib/studium/exam_topics/advanced_topics_in_plant_sciences +51 -0
  186. data/lib/studium/exam_topics/advanced_virology +52 -0
  187. data/lib/studium/exam_topics/ageing +101 -0
  188. data/lib/studium/exam_topics/agrar_ecology +61 -0
  189. data/lib/studium/exam_topics/agrarmarkt +70 -0
  190. data/lib/studium/exam_topics/agrarphysik +35 -0
  191. data/lib/studium/exam_topics/alcohols +29 -0
  192. data/lib/studium/exam_topics/algorithms +49 -0
  193. data/lib/studium/exam_topics/allergie +73 -0
  194. data/lib/studium/exam_topics/allgemeine_genetik +1006 -0
  195. data/lib/studium/exam_topics/allgemeine_mikrobiologie +855 -0
  196. data/lib/studium/exam_topics/aminoacids +417 -0
  197. data/lib/studium/exam_topics/analytische_chemie_1 +131 -0
  198. data/lib/studium/exam_topics/analytische_chemie_2 +31 -0
  199. data/lib/studium/exam_topics/anatomie +248 -0
  200. data/lib/studium/exam_topics/anorganische_chemie +289 -0
  201. data/lib/studium/exam_topics/anthropologie +115 -0
  202. data/lib/studium/exam_topics/antibodies_and_antigens +747 -0
  203. data/lib/studium/exam_topics/apoptosis +35 -0
  204. data/lib/studium/exam_topics/archaea +41 -0
  205. data/lib/studium/exam_topics/architecture +8 -0
  206. data/lib/studium/exam_topics/artificial_intelligence +81 -0
  207. data/lib/studium/exam_topics/audio +10 -0
  208. data/lib/studium/exam_topics/bacteriophages +224 -0
  209. data/lib/studium/exam_topics/basic_biochemistry +1008 -0
  210. data/lib/studium/exam_topics/basic_biotechnology +1011 -0
  211. data/lib/studium/exam_topics/basic_chemistry +1007 -0
  212. data/lib/studium/exam_topics/basic_virology +955 -0
  213. data/lib/studium/exam_topics/bauwesen +6 -0
  214. data/lib/studium/exam_topics/betriebssysteme +125 -0
  215. data/lib/studium/exam_topics/betriebswirtschaftslehre +29 -0
  216. data/lib/studium/exam_topics/bioanalytik_und_biosensoren +381 -0
  217. data/lib/studium/exam_topics/biochips +78 -0
  218. data/lib/studium/exam_topics/bioelektrochemie +56 -0
  219. data/lib/studium/exam_topics/biofilms +22 -0
  220. data/lib/studium/exam_topics/bioinformatics +475 -0
  221. data/lib/studium/exam_topics/biological_therapeutics +152 -0
  222. data/lib/studium/exam_topics/biologie +134 -0
  223. data/lib/studium/exam_topics/biomarkers +106 -0
  224. data/lib/studium/exam_topics/biomaterials +46 -0
  225. data/lib/studium/exam_topics/biomembranes +6 -0
  226. data/lib/studium/exam_topics/bionik +65 -0
  227. data/lib/studium/exam_topics/biophysik +34 -0
  228. data/lib/studium/exam_topics/biopolymers +10 -0
  229. data/lib/studium/exam_topics/bioprozesstechnik +139 -0
  230. data/lib/studium/exam_topics/bioressourcenmanagement +78 -0
  231. data/lib/studium/exam_topics/bodenkunde +345 -0
  232. data/lib/studium/exam_topics/bodenmikrobiologie +40 -0
  233. data/lib/studium/exam_topics/cancerbiology +441 -0
  234. data/lib/studium/exam_topics/cell_cultures +154 -0
  235. data/lib/studium/exam_topics/cellbiology +962 -0
  236. data/lib/studium/exam_topics/cellular_transport_and_protein_secretion +27 -0
  237. data/lib/studium/exam_topics/chemische_technologie_anorganischer_stoffe +208 -0
  238. data/lib/studium/exam_topics/chemisches_labor +59 -0
  239. data/lib/studium/exam_topics/chemotaxis_and_motility_in_prokaryotes +74 -0
  240. data/lib/studium/exam_topics/citric_acid_cycle +70 -0
  241. data/lib/studium/exam_topics/clinical_microbiology +486 -0
  242. data/lib/studium/exam_topics/computer_graphics +5 -0
  243. data/lib/studium/exam_topics/computer_science +269 -0
  244. data/lib/studium/exam_topics/crispr +25 -0
  245. data/lib/studium/exam_topics/cyanobacteria +37 -0
  246. data/lib/studium/exam_topics/cytogenetics_and_chromosome_biology +506 -0
  247. data/lib/studium/exam_topics/databases_and_sql +105 -0
  248. data/lib/studium/exam_topics/dna_mutation_and_dna_repair +33 -0
  249. data/lib/studium/exam_topics/dna_replication +53 -0
  250. data/lib/studium/exam_topics/ecogenetics +27 -0
  251. data/lib/studium/exam_topics/ecological_agriculture +12 -0
  252. data/lib/studium/exam_topics/ecology +313 -0
  253. data/lib/studium/exam_topics/economy +210 -0
  254. data/lib/studium/exam_topics/elektronenmikroskopie +353 -0
  255. data/lib/studium/exam_topics/elektrophorese +88 -0
  256. data/lib/studium/exam_topics/elektrotechnik +8 -0
  257. data/lib/studium/exam_topics/elisa +54 -0
  258. data/lib/studium/exam_topics/embryologie_und_entwicklung +541 -0
  259. data/lib/studium/exam_topics/endospores_and_spores +92 -0
  260. data/lib/studium/exam_topics/enzymes_and_cofactors +327 -0
  261. data/lib/studium/exam_topics/epigenetik +177 -0
  262. data/lib/studium/exam_topics/ethik +125 -0
  263. data/lib/studium/exam_topics/evolution_and_evolutionary_genetics +323 -0
  264. data/lib/studium/exam_topics/excel +7 -0
  265. data/lib/studium/exam_topics/fish +19 -0
  266. data/lib/studium/exam_topics/fluorescence_microscopy +7 -0
  267. data/lib/studium/exam_topics/food_microbiology_and_food_biotechnology +17 -0
  268. data/lib/studium/exam_topics/forensik +11 -0
  269. data/lib/studium/exam_topics/forstwirtschaft +52 -0
  270. data/lib/studium/exam_topics/fortgeschrittene_genetik +429 -0
  271. data/lib/studium/exam_topics/fortgeschrittene_gentechnik +189 -0
  272. data/lib/studium/exam_topics/fortgeschrittene_physik +6 -0
  273. data/lib/studium/exam_topics/fungi +78 -0
  274. data/lib/studium/exam_topics/genetische_krankheiten +150 -0
  275. data/lib/studium/exam_topics/genexpression +1008 -0
  276. data/lib/studium/exam_topics/genomics_and_metagenomics +205 -0
  277. data/lib/studium/exam_topics/gentechnik_und_praktische_biochemie +863 -0
  278. data/lib/studium/exam_topics/geochemistry +66 -0
  279. data/lib/studium/exam_topics/geography +5 -0
  280. data/lib/studium/exam_topics/geologie_und_mineralogie +610 -0
  281. data/lib/studium/exam_topics/geschichte +94 -0
  282. data/lib/studium/exam_topics/gluconeogenesis +34 -0
  283. data/lib/studium/exam_topics/glycolysis +95 -0
  284. data/lib/studium/exam_topics/glykomik +42 -0
  285. data/lib/studium/exam_topics/glyoxylatzyklus +23 -0
  286. data/lib/studium/exam_topics/grassland_cultivation +32 -0
  287. data/lib/studium/exam_topics/hormone +122 -0
  288. data/lib/studium/exam_topics/html +7 -0
  289. data/lib/studium/exam_topics/human_ecology +8 -0
  290. data/lib/studium/exam_topics/hygiene +191 -0
  291. data/lib/studium/exam_topics/imaging_and_microscopy +224 -0
  292. data/lib/studium/exam_topics/immunanalytik +88 -0
  293. data/lib/studium/exam_topics/immunologie +888 -0
  294. data/lib/studium/exam_topics/informatik +95 -0
  295. data/lib/studium/exam_topics/innate_immunity +20 -0
  296. data/lib/studium/exam_topics/insekten +30 -0
  297. data/lib/studium/exam_topics/insulin_and_diabetes +55 -0
  298. data/lib/studium/exam_topics/java +440 -0
  299. data/lib/studium/exam_topics/javascript +10 -0
  300. data/lib/studium/exam_topics/klima +6 -0
  301. data/lib/studium/exam_topics/landtechnik +27 -0
  302. data/lib/studium/exam_topics/lebensmittel +206 -0
  303. data/lib/studium/exam_topics/lebensmitteltechnologie +16 -0
  304. data/lib/studium/exam_topics/linux +5 -0
  305. data/lib/studium/exam_topics/lipids +95 -0
  306. data/lib/studium/exam_topics/macroeconomics +39 -0
  307. data/lib/studium/exam_topics/mathematics +175 -0
  308. data/lib/studium/exam_topics/medizin_und_biomedizinische_technik +250 -0
  309. data/lib/studium/exam_topics/medizinische_chemie_und_pharmazie +397 -0
  310. data/lib/studium/exam_topics/messtechnik_und_regeltechnik +104 -0
  311. data/lib/studium/exam_topics/metabolismus +433 -0
  312. data/lib/studium/exam_topics/microbial_ecology +35 -0
  313. data/lib/studium/exam_topics/mikrobielle_lebensgemeinschaften +34 -0
  314. data/lib/studium/exam_topics/mikrobielle_physiologie +153 -0
  315. data/lib/studium/exam_topics/mixed +289 -0
  316. data/lib/studium/exam_topics/molecular_biology_of_plants +235 -0
  317. data/lib/studium/exam_topics/molekulare_medizin +129 -0
  318. data/lib/studium/exam_topics/nanotechnologie +303 -0
  319. data/lib/studium/exam_topics/nature_conservation_and_biodiversity +165 -0
  320. data/lib/studium/exam_topics/naturstoffe +9 -0
  321. data/lib/studium/exam_topics/netzwerke +32 -0
  322. data/lib/studium/exam_topics/neurobiology +266 -0
  323. data/lib/studium/exam_topics/nucleotide_sequencing +30 -0
  324. data/lib/studium/exam_topics/object_oriented_modeling +14 -0
  325. data/lib/studium/exam_topics/obstbau +234 -0
  326. data/lib/studium/exam_topics/organische_chemie +1007 -0
  327. data/lib/studium/exam_topics/organische_chemie_2 +72 -0
  328. data/lib/studium/exam_topics/paleobiology +33 -0
  329. data/lib/studium/exam_topics/parasitic_diseases_and_molecular_infection_biology +335 -0
  330. data/lib/studium/exam_topics/patent_law +55 -0
  331. data/lib/studium/exam_topics/pathologie +713 -0
  332. data/lib/studium/exam_topics/pcr +133 -0
  333. data/lib/studium/exam_topics/peroxisomes_glycosomes_and_lysosomes +54 -0
  334. data/lib/studium/exam_topics/pflanzenanatomie +240 -0
  335. data/lib/studium/exam_topics/pflanzenbau +24 -0
  336. data/lib/studium/exam_topics/pflanzenschutz +35 -0
  337. data/lib/studium/exam_topics/pflanzenwissenschaften +1009 -0
  338. data/lib/studium/exam_topics/pharmaceutical_biotechnology +250 -0
  339. data/lib/studium/exam_topics/physik +338 -0
  340. data/lib/studium/exam_topics/physikalische_chemie +85 -0
  341. data/lib/studium/exam_topics/physiology_and_histology +485 -0
  342. data/lib/studium/exam_topics/phytochemie +33 -0
  343. data/lib/studium/exam_topics/plant_biotechnology +127 -0
  344. data/lib/studium/exam_topics/plant_breeding +64 -0
  345. data/lib/studium/exam_topics/plant_development +50 -0
  346. data/lib/studium/exam_topics/populationsgenetik +136 -0
  347. data/lib/studium/exam_topics/posttranslationale_modifikation_von_proteinen +186 -0
  348. data/lib/studium/exam_topics/projektmanagement +218 -0
  349. data/lib/studium/exam_topics/prokaryote_genetics +470 -0
  350. data/lib/studium/exam_topics/proteomik +38 -0
  351. data/lib/studium/exam_topics/prozesstechnik +95 -0
  352. data/lib/studium/exam_topics/psychologie +9 -0
  353. data/lib/studium/exam_topics/python +350 -0
  354. data/lib/studium/exam_topics/quality_management +241 -0
  355. data/lib/studium/exam_topics/rechtsgrundlagen +115 -0
  356. data/lib/studium/exam_topics/research_topics_in_immunobiology +42 -0
  357. data/lib/studium/exam_topics/rna_and_dna +362 -0
  358. data/lib/studium/exam_topics/rna_seq +11 -0
  359. data/lib/studium/exam_topics/ruby +131 -0
  360. data/lib/studium/exam_topics/ruby_on_rails +62 -0
  361. data/lib/studium/exam_topics/scientific_writing_and_publishing +38 -0
  362. data/lib/studium/exam_topics/semisynthese_von_proteinen_und_nukleotiden +120 -0
  363. data/lib/studium/exam_topics/sexualbiologie +59 -0
  364. data/lib/studium/exam_topics/signal_transduction_and_laser_systems +136 -0
  365. data/lib/studium/exam_topics/splicing_exons_and_introns +57 -0
  366. data/lib/studium/exam_topics/statistik +202 -0
  367. data/lib/studium/exam_topics/stemcells +87 -0
  368. data/lib/studium/exam_topics/structural_bioinformatics +54 -0
  369. data/lib/studium/exam_topics/strukturbiologie +319 -0
  370. data/lib/studium/exam_topics/system_biology_and_synthetic_biology +87 -0
  371. data/lib/studium/exam_topics/systematische_zoologie +430 -0
  372. data/lib/studium/exam_topics/technical_ecology +144 -0
  373. data/lib/studium/exam_topics/technische_chemie +194 -0
  374. data/lib/studium/exam_topics/technische_grundlagen_der_informatik +22 -0
  375. data/lib/studium/exam_topics/technische_mikrobiologie +403 -0
  376. data/lib/studium/exam_topics/technisches_zeichnen +5 -0
  377. data/lib/studium/exam_topics/the_bacterial_cell_wall +86 -0
  378. data/lib/studium/exam_topics/the_c_plus_plus_programming_language +488 -0
  379. data/lib/studium/exam_topics/the_c_programming_language +128 -0
  380. data/lib/studium/exam_topics/the_cellcycle +65 -0
  381. data/lib/studium/exam_topics/the_european_union +119 -0
  382. data/lib/studium/exam_topics/the_interferon_system +32 -0
  383. data/lib/studium/exam_topics/the_microbiome +163 -0
  384. data/lib/studium/exam_topics/the_universe +6 -0
  385. data/lib/studium/exam_topics/theoretische_chemie +5 -0
  386. data/lib/studium/exam_topics/theoretische_informatik +157 -0
  387. data/lib/studium/exam_topics/tierzucht +94 -0
  388. data/lib/studium/exam_topics/toxikologie +403 -0
  389. data/lib/studium/exam_topics/transcription +26 -0
  390. data/lib/studium/exam_topics/translation_ribosomes_and_translational_control +138 -0
  391. data/lib/studium/exam_topics/umweltbiotechnologie +58 -0
  392. data/lib/studium/exam_topics/umweltchemie +233 -0
  393. data/lib/studium/exam_topics/urbanism_and_traffic +19 -0
  394. data/lib/studium/exam_topics/vaccines_and_vaccination +234 -0
  395. data/lib/studium/exam_topics/vectors_and_gene_therapy +237 -0
  396. data/lib/studium/exam_topics/verfahrenstechnik +32 -0
  397. data/lib/studium/exam_topics/veterinary_medicine +10 -0
  398. data/lib/studium/exam_topics/vitamine +19 -0
  399. data/lib/studium/exam_topics/wasserkunde +141 -0
  400. data/lib/studium/exam_topics/weinbau +59 -0
  401. data/lib/studium/exam_topics/wissenschaft +17 -0
  402. data/lib/studium/exam_topics/yeast +97 -0
  403. data/lib/studium/exam_topics/zoologie +329 -0
  404. data/lib/studium/exams/afterburn.rb +264 -0
  405. data/lib/studium/exams/ask_exam_from_the_upcoming_exams_pool.rb +158 -0
  406. data/lib/studium/exams/ask_exam_question/answer.rb +106 -0
  407. data/lib/studium/exams/ask_exam_question/ask_exam_question.rb +135 -0
  408. data/lib/studium/exams/ask_exam_question/constants.rb +74 -0
  409. data/lib/studium/exams/ask_exam_question/delay.rb +101 -0
  410. data/lib/studium/exams/ask_exam_question/help.rb +72 -0
  411. data/lib/studium/exams/ask_exam_question/initialize.rb +70 -0
  412. data/lib/studium/exams/ask_exam_question/menu.rb +382 -0
  413. data/lib/studium/exams/ask_exam_question/misc.rb +938 -0
  414. data/lib/studium/exams/ask_exam_question/question.rb +77 -0
  415. data/lib/studium/exams/ask_exam_question/reset.rb +103 -0
  416. data/lib/studium/exams/ask_exam_question/run.rb +49 -0
  417. data/lib/studium/exams/ask_exam_topic_question.rb +120 -0
  418. data/lib/studium/exams/ask_question_from_alias.rb +151 -0
  419. data/lib/studium/exams/ask_question_from_any_of_the_still_missing_lectures.rb +133 -0
  420. data/lib/studium/exams/ask_question_from_grouped_themes.rb +141 -0
  421. data/lib/studium/exams/ask_question_from_last_topic.rb +93 -0
  422. data/lib/studium/exams/ask_random_question.rb +190 -0
  423. data/lib/studium/exams/autoinclude.rb +7 -0
  424. data/lib/studium/exams/class.rb +127 -0
  425. data/lib/studium/exams/csv/create_csv_passed_exams_file.rb +225 -0
  426. data/lib/studium/exams/cycle.rb +283 -0
  427. data/lib/studium/exams/dataset.rb +90 -0
  428. data/lib/studium/exams/exam_registration_at/constants.rb +49 -0
  429. data/lib/studium/exams/exam_registration_at/exam_registration_at.rb +254 -0
  430. data/lib/studium/exams/exam_registration_at/help.rb +46 -0
  431. data/lib/studium/exams/exam_registration_at/menu.rb +81 -0
  432. data/lib/studium/exams/exam_registration_at/report.rb +108 -0
  433. data/lib/studium/exams/exam_registration_at/reset.rb +49 -0
  434. data/lib/studium/exams/exam_statistics_from_this_file/exam_statistics_from_this_file.rb +127 -0
  435. data/lib/studium/exams/exam_topics.rb +202 -0
  436. data/lib/studium/exams/exams.rb +18 -0
  437. data/lib/studium/exams/exams_per_month/colours.rb +81 -0
  438. data/lib/studium/exams/exams_per_month/constants.rb +69 -0
  439. data/lib/studium/exams/exams_per_month/dataset.rb +64 -0
  440. data/lib/studium/exams/exams_per_month/exams_per_month.rb +291 -0
  441. data/lib/studium/exams/exams_per_month/help.rb +72 -0
  442. data/lib/studium/exams/exams_per_month/initialize.rb +39 -0
  443. data/lib/studium/exams/exams_per_month/menu.rb +258 -0
  444. data/lib/studium/exams/exams_per_month/open.rb +139 -0
  445. data/lib/studium/exams/exams_per_month/requires.rb +8 -0
  446. data/lib/studium/exams/exams_per_month/reset.rb +115 -0
  447. data/lib/studium/exams/exams_per_month/run.rb +18 -0
  448. data/lib/studium/exams/exams_per_month/sanitize.rb +129 -0
  449. data/lib/studium/exams/exams_per_month/show_and_report.rb +1281 -0
  450. data/lib/studium/exams/exams_this_week.rb +179 -0
  451. data/lib/studium/exams/fix_exam_dates.rb +129 -0
  452. data/lib/studium/exams/last_exams/last_exams.rb +381 -0
  453. data/lib/studium/exams/lectures_without_exam_entry.rb +145 -0
  454. data/lib/studium/exams/mandatory_continuous_assessment/compare.rb +144 -0
  455. data/lib/studium/exams/mandatory_continuous_assessment/constants.rb +18 -0
  456. data/lib/studium/exams/mandatory_continuous_assessment/help.rb +92 -0
  457. data/lib/studium/exams/mandatory_continuous_assessment/initialize.rb +46 -0
  458. data/lib/studium/exams/mandatory_continuous_assessment/mandatory_continuous_assessment.rb +1115 -0
  459. data/lib/studium/exams/mandatory_continuous_assessment/menu.rb +114 -0
  460. data/lib/studium/exams/mandatory_continuous_assessment/misc.rb +61 -0
  461. data/lib/studium/exams/mandatory_continuous_assessment/reset.rb +85 -0
  462. data/lib/studium/exams/mandatory_continuous_assessment/run.rb +33 -0
  463. data/lib/studium/exams/mandatory_continuous_assessment/set_title_of_the_curriculum.rb +181 -0
  464. data/lib/studium/exams/mandatory_continuous_assessment/show_and_report.rb +147 -0
  465. 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 +119 -0
  466. data/lib/studium/exams/n_exams_in_these_topics.rb +408 -0
  467. data/lib/studium/exams/new_questions_per_year.rb +153 -0
  468. data/lib/studium/exams/next_exam.rb +111 -0
  469. data/lib/studium/exams/next_exams.rb +385 -0
  470. data/lib/studium/exams/open_exam_associated_url.rb +158 -0
  471. data/lib/studium/exams/open_last_exam_question_asked_file/constants.rb +20 -0
  472. data/lib/studium/exams/open_last_exam_question_asked_file/initialize.rb +29 -0
  473. data/lib/studium/exams/open_last_exam_question_asked_file/open_last_exam_question_asked_file.rb +112 -0
  474. data/lib/studium/exams/passed_exams/passed_exams.rb +46 -0
  475. data/lib/studium/exams/pruefung.rb +288 -0
  476. data/lib/studium/exams/push_solved_questions_on_top.rb +188 -0
  477. data/lib/studium/exams/question_answer/question_answer.rb +842 -0
  478. data/lib/studium/exams/questions_solved_from_day_to_day.rb +353 -0
  479. data/lib/studium/exams/repeat_last_question.rb +78 -0
  480. data/lib/studium/exams/show_all_passed_exams_of_this_university.rb +260 -0
  481. data/lib/studium/exams/show_backlog_of_exams.rb +125 -0
  482. data/lib/studium/exams/show_next_exams_for.rb +141 -0
  483. data/lib/studium/exams/show_themes/constants.rb +33 -0
  484. data/lib/studium/exams/show_themes/menu.rb +61 -0
  485. data/lib/studium/exams/show_themes/misc.rb +536 -0
  486. data/lib/studium/exams/show_themes/reset.rb +64 -0
  487. data/lib/studium/exams/show_themes/show_themes.rb +27 -0
  488. data/lib/studium/exams/show_upcoming_exams/consider_autogenerating_exam_aliases.rb +170 -0
  489. data/lib/studium/exams/show_upcoming_exams/constants.rb +82 -0
  490. data/lib/studium/exams/show_upcoming_exams/help.rb +33 -0
  491. data/lib/studium/exams/show_upcoming_exams/initialize.rb +71 -0
  492. data/lib/studium/exams/show_upcoming_exams/menu.rb +53 -0
  493. data/lib/studium/exams/show_upcoming_exams/report.rb +195 -0
  494. data/lib/studium/exams/show_upcoming_exams/reset.rb +38 -0
  495. data/lib/studium/exams/show_upcoming_exams/run.rb +20 -0
  496. data/lib/studium/exams/show_upcoming_exams/show_upcoming_exams.rb +494 -0
  497. data/lib/studium/exams/solve_all_questions_from_this_topic.rb +122 -0
  498. data/lib/studium/exams/solved/constants.rb +37 -0
  499. data/lib/studium/exams/solved/help.rb +23 -0
  500. data/lib/studium/exams/solved/menu.rb +35 -0
  501. data/lib/studium/exams/solved/reset.rb +30 -0
  502. data/lib/studium/exams/solved/solved.rb +306 -0
  503. data/lib/studium/exams/steop.rb +99 -0
  504. data/lib/studium/exams/unsolve_all_questions_from_this_topic.rb +170 -0
  505. data/lib/studium/exams/upcoming_exams/constants.rb +20 -0
  506. data/lib/studium/exams/upcoming_exams/help.rb +38 -0
  507. data/lib/studium/exams/upcoming_exams/initialize.rb +27 -0
  508. data/lib/studium/exams/upcoming_exams/menu.rb +79 -0
  509. data/lib/studium/exams/upcoming_exams/misc.rb +360 -0
  510. data/lib/studium/exams/upcoming_exams/reset.rb +37 -0
  511. data/lib/studium/exams/upcoming_exams/run.rb +25 -0
  512. data/lib/studium/exams/upcoming_exams/upcoming_exams.rb +32 -0
  513. data/lib/studium/exams/upcoming_exams_at_the_boku/constants.rb +23 -0
  514. data/lib/studium/exams/upcoming_exams_at_the_boku/html.rb +64 -0
  515. data/lib/studium/exams/upcoming_exams_at_the_boku/upcoming_exams_at_the_boku.rb +194 -0
  516. data/lib/studium/exams/upcoming_exams_dataset.rb +251 -0
  517. data/lib/studium/exams/upload_exam_topics.rb +357 -0
  518. data/lib/studium/flashcards/flashcards.rb +95 -0
  519. data/lib/studium/graphviz/README.md +4 -0
  520. data/lib/studium/graphviz/bachelor_vector_based_strategies.dot +160 -0
  521. data/lib/studium/graphviz/master_vector_based_strategies.dot +46 -0
  522. data/lib/studium/gui/gtk2/constants.rb +52 -0
  523. data/lib/studium/gui/gtk2/exam_card.rb +199 -0
  524. data/lib/studium/gui/gtk2/flip_card.rb +8 -0
  525. data/lib/studium/gui/gtk2/frame.rb +319 -0
  526. data/lib/studium/gui/gtk2/main_box.rb +188 -0
  527. data/lib/studium/gui/gtk2/misc.rb +99 -0
  528. data/lib/studium/gui/gtk2/module_methods.rb +58 -0
  529. data/lib/studium/gui/gtk2/require_gtk_files.rb +25 -0
  530. data/lib/studium/gui/gtk2/run.rb +47 -0
  531. data/lib/studium/gui/gtk2/show_curriculum_entries.rb +186 -0
  532. data/lib/studium/gui/gtk2/simple_widget_question_answer.rb +185 -0
  533. data/lib/studium/gui/gtk2/vbox.rb +748 -0
  534. data/lib/studium/gui/gtk3/README.md +1 -0
  535. data/lib/studium/gui/gtk3/studium_panel.rb +54 -0
  536. data/lib/studium/lectures/show_lectures_on_the_commandline/constants.rb +22 -0
  537. data/lib/studium/lectures/show_lectures_on_the_commandline/determine.rb +630 -0
  538. data/lib/studium/lectures/show_lectures_on_the_commandline/help.rb +44 -0
  539. data/lib/studium/lectures/show_lectures_on_the_commandline/html.rb +599 -0
  540. data/lib/studium/lectures/show_lectures_on_the_commandline/initialize.rb +53 -0
  541. data/lib/studium/lectures/show_lectures_on_the_commandline/konsole.rb +32 -0
  542. data/lib/studium/lectures/show_lectures_on_the_commandline/menu.rb +466 -0
  543. data/lib/studium/lectures/show_lectures_on_the_commandline/misc.rb +598 -0
  544. data/lib/studium/lectures/show_lectures_on_the_commandline/reset.rb +120 -0
  545. data/lib/studium/lectures/show_lectures_on_the_commandline/run.rb +44 -0
  546. data/lib/studium/lectures/show_lectures_on_the_commandline/show.rb +106 -0
  547. data/lib/studium/lectures/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb +491 -0
  548. data/lib/studium/lectures/show_lectures_on_the_commandline/sorted_individual_curricula.rb +117 -0
  549. data/lib/studium/logging/README.md +2 -0
  550. data/lib/studium/logging/ensure_that_the_log_directory_exists.rb +47 -0
  551. data/lib/studium/logging/html_log_directory.rb +35 -0
  552. data/lib/studium/logging/log_directory.rb +100 -0
  553. data/lib/studium/logging/store_last_question_asked_into_file.rb +138 -0
  554. data/lib/studium/misc/return_remote_homepage_of_this_lecture.rb +8661 -0
  555. data/lib/studium/misc/return_remote_moodle_link_of_this_lecture.rb +1343 -0
  556. data/lib/studium/parsers/README.md +2 -0
  557. data/lib/studium/parsers/custom_exam_results_parser.rb +208 -0
  558. data/lib/studium/parsers/parse_lva_dates.rb +190 -0
  559. data/lib/studium/pdf/README.md +2 -0
  560. data/lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb +277 -0
  561. data/lib/studium/project/project.rb +80 -0
  562. data/lib/studium/requires/common_popular_requires.rb +37 -0
  563. data/lib/studium/requires/commonly_used_requires.rb +13 -0
  564. data/lib/studium/requires/require_class_exams_solved.rb +7 -0
  565. data/lib/studium/requires/require_ects_scripts.rb +25 -0
  566. data/lib/studium/requires/require_encoding.rb +7 -0
  567. data/lib/studium/requires/require_the_exam_scripts.rb +37 -0
  568. data/lib/studium/requires/require_the_studium_constants.rb +14 -0
  569. data/lib/studium/requires/require_the_studium_project.rb +47 -0
  570. data/lib/studium/requires/require_the_utility_scripts.rb +26 -0
  571. data/lib/studium/requires/require_toplevel_methods.rb +26 -0
  572. data/lib/studium/requires/require_upcoming_exams.rb +7 -0
  573. data/lib/studium/requires/require_yaml.rb +7 -0
  574. data/lib/studium/requires/with_GUI.rb +12 -0
  575. data/lib/studium/requires/www_mode.rb +17 -0
  576. data/lib/studium/sinatra/app.rb +225 -0
  577. data/lib/studium/sinatra/misc.rb +111 -0
  578. data/lib/studium/statistics/README.md +4 -0
  579. data/lib/studium/statistics/best_exam_months.rb +81 -0
  580. data/lib/studium/statistics/curriculum_comparer.rb +344 -0
  581. data/lib/studium/statistics/determine_exam_statistics_from_this_file.rb +140 -0
  582. data/lib/studium/statistics/max_stats.rb +171 -0
  583. data/lib/studium/statistics/report_how_many_ects_points_per_curriculum_were_completed.rb +172 -0
  584. data/lib/studium/statistics/report_how_many_exam_questions_were_answered.rb +478 -0
  585. data/lib/studium/statistics/show_exam_statistics.rb +60 -0
  586. data/lib/studium/statistics/top_stats.rb +122 -0
  587. data/lib/studium/steop/README.md +4 -0
  588. data/lib/studium/steop/show_all_steop_lectures.rb +101 -0
  589. data/lib/studium/steop/steop_lectures_in_this_curriculum.rb +291 -0
  590. data/lib/studium/steop/steop_lva_dates.rb +102 -0
  591. data/lib/studium/toplevel_methods/all_passed_exams.rb +35 -0
  592. data/lib/studium/toplevel_methods/already_solved_this_lecture.rb +98 -0
  593. data/lib/studium/toplevel_methods/available_curricula.rb +71 -0
  594. data/lib/studium/toplevel_methods/available_topics.rb +145 -0
  595. data/lib/studium/toplevel_methods/average_grade.rb +141 -0
  596. data/lib/studium/toplevel_methods/calculate_pr/303/274fungsimmanente_lectures_from_this_file.rb +55 -0
  597. data/lib/studium/toplevel_methods/cd.rb +25 -0
  598. data/lib/studium/toplevel_methods/cd_stud.rb +134 -0
  599. data/lib/studium/toplevel_methods/copy_the_last_backup_of_file_lecture_information.rb +27 -0
  600. data/lib/studium/toplevel_methods/determine_local_directory_of_this_lecture.rb +72 -0
  601. data/lib/studium/toplevel_methods/does_this_course_require_mandatory_presence.rb +44 -0
  602. data/lib/studium/toplevel_methods/download.rb +157 -0
  603. data/lib/studium/toplevel_methods/e.rb +16 -0
  604. data/lib/studium/toplevel_methods/ects_from_lectures.rb +251 -0
  605. data/lib/studium/toplevel_methods/editor.rb +64 -0
  606. data/lib/studium/toplevel_methods/esystem.rb +22 -0
  607. data/lib/studium/toplevel_methods/exams_dataset.rb +45 -0
  608. data/lib/studium/toplevel_methods/filter_away_invalid_questions.rb +77 -0
  609. data/lib/studium/toplevel_methods/find_exam_topic_and_exam_title.rb +2771 -0
  610. data/lib/studium/toplevel_methods/from_curriculum_id_to_university.rb +47 -0
  611. data/lib/studium/toplevel_methods/frozen.rb +32 -0
  612. data/lib/studium/toplevel_methods/handle_archive_of_the_exam_questions.rb +136 -0
  613. data/lib/studium/toplevel_methods/has_a_bachelor_or_master_curriculum.rb +84 -0
  614. data/lib/studium/toplevel_methods/has_this_lecture_been_already_passed_but_the_id_was_changed_lateron.rb +41 -0
  615. data/lib/studium/toplevel_methods/has_this_module_been_completed.rb +206 -0
  616. data/lib/studium/toplevel_methods/install_the_project_on_the_given_hostsystem.rb +32 -0
  617. data/lib/studium/toplevel_methods/is_on_roebe.rb +26 -0
  618. data/lib/studium/toplevel_methods/is_this_exam_topic_included.rb +46 -0
  619. data/lib/studium/toplevel_methods/is_this_homepage_registered.rb +31 -0
  620. data/lib/studium/toplevel_methods/is_this_lecture_a_practical_course.rb +100 -0
  621. data/lib/studium/toplevel_methods/is_this_lecture_part_of_the_vector_curriculum.rb +110 -0
  622. data/lib/studium/toplevel_methods/is_this_lecture_registered_in_upcoming_exams.rb +43 -0
  623. data/lib/studium/toplevel_methods/lecture_information.rb +101 -0
  624. data/lib/studium/toplevel_methods/lectures_without_attribution_to_any_curriculum.rb +42 -0
  625. data/lib/studium/toplevel_methods/lva_numbers.rb +339 -0
  626. data/lib/studium/toplevel_methods/main_dataset.rb +73 -0
  627. data/lib/studium/toplevel_methods/map_curriculum_number_to_curriculum_name.rb +97 -0
  628. data/lib/studium/toplevel_methods/methods_related_to_curricula.rb +47 -0
  629. data/lib/studium/toplevel_methods/methods_related_to_files.rb +197 -0
  630. data/lib/studium/toplevel_methods/mkdir.rb +25 -0
  631. data/lib/studium/toplevel_methods/n_questions_available.rb +128 -0
  632. data/lib/studium/toplevel_methods/n_topics_available.rb +63 -0
  633. data/lib/studium/toplevel_methods/name_of_this_curriculum.rb +38 -0
  634. data/lib/studium/toplevel_methods/names_of_all_solved_exams.rb +71 -0
  635. data/lib/studium/toplevel_methods/note_down_the_start_time_and_how_many_exams_have_been_already_solved.rb +70 -0
  636. data/lib/studium/toplevel_methods/opnn.rb +25 -0
  637. data/lib/studium/toplevel_methods/passed_this_exam_on.rb +105 -0
  638. data/lib/studium/toplevel_methods/pristine.rb +69 -0
  639. data/lib/studium/toplevel_methods/read_dataset_from_a_curriculum_file.rb +133 -0
  640. data/lib/studium/toplevel_methods/read_delay_between_questions_from_file.rb +34 -0
  641. data/lib/studium/toplevel_methods/regexes.rb +90 -0
  642. data/lib/studium/toplevel_methods/registered_for_this_exam.rb +62 -0
  643. data/lib/studium/toplevel_methods/remote_url.rb +57 -0
  644. data/lib/studium/toplevel_methods/remove_comments.rb +26 -0
  645. data/lib/studium/toplevel_methods/remove_exam_topics_that_were_already_answered.rb +27 -0
  646. data/lib/studium/toplevel_methods/remove_tags.rb +26 -0
  647. data/lib/studium/toplevel_methods/report.rb +143 -0
  648. data/lib/studium/toplevel_methods/report_all_lectures_matching_this_lecture_type.rb +45 -0
  649. data/lib/studium/toplevel_methods/report_attributed_lectures_to_universities.rb +30 -0
  650. data/lib/studium/toplevel_methods/report_n_ects_per_university.rb +63 -0
  651. data/lib/studium/toplevel_methods/report_n_entries_in_the_file_lecture_information.rb +36 -0
  652. data/lib/studium/toplevel_methods/report_nquestions_of.rb +96 -0
  653. data/lib/studium/toplevel_methods/report_solved_topics.rb +56 -0
  654. data/lib/studium/toplevel_methods/return_all_exams_on_this_day.rb +66 -0
  655. data/lib/studium/toplevel_methods/return_curriculum_of_this_lva_number.rb +82 -0
  656. data/lib/studium/toplevel_methods/return_dataset_for_this_exam_topic.rb +41 -0
  657. data/lib/studium/toplevel_methods/return_dataset_from_this_curriculum_file.rb +150 -0
  658. data/lib/studium/toplevel_methods/return_directory_for.rb +66 -0
  659. data/lib/studium/toplevel_methods/return_div_timetable_of_upcoming_exams.rb +489 -0
  660. data/lib/studium/toplevel_methods/return_ects_from_this_lecture_stored_in_the_file_lecture_information.rb +197 -0
  661. data/lib/studium/toplevel_methods/return_hash_of_already_solved_lectures.rb +41 -0
  662. data/lib/studium/toplevel_methods/return_local_path_of_this_pwdstud.rb +59 -0
  663. data/lib/studium/toplevel_methods/return_lva_number_of_this_lecture.rb +72 -0
  664. data/lib/studium/toplevel_methods/return_n_percent_solved_from_this_topic.rb +75 -0
  665. data/lib/studium/toplevel_methods/return_n_questions_were_answered_for_this_topic.rb +37 -0
  666. data/lib/studium/toplevel_methods/return_proper_university_image.rb +80 -0
  667. data/lib/studium/toplevel_methods/return_question_answer_string_from_this_topic.rb +56 -0
  668. data/lib/studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb +126 -0
  669. data/lib/studium/toplevel_methods/return_theme_of_the_next_upcoming_exam.rb +38 -0
  670. data/lib/studium/toplevel_methods/return_this_curriculum_as_a_string.rb +26 -0
  671. data/lib/studium/toplevel_methods/return_title_from_this_curriculum_file.rb +91 -0
  672. data/lib/studium/toplevel_methods/rinstall2.rb +34 -0
  673. data/lib/studium/toplevel_methods/rti_conflict.rb +29 -0
  674. data/lib/studium/toplevel_methods/runmode.rb +86 -0
  675. data/lib/studium/toplevel_methods/sanitize_this_theme_topic.rb +128 -0
  676. data/lib/studium/toplevel_methods/sanitized_dataset_from_file_passed_exams_per_month.rb +52 -0
  677. data/lib/studium/toplevel_methods/save_all_registered_upcoming_exams.rb +62 -0
  678. data/lib/studium/toplevel_methods/save_file.rb +81 -0
  679. data/lib/studium/toplevel_methods/save_this_delay_between_questions_and_answers.rb +43 -0
  680. data/lib/studium/toplevel_methods/set_last_file_for_exam_questions.rb +64 -0
  681. data/lib/studium/toplevel_methods/set_this_cd_alias_to.rb +86 -0
  682. data/lib/studium/toplevel_methods/show_passed_ects_in_the_individual_bachelor_and_master_curricula.rb +81 -0
  683. data/lib/studium/toplevel_methods/show_passed_exams_having_this_grade.rb +27 -0
  684. data/lib/studium/toplevel_methods/spacer.rb +18 -0
  685. data/lib/studium/toplevel_methods/time.rb +220 -0
  686. data/lib/studium/toplevel_methods/total_ects_points_passed.rb +72 -0
  687. data/lib/studium/toplevel_methods/try_to_guess_the_most_likely_lva_id.rb +57 -0
  688. data/lib/studium/toplevel_methods/try_to_return_the_expanded_name_of_this_lecture.rb +63 -0
  689. data/lib/studium/toplevel_methods/unfinished.rb +51 -0
  690. data/lib/studium/toplevel_methods/url.rb +74 -0
  691. data/lib/studium/toplevel_methods/verbose_truth.rb +21 -0
  692. data/lib/studium/toplevel_methods/when_was_this_lecture_passed.rb +53 -0
  693. data/lib/studium/toplevel_methods/yes_or_no_ja_oder_nein.rb +33 -0
  694. data/lib/studium/tu_vienna/README.md +6 -0
  695. data/lib/studium/tu_vienna/tu_ferien.rb +38 -0
  696. data/lib/studium/tu_vienna/tu_/303/266ffnungszeiten.rb +29 -0
  697. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_boku_lecture_to_curriculum.rb +389 -0
  698. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_lecture_to_curriculum.rb +236 -0
  699. data/lib/studium/utility_scripts/attribute_lectures_to_university/attribute_lectures_to_university.rb +385 -0
  700. data/lib/studium/utility_scripts/audio_stats.rb +176 -0
  701. data/lib/studium/utility_scripts/auto_stud/auto_stud.rb +253 -0
  702. data/lib/studium/utility_scripts/auto_stud/constants.rb +23 -0
  703. data/lib/studium/utility_scripts/auto_stud/initialize.rb +23 -0
  704. data/lib/studium/utility_scripts/auto_stud/misc.rb +18 -0
  705. data/lib/studium/utility_scripts/autopurge_this_lecture_date.rb +101 -0
  706. data/lib/studium/utility_scripts/calendar/README.md +2 -0
  707. data/lib/studium/utility_scripts/calendar/calendar.rb +244 -0
  708. data/lib/studium/utility_scripts/calendar/misc.rb +35 -0
  709. data/lib/studium/utility_scripts/check_description_of_these_lectures.rb +224 -0
  710. data/lib/studium/utility_scripts/clean_up_lecture_date.rb +151 -0
  711. data/lib/studium/utility_scripts/current_lectures_belonging_to_both_bachelor_and_master_curriculum.rb +113 -0
  712. data/lib/studium/utility_scripts/currently_participating_in_these_lectures.rb +104 -0
  713. data/lib/studium/utility_scripts/display_lecture_url.rb +117 -0
  714. data/lib/studium/utility_scripts/expand_time_range.rb +422 -0
  715. data/lib/studium/utility_scripts/find_duplicate_lectures.rb +121 -0
  716. data/lib/studium/utility_scripts/finished_exams_at_this_university.rb +94 -0
  717. data/lib/studium/utility_scripts/foreign_language_percentage/constants.rb +28 -0
  718. data/lib/studium/utility_scripts/foreign_language_percentage/foreign_language_percentage.rb +142 -0
  719. data/lib/studium/utility_scripts/foreign_language_percentage/help.rb +29 -0
  720. data/lib/studium/utility_scripts/foreign_language_percentage/initialize.rb +25 -0
  721. data/lib/studium/utility_scripts/foreign_language_percentage/menu.rb +141 -0
  722. data/lib/studium/utility_scripts/foreign_language_percentage/report.rb +62 -0
  723. data/lib/studium/utility_scripts/foreign_language_percentage/reset.rb +57 -0
  724. data/lib/studium/utility_scripts/foreign_language_percentage/run.rb +19 -0
  725. data/lib/studium/utility_scripts/generate_spreadsheet.rb +349 -0
  726. data/lib/studium/utility_scripts/holidays.rb +143 -0
  727. data/lib/studium/utility_scripts/lecture_downloader.rb +115 -0
  728. data/lib/studium/utility_scripts/lectures_attributed_to_universities.rb +344 -0
  729. data/lib/studium/utility_scripts/lva_nummer.rb +440 -0
  730. data/lib/studium/utility_scripts/mandatory_lectures_in_this_month.rb +321 -0
  731. data/lib/studium/utility_scripts/name_of_this_lva_id.rb +110 -0
  732. data/lib/studium/utility_scripts/new_stud.rb +332 -0
  733. data/lib/studium/utility_scripts/next_week.rb +111 -0
  734. data/lib/studium/utility_scripts/passed_ects_per_year.rb +172 -0
  735. data/lib/studium/utility_scripts/passed_pr/303/274fungsimmanente_courses/passed_pr/303/274fungsimmanente_courses.rb +181 -0
  736. data/lib/studium/utility_scripts/prepare_individual_curriculum.rb +182 -0
  737. data/lib/studium/utility_scripts/priority.rb +126 -0
  738. data/lib/studium/utility_scripts/priority_points.rb +263 -0
  739. data/lib/studium/utility_scripts/publish_my_exams.rb +174 -0
  740. data/lib/studium/utility_scripts/regexes/README.md +2 -0
  741. data/lib/studium/utility_scripts/regexes/generate_regex.rb +278 -0
  742. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_available_moodle_links.rb +54 -0
  743. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_registered_lectures.rb +48 -0
  744. data/lib/studium/utility_scripts/report_outdated_timetable_entries.rb +148 -0
  745. data/lib/studium/utility_scripts/report_total_amount_of_questions_and_answers_for.rb +120 -0
  746. data/lib/studium/utility_scripts/report_whether_this_lecture_is_registered_in_the_file_lecture_information.rb +125 -0
  747. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/individual_resolve_practical_courses_date_conflicts.rb +257 -0
  748. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/resolve_practical_courses_date_conflicts.rb +273 -0
  749. data/lib/studium/utility_scripts/scrape_remote_university_url.rb +146 -0
  750. data/lib/studium/utility_scripts/semester_schedule_creator/semester_container.rb +142 -0
  751. data/lib/studium/utility_scripts/semester_schedule_creator/semester_schedule_creator.rb +381 -0
  752. data/lib/studium/utility_scripts/semesterplaner.rb +289 -0
  753. data/lib/studium/utility_scripts/show_all_lectures.rb +403 -0
  754. data/lib/studium/utility_scripts/show_all_passed_master_lectures.rb +127 -0
  755. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/constants.rb +56 -0
  756. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/do_report_the_upcoming_exams.rb +60 -0
  757. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/help.rb +49 -0
  758. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/initialize.rb +28 -0
  759. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/menu.rb +54 -0
  760. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/misc.rb +214 -0
  761. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/report.rb +118 -0
  762. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/reset.rb +80 -0
  763. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/run.rb +22 -0
  764. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/show_conflicting_lva_lectures.rb +651 -0
  765. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/constants.rb +28 -0
  766. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/menu.rb +62 -0
  767. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/reset.rb +36 -0
  768. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/run.rb +35 -0
  769. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/show_descriptions_of_lectures_belonging_to_this_module.rb +145 -0
  770. data/lib/studium/utility_scripts/show_lecturers/show_lecturers.rb +145 -0
  771. data/lib/studium/utility_scripts/show_lectures/constants.rb +16 -0
  772. data/lib/studium/utility_scripts/show_lectures/help.rb +34 -0
  773. data/lib/studium/utility_scripts/show_lectures/initialize.rb +23 -0
  774. data/lib/studium/utility_scripts/show_lectures/menu.rb +106 -0
  775. data/lib/studium/utility_scripts/show_lectures/misc.rb +582 -0
  776. data/lib/studium/utility_scripts/show_lectures/reset.rb +92 -0
  777. data/lib/studium/utility_scripts/show_lectures/run.rb +27 -0
  778. data/lib/studium/utility_scripts/show_lectures/show_lectures.rb +48 -0
  779. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_language.rb +129 -0
  780. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_theme.rb +100 -0
  781. data/lib/studium/utility_scripts/show_lectures_on_this_day.rb +154 -0
  782. data/lib/studium/utility_scripts/show_lva_dates_of_this_lecture.rb +177 -0
  783. data/lib/studium/utility_scripts/show_outdated_lva_dates.rb +218 -0
  784. data/lib/studium/utility_scripts/show_solved_english_lectures.rb +139 -0
  785. data/lib/studium/utility_scripts/show_the_associated_lectures_for_the_individual_curriculum.rb +285 -0
  786. data/lib/studium/utility_scripts/studienkennzahl.rb +109 -0
  787. data/lib/studium/utility_scripts/studium_skeleton.rb +220 -0
  788. data/lib/studium/utility_scripts/stundenplan.rb +603 -0
  789. data/lib/studium/utility_scripts/sync_studium_relevant_entries_one_level_downwards.rb +221 -0
  790. data/lib/studium/utility_scripts/ufind.rb +101 -0
  791. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/constants.rb +31 -0
  792. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/run.rb +20 -0
  793. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/upcoming_mandatory_presence_courses.rb +179 -0
  794. data/lib/studium/utility_scripts/vorbesprechungen.rb +293 -0
  795. data/lib/studium/utility_scripts/week_parser/constants.rb +28 -0
  796. data/lib/studium/utility_scripts/week_parser/help.rb +32 -0
  797. data/lib/studium/utility_scripts/week_parser/menu.rb +56 -0
  798. data/lib/studium/utility_scripts/week_parser/misc.rb +51 -0
  799. data/lib/studium/utility_scripts/week_parser/reset.rb +55 -0
  800. data/lib/studium/utility_scripts/week_parser/run.rb +18 -0
  801. data/lib/studium/utility_scripts/week_parser/show.rb +242 -0
  802. data/lib/studium/utility_scripts/week_parser/week_parser.rb +362 -0
  803. data/lib/studium/utility_scripts/weekday_parser.rb +159 -0
  804. data/lib/studium/utility_scripts/weekly_schedule.rb +209 -0
  805. data/lib/studium/utility_scripts/wochenplanung.rb +278 -0
  806. data/lib/studium/version/version.rb +46 -0
  807. data/lib/studium/www/curricula_displayer.cgi +170 -0
  808. data/lib/studium/www/curriculum_displayer.rb +162 -0
  809. data/lib/studium/www/exams.cgi +50 -0
  810. data/lib/studium/www/statistics.cgi +55 -0
  811. data/lib/studium/yaml/allowed_themes_for_exams.yml +307 -0
  812. data/lib/studium/yaml/array_allowed_entries_for_the_file_lecture_information.yml +68 -0
  813. data/lib/studium/yaml/backlog_of_exams.yml +35 -0
  814. data/lib/studium/yaml/current_exams.yml +19 -0
  815. data/lib/studium/yaml/curricula.yml +530 -0
  816. data/lib/studium/yaml/curricula/README.md +3 -0
  817. data/lib/studium/yaml/curricula/bachelor_agrarwissenschaften_033255.yml +130 -0
  818. data/lib/studium/yaml/curricula/bachelor_biologie_basisblock_033630.yml +65 -0
  819. data/lib/studium/yaml/curricula/bachelor_biologie_botanik_033630.yml +84 -0
  820. data/lib/studium/yaml/curricula/bachelor_biologie_ecology_033630.yml +74 -0
  821. data/lib/studium/yaml/curricula/bachelor_biologie_mikrobiologie_und_genetik_033630.yml +120 -0
  822. data/lib/studium/yaml/curricula/bachelor_biologie_molekulare_biologie_033630.yml +104 -0
  823. data/lib/studium/yaml/curricula/bachelor_biologie_zoologie_033630.yml +87 -0
  824. data/lib/studium/yaml/curricula/bachelor_chemie_033662.yml +164 -0
  825. data/lib/studium/yaml/curricula/bachelor_dummy_curriculum.yml +135 -0
  826. data/lib/studium/yaml/curricula/bachelor_elektrotechnik_und_informationstechnik_033235.yml +13 -0
  827. data/lib/studium/yaml/curricula/bachelor_forstwirtschaft_033225.yml +105 -0
  828. data/lib/studium/yaml/curricula/bachelor_informatik_033521.yml +130 -0
  829. data/lib/studium/yaml/curricula/bachelor_informatik_und_molekulare_biologie.yml +1144 -0
  830. data/lib/studium/yaml/curricula/bachelor_ktww_033231.yml +84 -0
  831. data/lib/studium/yaml/curricula/bachelor_lmbt_033217.yml +108 -0
  832. data/lib/studium/yaml/curricula/bachelor_medizinische_informatik_033533.yml +200 -0
  833. data/lib/studium/yaml/curricula/bachelor_molekularbiologie_033665.yml +93 -0
  834. data/lib/studium/yaml/curricula/bachelor_nutrition_science_033638.yml +117 -0
  835. data/lib/studium/yaml/curricula/bachelor_pharmazie_033305.yml +170 -0
  836. data/lib/studium/yaml/curricula/bachelor_technische_chemie_033290.yml +129 -0
  837. data/lib/studium/yaml/curricula/bachelor_technische_informatik_033535.yml +23 -0
  838. data/lib/studium/yaml/curricula/bachelor_ubrm_033227.yml +140 -0
  839. data/lib/studium/yaml/curricula/bachelor_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +1157 -0
  840. data/lib/studium/yaml/curricula/bachelor_verfahrenstechnik_033273.yml +167 -0
  841. data/lib/studium/yaml/curricula/bachelor_wirtschaftsinformatik_033526.yml +29 -0
  842. data/lib/studium/yaml/curricula/master_bioinformatics_and_molecular_biotechnology_including_aspects_from_molecular_medicine.yml +438 -0
  843. data/lib/studium/yaml/curricula/master_bioinformatik_066875.yml +76 -0
  844. data/lib/studium/yaml/curricula/master_biologie_molekulare_mikrobiologie_mikrobielle_oekologie_und_immunbiologie_066830.yml +78 -0
  845. data/lib/studium/yaml/curricula/master_biologische_chemie_066863.yml +61 -0
  846. data/lib/studium/yaml/curricula/master_dummy_curriculum.yml +137 -0
  847. data/lib/studium/yaml/curricula/master_food_science_and_plant_biotechnology.yml +30 -0
  848. data/lib/studium/yaml/curricula/master_genetik_und_entwicklungsbiologie_066877.yml +90 -0
  849. data/lib/studium/yaml/curricula/master_lmbt_066418.yml +65 -0
  850. data/lib/studium/yaml/curricula/master_molekulare_biologie_066834.yml +142 -0
  851. data/lib/studium/yaml/curricula/master_pharmazie_066605.yml +170 -0
  852. data/lib/studium/yaml/curricula/master_technische_chemie_066490.yml +123 -0
  853. data/lib/studium/yaml/curricula/master_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +741 -0
  854. data/lib/studium/yaml/custom_colours.yml +21 -0
  855. data/lib/studium/yaml/daily_questions_solved.yml +789 -0
  856. data/lib/studium/yaml/default_delay.yml +4 -0
  857. data/lib/studium/yaml/default_encoding.yml +1 -0
  858. data/lib/studium/yaml/directory_to_the_exam_topics.yml +0 -0
  859. data/lib/studium/yaml/editor.yml +1 -0
  860. data/lib/studium/yaml/file_for_exam_questions.yml +1 -0
  861. data/lib/studium/yaml/german/README.md +2 -0
  862. data/lib/studium/yaml/german/german_to_english_month_names.yml +16 -0
  863. data/lib/studium/yaml/grouped_themes.yml +187 -0
  864. data/lib/studium/yaml/holidays.yml +176 -0
  865. data/lib/studium/yaml/important_exams.yml +194 -0
  866. data/lib/studium/yaml/inscription_dates_of_universities.yml +58 -0
  867. data/lib/studium/yaml/lecture_aliases.yml +108 -0
  868. data/lib/studium/yaml/lecture_information.yml +47783 -0
  869. data/lib/studium/yaml/log_dir.yml +1 -0
  870. data/lib/studium/yaml/main_topic.yml +11 -0
  871. data/lib/studium/yaml/max_stats.yml +227 -0
  872. data/lib/studium/yaml/mitteilungsbl/303/244tter.yml +315 -0
  873. data/lib/studium/yaml/n_total_questions.yml +1 -0
  874. data/lib/studium/yaml/participating_in_these_courses.yml +50 -0
  875. data/lib/studium/yaml/rename_konsole_tab.yml +1 -0
  876. data/lib/studium/yaml/show_topic.yml +1 -0
  877. data/lib/studium/yaml/statistics.yml +57 -0
  878. data/lib/studium/yaml/use_colours.yml +1 -0
  879. data/studium.gemspec +79 -0
  880. data/test/testing_studium.rb +244 -0
  881. data/test/testing_time_component.rb +29 -0
  882. metadata +1079 -0
@@ -0,0 +1,382 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/exams/ask_exam_question/menu.rb'
6
+ # =========================================================================== #
7
+ require 'studium/base/base.rb'
8
+
9
+ module Studium
10
+
11
+ module Exams
12
+
13
+ class AskExamQuestion < Base # === Studium::Exams::AskExamQuestion
14
+
15
+ require 'studium/exams/ask_exam_question/help.rb'
16
+ require 'studium/toplevel_methods/handle_archive_of_the_exam_questions.rb'
17
+
18
+ # ========================================================================= #
19
+ # === menu_on_the_commandline_as_a_string
20
+ # ========================================================================= #
21
+ def menu_on_the_commandline_as_a_string(
22
+ i = commandline_as_string
23
+ )
24
+ case i
25
+ # ======================================================================= #
26
+ # === qa --open
27
+ #
28
+ # This entry point can be used to open an exam topic file via the
29
+ # editor.
30
+ #
31
+ # A commandline example follows:
32
+ #
33
+ # qa ab2 open
34
+ #
35
+ # ======================================================================= #
36
+ when /open (.+)/,
37
+ /(.+) open/
38
+ topic = $1.to_s.dup # Example: qa --open amg
39
+ topic = find_corresponding_exam_topic(topic)
40
+ topic = ::Studium.directory_to_my_exam_topics+File.basename(topic)
41
+ open_this_file_in_editor(topic)
42
+ exit
43
+ # ======================================================================= #
44
+ # === qa "delay = 3.0"
45
+ #
46
+ # Invoke this like so:
47
+ #
48
+ # qa delay = 3.0
49
+ #
50
+ # ======================================================================= #
51
+ when /^DELAY =? ?(\d{0,1}.\d{1})/i,
52
+ /^DEL =? ?(\d{0,1}.\d{1})/i,
53
+ /^set_delay =? ?(\d{0,1}.\d{1})/i,
54
+ /^set_delay :? ?(\d{0,1}.\d{1})/i,
55
+ /^set_delay ?(\d{0,1}.\d{1})/i # === qa set_delay 3.1
56
+ _ = $1.to_s.dup
57
+ set_and_store_delay(_)
58
+ end
59
+ end
60
+
61
+ # ========================================================================= #
62
+ # === menu (menu tag)
63
+ #
64
+ # This is the main menu-interface of this class, the part of the code
65
+ # where we take the commandline (if the user has done so) and evaluate
66
+ # what is to be done.
67
+ #
68
+ # By default, we will assume that the user has not given any special
69
+ # instructions, hence why the default argument is nil.
70
+ #
71
+ # Next we show some usage examples:
72
+ #
73
+ # qa "delay = 3.0"
74
+ # qa delay?
75
+ #
76
+ # ========================================================================= #
77
+ def menu(
78
+ i = commandline_arguments?
79
+ )
80
+ if i.is_a? Array
81
+ i.each {|entry| menu(entry) }
82
+ else
83
+ case i # case tag
84
+ # ===================================================================== #
85
+ # === qa ALL_SOLVED
86
+ #
87
+ # This entry point will mark all questions from a particular topic
88
+ # to "solved", that is, to have been answered already.
89
+ #
90
+ # Usage example:
91
+ #
92
+ # qa agrarmarkt --all-solved
93
+ #
94
+ # ===================================================================== #
95
+ when /^-?-?all(-|_| )?solved$/i
96
+ set_all_questions_from_the_topic_to_solved
97
+ exit
98
+ # ===================================================================== #
99
+ # === qa amg1 --also-ask-from-solved-questions
100
+ # === qa amg1 --full-pool
101
+ # === qa amg1 --all-questions
102
+ # === qa amg1 --everything
103
+ #
104
+ # This entry point allows us to pick a random question from ALL
105
+ # questions of the given example theme, not only from the pool
106
+ # that does not end with a trailing "[]".
107
+ #
108
+ # And yet another usage example:
109
+ #
110
+ # qa agrarmarkt --full
111
+ #
112
+ # ===================================================================== #
113
+ when /^-?-?also(-|_)?ask(-|_)?from(-|_)?solved(-|_)?questions$/i,
114
+ /^-?-?full(-|_)?pool$/i,
115
+ /^-?-?full$/i,
116
+ /^-?-?all(-|_)?questions$/i,
117
+ /^-?-?everything$/i
118
+ @reject_lines_that_end_with_a_done_token = false
119
+ # ===================================================================== #
120
+ # === qa --show-topic?
121
+ # ===================================================================== #
122
+ when /^-?-?show(_|-| )?topic\??/i
123
+ report_whether_we_will_show_the_topic
124
+ exit_program
125
+ # ===================================================================== #
126
+ # === qa --nquestions?
127
+ # ===================================================================== #
128
+ when /^-?-?n(_|-| )?questions\??$/i
129
+ report_how_many_registered_questions_are_available
130
+ exit
131
+ # ===================================================================== #
132
+ # === qa OPEN
133
+ #
134
+ # This entry point exists to edit this file here.
135
+ # ===================================================================== #
136
+ when 'OPEN',
137
+ 'OPENALL',
138
+ 'OALL',
139
+ '--open'
140
+ open_this_file_in_editor
141
+ exit_program
142
+ # ===================================================================== #
143
+ # === qa --ask_last_topic
144
+ # ===================================================================== #
145
+ when /^-?-?ask(_|-)?last(_|-)?topic$/
146
+ target_file = "#{log_dir?}use_this_exam_topic.yml"
147
+ if File.exist? target_file
148
+ use_this_topic = YAML.load_file(
149
+ target_file
150
+ )
151
+ set_use_this_topic(use_this_topic)
152
+ else
153
+ no_file_exists_at(target_file)
154
+ end
155
+ exit_program
156
+ # ===================================================================== #
157
+ # === qa --upload_exams
158
+ # ===================================================================== #
159
+ when 'examtopics?',
160
+ 'upload_exam_topics',
161
+ /^upload_?exams/,
162
+ 'uexams',
163
+ 'uexam'
164
+ Studium.upload_exam_questions { :be_verbose }
165
+ # ===================================================================== #
166
+ # === qa ftp
167
+ # ===================================================================== #
168
+ when 'ftp',
169
+ /^ftp(_|-)?upload$/
170
+ Studium.upload_exam_questions { :be_verbose }
171
+ exit_program
172
+ # ===================================================================== #
173
+ # === qa EDIT
174
+ # ===================================================================== #
175
+ when 'EDIT',
176
+ /^-?-?vim$/i
177
+ edit_sanitize_topics_in_vim
178
+ exit_program
179
+ # ===================================================================== #
180
+ # === qa --set_default_topic=phys
181
+ # ===================================================================== #
182
+ when /^-?-?set_default_topic=(.+)/,
183
+ /^-?-?set-default-topic=(.+)/,
184
+ /^-?-?topic=(.+)/,
185
+ /^-?-?setdefaulttopic=(.+)/
186
+ set_default_topic_for_the_gui($1.to_s)
187
+ exit
188
+ # ===================================================================== #
189
+ # === qa --rename-tab?
190
+ # ===================================================================== #
191
+ when 'rename_tab?',
192
+ '--rename-tab?',
193
+ 'renametab',
194
+ 'renametab?' # qa rename_tab?
195
+ tell_whether_we_will_rename_the_kde_konsole_tab
196
+ exit_program
197
+ # ===================================================================== #
198
+ # === SHOW_ALL
199
+ #
200
+ # Invocation example:
201
+ #
202
+ # qa ethik SHOW_ALL
203
+ #
204
+ # ===================================================================== #
205
+ when /SHOW_?ALL/
206
+ show_content_of_this_topic(topic?)
207
+ exit
208
+ # ===================================================================== #
209
+ # === qa --last-question?
210
+ # ===================================================================== #
211
+ when 'LAST_QUESTION?',
212
+ 'LAST_QUESTION', # qa LAST_QUESTION?
213
+ 'LAST?',
214
+ '--last-question?',
215
+ 'lastquestion?',
216
+ 'lastquestion',
217
+ /^-?-?last$/
218
+ show_last_question_asked
219
+ exit_program
220
+ # ===================================================================== #
221
+ # === qa --download-exam-topics
222
+ # ===================================================================== #
223
+ when /download_?exam_?topics/,
224
+ /((_|-)+(_|-)+download(_|-)+exam(_|-)+topics)/,
225
+ /^-?-?dexamtopics/
226
+ download_exam_topics
227
+ # ===================================================================== #
228
+ # === qa --delay?
229
+ # ===================================================================== #
230
+ when 'del?',
231
+ 'DELAY?',
232
+ 'speed?', # qa delay?
233
+ 'del',
234
+ /^-?-?delay\??$/i
235
+ report_the_delay
236
+ exit_program(:no_newline)
237
+ # ===================================================================== #
238
+ # === qa LASTTOPIC
239
+ # ===================================================================== #
240
+ when /^-?-?last(_|-)?topic$/i,
241
+ /^-?-?show(_|-)?last(_|-)?topic$/i,
242
+ 'ltopic?'
243
+ show_the_last_topic
244
+ exit
245
+ # ===================================================================== #
246
+ # === qa --set-delay=2.8
247
+ # ===================================================================== #
248
+ when /^-?-?set(-|_)?delay=(.+)/
249
+ set_and_store_delay($2.to_s.dup)
250
+ exit
251
+ # ===================================================================== #
252
+ # === qa --www
253
+ # ===================================================================== #
254
+ when /^-?-?www$/i
255
+ generate_statistical_webpage
256
+ exit
257
+ # ===================================================================== #
258
+ # === qa TOTAL?
259
+ # ===================================================================== #
260
+ when /TOTAL/,'total' # qa TOTAL?
261
+ show_how_many_exam_questions_are_available
262
+ exit_program
263
+ # ===================================================================== #
264
+ # === qa --finished?
265
+ # ===================================================================== #
266
+ when /^-?-?finished\??$/i
267
+ show_all_finished_exam_topics
268
+ exit
269
+ # ===================================================================== #
270
+ # === qa --log-dir?
271
+ # ===================================================================== #
272
+ when 'log?',
273
+ 'log_dir?',
274
+ 'store_where?',
275
+ 'store_where',
276
+ '--dir?',
277
+ 'dir?',
278
+ /^-?-?log(-|_)?dir\??$/i
279
+ e "#{rev}The log directory can be found at: "\
280
+ "#{sdir(log_dir?)}"
281
+ exit
282
+ # ===================================================================== #
283
+ # === qa --help?
284
+ # ===================================================================== #
285
+ when 'HELP',
286
+ 'help',
287
+ '--help',
288
+ '--hep',
289
+ '--help?',
290
+ 'help?'
291
+ show_help_usage(:do_exit)
292
+ # ===================================================================== #
293
+ # === qa --default-topic?
294
+ # ==================================================================== #
295
+ when '--default-topic?',
296
+ '--default-topic',
297
+ 'defaulttopic?',
298
+ 'defaulttopic'
299
+ report_the_default_topic_in_use
300
+ exit
301
+ # ===================================================================== #
302
+ # === qa --filesize?
303
+ # ===================================================================== #
304
+ when 'size?',
305
+ /^-?-?filesize\??/i
306
+ show_filesize_of_all_exams
307
+ exit
308
+ # ===================================================================== #
309
+ # === ptype --openlast
310
+ # ===================================================================== #
311
+ when /^OPEN(_|-)?LAST$/i,
312
+ /^OLAST$/i
313
+ open_the_last_file_via_your_editor
314
+ exit
315
+ # ===================================================================== #
316
+ # === qa --german?
317
+ # ===================================================================== #
318
+ when 'SOLVED_GERMAN?',
319
+ 'german',
320
+ 'german?',
321
+ 'in_german?',
322
+ 'n_solved_in_german?',
323
+ 'nsolved2?',
324
+ 'n_german?',
325
+ '--german?',
326
+ /^-?-?solved(_|-)?in(_|-)?german$/i
327
+ show_how_many_exam_questions_were_already_solved_in_german
328
+ exit_program
329
+ # ===================================================================== #
330
+ # === qa N_TOPICS
331
+ # ===================================================================== #
332
+ when /^-?-?n(_|-)?topics$/i # qa N_TOPICS
333
+ report_how_many_topics_are_available
334
+ exit_program
335
+ # ===================================================================== #
336
+ # === qa --nsolved?
337
+ # ===================================================================== #
338
+ when /SOLVED/,
339
+ 'N_SOLVED?',
340
+ 'n_solved?',
341
+ '--nsolved?',
342
+ '--nsolved',
343
+ 'nsolved',
344
+ '--english?',
345
+ '--english',
346
+ 'english',
347
+ 'english?'
348
+ show_how_many_exam_questions_were_already_solved
349
+ exit_program
350
+ # ===================================================================== #
351
+ # === qa --all-topics?
352
+ #
353
+ # Entry point for showing all available exam-topics:
354
+ #
355
+ # qa show_topics
356
+ #
357
+ # ===================================================================== #
358
+ when 'ALL',
359
+ 'all_topics',
360
+ 'available_topics?',
361
+ 'topics?',
362
+ /^-?-?show(_|-)?topics$/i,
363
+ 'detailed_topic',
364
+ '--all-topics',
365
+ '--topics',
366
+ /^TOPICS/,
367
+ /ALL_TOPICS/,
368
+ 'alltopics?',
369
+ 'alltopics',
370
+ '--all-topics?',
371
+ /^-?-?show(-|_)?available(-|_)?topics$/i,
372
+ /^-?-?show(-|_)?all(-|_)?exam(-|_)?topics$/i
373
+ show_available_topics # This also includes exit.
374
+ else
375
+ if ::Studium.is_this_an_exam_topic?(i)
376
+ set_exam_topic(i)
377
+ end
378
+ end
379
+ end
380
+ end
381
+
382
+ end; end; end
@@ -0,0 +1,938 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/exams/ask_exam_question/misc.rb'
6
+ # =========================================================================== #
7
+ require 'studium/exams/ask_exam_question/answer.rb'
8
+ require 'studium/exams/ask_exam_question/delay.rb'
9
+ require 'studium/exams/ask_exam_question/initialize.rb'
10
+ require 'studium/exams/ask_exam_question/menu.rb'
11
+ require 'studium/exams/ask_exam_question/reset.rb'
12
+
13
+ module Studium
14
+
15
+ module Exams
16
+
17
+ class AskExamQuestion < Base # === Studium::Exams::AskExamQuestion
18
+
19
+ begin
20
+ require 'verbose_truth'
21
+ rescue LoadError; end
22
+
23
+ # ========================================================================= #
24
+ # === add (add tag)
25
+ # ========================================================================= #
26
+ def add(i)
27
+ @result << i
28
+ end
29
+
30
+ # ========================================================================= #
31
+ # === result?
32
+ # ========================================================================= #
33
+ def result?
34
+ @result
35
+ end; alias string? result? # === string?
36
+
37
+ # ========================================================================= #
38
+ # === reject_invalid_entries
39
+ #
40
+ # This method will remove entries that begin with '#' and empty entries.
41
+ # ========================================================================= #
42
+ def reject_invalid_entries
43
+ @dataset.reject! {|line|
44
+ line.strip.empty? or
45
+ line.start_with?('#')
46
+ }
47
+ end
48
+
49
+ # ========================================================================= #
50
+ # === show_available_topics (topics tag)
51
+ #
52
+ # This method will show which topics are all available.
53
+ #
54
+ # By default, it will also exit after having done so.
55
+ #
56
+ # To invoke this method, try:
57
+ #
58
+ # qa topics?
59
+ # qa --show-available-topics
60
+ #
61
+ # ========================================================================= #
62
+ def show_available_topics(
63
+ shall_we_exit = true
64
+ )
65
+ e
66
+ use_these_topics = Studium.available_topics.sort # And sort it.
67
+ use_these_topics.each_with_index {|category, index|
68
+ # ===================================================================== #
69
+ # Number the results via the index.
70
+ # ===================================================================== #
71
+ index = '%4s' % ('('+(index+1).to_s)
72
+ result = ' '.dup
73
+ if use_colours?
74
+ result << ::Colours::CYAN if commandline?
75
+ end
76
+ result << "#{index}) - " # Add the index here.
77
+ if use_colours?
78
+ result << rev if commandline?
79
+ end
80
+ category = category.to_s.delete('_')
81
+ category = steelblue(category) if use_colours?
82
+ result << category
83
+ e result
84
+ }
85
+ e
86
+ exit if shall_we_exit
87
+ end
88
+
89
+ # ========================================================================= #
90
+ # === answer?
91
+ # ========================================================================= #
92
+ def answer?
93
+ @answer
94
+ end; alias last answer? # === last
95
+
96
+ # ========================================================================= #
97
+ # === show_statistics
98
+ # ========================================================================= #
99
+ def show_statistics(
100
+ dataset = @dataset
101
+ )
102
+ n_questions = dataset.size
103
+ n_answered = n_questions - n_questions_already_answered?
104
+ percentage = (n_answered.to_f * 100) / n_questions
105
+ result = olivedrab(n_questions.to_s)+' questions available, '+
106
+ mediumaquamarine(n_answered.to_s)+
107
+ ' ('+
108
+ colourize_percentage(percentage.round(2).to_s+'%')+
109
+ ') already answered.'+N
110
+ # ======================================================================= #
111
+ # Also add how many questions in absolute numbers have to be answered
112
+ # still.
113
+ # ======================================================================= #
114
+ padded_amount_of_questions_answered = (n_questions - n_answered).to_s
115
+ padded_amount_of_questions_answered =
116
+ padded_amount_of_questions_answered.rjust(n_questions.to_s.size)
117
+ result << "#{crimson(padded_amount_of_questions_answered)} questions "\
118
+ "still have to be answered. Topic: "\
119
+ "#{olive(return_the_full_expanded_exam_title)}.#{rev}"
120
+ e result
121
+ end; alias report_statistics show_statistics # === report_statistics
122
+
123
+ # ========================================================================= #
124
+ # === return_the_full_expanded_exam_title
125
+ # ========================================================================= #
126
+ def return_the_full_expanded_exam_title
127
+ return Studium.find_corresponding_exam_title(exam_title?)
128
+ end
129
+
130
+ # ========================================================================= #
131
+ # === do_sleep
132
+ #
133
+ # Use this to sleep for the specified duration, stored in the ivar @delay.
134
+ #
135
+ # Since April 2012 the method will also handle SIGINT-events gracefully.
136
+ # ========================================================================= #
137
+ def do_sleep
138
+ begin
139
+ sleep(@delay)
140
+ rescue Interrupt # We are silent here.
141
+ exit_program
142
+ end
143
+ end; alias default_sleep do_sleep # === default_sleep
144
+ alias start_default_sleep do_sleep # === start_default_sleep
145
+
146
+ # ========================================================================= #
147
+ # === report_how_many_topics_are_available
148
+ # ========================================================================= #
149
+ def report_how_many_topics_are_available
150
+ opnn; e 'There are exactly '+
151
+ simp(Studium.available_topics?.size.to_s)+
152
+ ' topics available.'
153
+ end
154
+
155
+ # ========================================================================= #
156
+ # === show_how_many_exam_questions_were_already_solved
157
+ #
158
+ # Use this method to show how many exam questions were already solved.
159
+ #
160
+ # To invoke this method, do:
161
+ #
162
+ # qa SOLVED?
163
+ #
164
+ # Or in code, do:
165
+ #
166
+ # Studium::Exams.report_how_many_exam_questions_were_already_solved
167
+ #
168
+ # ========================================================================= #
169
+ def show_how_many_exam_questions_were_already_solved
170
+ Studium.report_how_many_exam_questions_were_already_solved
171
+ end
172
+
173
+ require 'studium/toplevel_methods/report.rb'
174
+ # ========================================================================= #
175
+ # === show_how_many_exam_questions_were_already_solved_in_german
176
+ #
177
+ # Similar to the above, except that we will report in german.
178
+ #
179
+ # Invocation example:
180
+ #
181
+ # qa --solved-in-german
182
+ #
183
+ # ========================================================================= #
184
+ def show_how_many_exam_questions_were_already_solved_in_german
185
+ Studium::Exams.report_how_many_exam_questions_were_already_solved(:german)
186
+ end
187
+
188
+ # ========================================================================= #
189
+ # === open_the_last_file_via_your_editor
190
+ # ========================================================================= #
191
+ def open_the_last_file_via_your_editor(
192
+ this_file = last_file?
193
+ )
194
+ open_this_file_in_editor(this_file)
195
+ end
196
+
197
+ # ========================================================================= #
198
+ # === open_this_file_in_editor
199
+ #
200
+ # Open this file in the editor.
201
+ # ========================================================================= #
202
+ def open_this_file_in_editor(
203
+ this_file = __FILE__
204
+ )
205
+ use_this_editor = editor?
206
+ # ======================================================================= #
207
+ # Since as of December 2017, on my home system, I will use nano
208
+ # instead.
209
+ # ======================================================================= #
210
+ use_this_editor = 'nano -w' if is_on_roebe?
211
+ _ = "#{use_this_editor} #{this_file}" #&
212
+ esystem _
213
+ end
214
+
215
+ # ========================================================================= #
216
+ # === consider_renaming_konsole_tab
217
+ #
218
+ # We will delegate to class SetTerminalTitle in order to rename the KDE
219
+ # konsole title.
220
+ # ========================================================================= #
221
+ def consider_renaming_konsole_tab
222
+ if AskExamQuestion.rename_konsole_tab?
223
+ rename_kde_konsole_tab(topic?)
224
+ end
225
+ end
226
+
227
+ # ========================================================================= #
228
+ # === may_we_show_the_topic?
229
+ # ========================================================================= #
230
+ def may_we_show_the_topic?
231
+ @may_we_show_the_topic
232
+ end; alias may_we_show_the_topic may_we_show_the_topic? # === may_we_show_the_topic
233
+
234
+ # ========================================================================= #
235
+ # === set_may_we_show_the_topic
236
+ # ========================================================================= #
237
+ def set_may_we_show_the_topic(i = true)
238
+ @may_we_show_the_topic = i
239
+ end; alias may_we_show_the_topic= set_may_we_show_the_topic # === may_we_show_the_topic=
240
+ alias set_show_topic set_may_we_show_the_topic # === set_show_topic
241
+
242
+ # ========================================================================= #
243
+ # === exam_file?
244
+ #
245
+ # This query-method shows as to where the specific file at hand is.
246
+ # ========================================================================= #
247
+ def exam_file?
248
+ @exam_file
249
+ end; alias file? exam_file? # === file?
250
+
251
+ # ========================================================================= #
252
+ # === set_exam_file
253
+ #
254
+ # The file location will be something like:
255
+ #
256
+ # /Programs/Ruby/2.3.1/lib/ruby/site_ruby/2.3.0/studium/exam_topics/physiologie
257
+ #
258
+ # ========================================================================= #
259
+ def set_exam_file(i)
260
+ @exam_file = i
261
+ end; alias set_file set_exam_file # === set_file
262
+
263
+ # ========================================================================= #
264
+ # === show_line
265
+ # ========================================================================= #
266
+ def show_line
267
+ e line?
268
+ end
269
+
270
+ require 'studium/logging/store_last_question_asked_into_file.rb'
271
+ # ========================================================================= #
272
+ # === do_log_related_and_backup_related_actions
273
+ #
274
+ # This method will backup files and similar activities.
275
+ # ========================================================================= #
276
+ def do_log_related_and_backup_related_actions
277
+ unless Studium.is_in_www_mode?
278
+ Studium.backup_this_exam_file(exam_file?) # { :be_verbose }
279
+ hash = {} # Build up our data structure here, as a Hash.
280
+ hash[:question_was_asked_when] = Time.now
281
+ hash[:question_full_line] = line?
282
+ Studium::Log::StoreLastQuestionAskedIntoFile.new(hash)
283
+ end
284
+ end
285
+
286
+ # ========================================================================= #
287
+ # === set_store_where
288
+ # ========================================================================= #
289
+ def set_store_where(i)
290
+ @store_where = i.to_s
291
+ end
292
+
293
+ # ========================================================================= #
294
+ # === store_where?
295
+ # ========================================================================= #
296
+ def store_where?
297
+ @store_where
298
+ end
299
+
300
+ # ========================================================================= #
301
+ # === show_filesize_of_all_exams
302
+ #
303
+ # To call this method, do:
304
+ #
305
+ # qa --filesize?
306
+ #
307
+ # ========================================================================= #
308
+ def show_filesize_of_all_exams
309
+ this_exam_topic = directory_of_the_exam_topics?
310
+ all_filesizes = Dir["#{this_exam_topic}*"].map {|entry|
311
+ File.size?(entry)
312
+ }
313
+ sum = all_filesizes.sum
314
+ sum_in_kb = sum / 1000.0
315
+ sum_in_mb = sum_in_kb / 1000.0
316
+ e rev+
317
+ 'The total file size of all exams in '+
318
+ sdir(this_exam_topic)+
319
+ ' is: '
320
+ e
321
+ e ' '+simp(sum.to_s)+
322
+ ' Bytes ('+
323
+ sfancy(sum_in_mb.round(2).to_s)+' MB)'
324
+ e
325
+ end
326
+
327
+ # ========================================================================= #
328
+ # === report_the_default_topic_in_use
329
+ #
330
+ # This method will report the default topic in use. We must also check
331
+ # whether the file in questions exists, before proceeding.
332
+ #
333
+ # To invoke this, do:
334
+ #
335
+ # qa --default-topic?
336
+ #
337
+ # ========================================================================= #
338
+ def report_the_default_topic_in_use
339
+ file = "#{log_dir?}use_this_exam_topic.yml"
340
+ if File.exist? file
341
+ topic = File.read(file).chomp
342
+ e 'The default topic in use is: '+simp(topic)
343
+ else
344
+ e "#{rev}No file exists at `#{sfile(file)}`. This means that no"
345
+ e 'default topic has been set.'
346
+ e
347
+ e 'If you wish to designate a default topic, use this invocation:'
348
+ e
349
+ e steelblue(' qa --set_default_topic=amg')
350
+ e steelblue(' qa --set_default_topic=phys')
351
+ e
352
+ end
353
+ end
354
+
355
+ require 'studium/statistics/report_how_many_exam_questions_were_answered.rb'
356
+ # ========================================================================= #
357
+ # === show_all_finished_exam_topics
358
+ #
359
+ # To invoke this method, do:
360
+ #
361
+ # qa --finished?
362
+ #
363
+ # ========================================================================= #
364
+ def show_all_finished_exam_topics
365
+ stats = Studium::Statistics::ReportHowManyExamQuestionsWereAnswered.new {
366
+ :do_not_show_the_result
367
+ }.internal_dataset
368
+ e "#{rev}The following topics are completely answered "\
369
+ "(#{colourize_percentage('100%')} answered ratio)."
370
+ array_finished_topics = []
371
+ stats.select {|key, value|
372
+ percentage = value[:percentage_of_questions_answered]
373
+ if percentage == 100.0
374
+ array_finished_topics << ::Studium.beautify_this_topic(key)
375
+ end
376
+ }
377
+ e
378
+ array_finished_topics.each {|topic|
379
+ e " #{simp(topic)} is completely answered."
380
+ }
381
+ e
382
+ end
383
+
384
+ # ========================================================================= #
385
+ # === generate_statistical_webpage
386
+ #
387
+ # Invoke like so:
388
+ #
389
+ # qa --www
390
+ #
391
+ # ========================================================================= #
392
+ def generate_statistical_webpage
393
+ require 'studium/statistics/report_how_many_exam_questions_were_answered.rb'
394
+ Studium::Statistics::ReportHowManyExamQuestionsWereAnswered.generate_webpage
395
+ end
396
+
397
+ # ========================================================================= #
398
+ # === opnn
399
+ # ========================================================================= #
400
+ def opnn
401
+ super(
402
+ namespace: @namespace,
403
+ use_colours: use_colours?
404
+ )
405
+ end
406
+
407
+ require 'studium/toplevel_methods/set_last_file_for_exam_questions.rb'
408
+ # ========================================================================= #
409
+ # === register_last_modified_file
410
+ # ========================================================================= #
411
+ def register_last_modified_file(
412
+ i = exam_file?
413
+ )
414
+ Studium.set_last_file_for_exam_questions(i) # , :be_verbose
415
+ end
416
+
417
+ require 'studium/toplevel_methods/n_questions_available.rb'
418
+ # ========================================================================= #
419
+ # === show_how_many_exam_questions_are_available
420
+ #
421
+ # This method can be called by passing in 'TOTAL' as argument.
422
+ #
423
+ # Example:
424
+ #
425
+ # qa TOTAL?
426
+ #
427
+ # ========================================================================= #
428
+ def show_how_many_exam_questions_are_available
429
+ n_questions = ::Studium.n_questions_available?.to_s
430
+ result = 'Total amount of registered questions: '.dup
431
+ if commandline? and use_colours?
432
+ result << simp(n_questions.to_s)
433
+ else
434
+ result << n_questions.to_s
435
+ end
436
+ e result
437
+ end; alias total show_how_many_exam_questions_are_available # === total (total tag)
438
+ alias n_total_questions_available? show_how_many_exam_questions_are_available # === n_total_questions_available?
439
+
440
+ # ========================================================================= #
441
+ # === show_the_last_topic
442
+ #
443
+ # Invocation example:
444
+ #
445
+ # qa --show-last-topic
446
+ #
447
+ # ========================================================================= #
448
+ def show_the_last_topic
449
+ _ = FILE_LAST_TOPIC
450
+ if File.exist? _
451
+ e rev+
452
+ 'The last topic was `'+
453
+ simp(
454
+ expand_topic(File.read(_).chomp)
455
+ )+'`.'
456
+ else
457
+ opnn; no_file_exists_at(_.to_s)
458
+ end
459
+ end
460
+
461
+ # ========================================================================= #
462
+ # === determine_whether_we_will_rename_the_konsole_tab
463
+ # ========================================================================= #
464
+ def determine_whether_we_will_rename_the_konsole_tab
465
+ if is_on_roebe?
466
+ if File.exist? FILE_RENAME_KONSOLE_TAB
467
+ _ = load_file_rename_konsole_tab
468
+ if _ == true
469
+ do_rename_konsole_tab
470
+ else
471
+ do_not_rename_konsole_tab
472
+ end
473
+ else
474
+ do_not_rename_konsole_tab
475
+ end
476
+ else
477
+ do_not_rename_konsole_tab
478
+ end
479
+ end
480
+
481
+ # ========================================================================= #
482
+ # === load_file_rename_konsole_tab
483
+ # ========================================================================= #
484
+ def load_file_rename_konsole_tab
485
+ YAML.load_file(FILE_RENAME_KONSOLE_TAB)
486
+ end
487
+
488
+ # ========================================================================= #
489
+ # === do_rename_konsole_tab
490
+ # ========================================================================= #
491
+ def do_rename_konsole_tab
492
+ AskExamQuestion.set_rename_konsole_tab(true)
493
+ end
494
+
495
+ # ========================================================================= #
496
+ # === do_not_rename_konsole_tab
497
+ # ========================================================================= #
498
+ def do_not_rename_konsole_tab
499
+ AskExamQuestion.set_rename_konsole_tab(false)
500
+ end
501
+
502
+ require 'studium/toplevel_methods/download.rb'
503
+ # ========================================================================= #
504
+ # === download_exam_topics
505
+ #
506
+ # You can use this method to download all exam topics.
507
+ #
508
+ # To call this, do:
509
+ #
510
+ # qa --dexamtopics
511
+ #
512
+ # ========================================================================= #
513
+ def download_exam_topics
514
+ Studium.download_exam_topics
515
+ end
516
+
517
+ # ========================================================================= #
518
+ # === show_last_question_asked
519
+ #
520
+ # This will show the last question asked.
521
+ # ========================================================================= #
522
+ def show_last_question_asked(
523
+ i = store_where?
524
+ )
525
+ if File.exist? i
526
+ e File.read(i)
527
+ end
528
+ end
529
+
530
+ # ========================================================================= #
531
+ # === show_content_of_this_topic
532
+ # ========================================================================= #
533
+ def show_content_of_this_topic(
534
+ i = topic?
535
+ )
536
+ dataset = filter_away_invalid_questions(
537
+ File.readlines(
538
+ directory_to_the_exam_topics?+i
539
+ )
540
+ )
541
+ dataset.each {|line|
542
+ e " #{simp(line.chomp)}"
543
+ }
544
+ end
545
+
546
+ # ========================================================================= #
547
+ # === tell_whether_we_will_rename_the_kde_konsole_tab
548
+ # ========================================================================= #
549
+ def tell_whether_we_will_rename_the_kde_konsole_tab
550
+ e 'Will we rename the KDE konsole tab? '+
551
+ simp(
552
+ VerboseTruth[load_file_rename_konsole_tab.to_s]
553
+ )
554
+ end
555
+
556
+ # ========================================================================= #
557
+ # === set_default_topic_for_the_gui
558
+ # ========================================================================= #
559
+ def set_default_topic_for_the_gui(what)
560
+ into = log_dir?+'use_this_exam_topic.yml'
561
+ opnn; e 'Now setting the default topic to `'+simp(what)+'`.'
562
+ write_what_into(what, into)
563
+ end
564
+
565
+ # ========================================================================= #
566
+ # === report_file_does_not_exist
567
+ # ========================================================================= #
568
+ def report_file_does_not_exist
569
+ opnn; e "#{rev}No file at `#{sfile(exam_file?)}` exists."
570
+ end
571
+
572
+ # ========================================================================= #
573
+ # === consider_warning_the_user_if_there_are_too_many_exams_registered
574
+ # ========================================================================= #
575
+ def consider_warning_the_user_if_there_are_too_many_exams_registered
576
+ if WARN_THE_USER_IF_THERE_ARE_TOO_MANY_QUESTIONS_REGISTERED_IN_AN_EXAM_TOPIC and
577
+ # ===================================================================== #
578
+ # Check if we have more questions than we are allowed to have.
579
+ # ===================================================================== #
580
+ (n_questions? > THRESHOLD_VALUE_N_EXAMS_AT_MAXIMUM)
581
+ e
582
+ opnn; e swarn('Do note that there are too many exam questions '\
583
+ 'registered in the file:')
584
+ e
585
+ e " #{sfile(which_file?)}"
586
+ e
587
+ end
588
+ end
589
+
590
+ # ========================================================================= #
591
+ # === load_the_dataset_based_on_the_exam_topic_before_rejecting_invalid_entries
592
+ # ========================================================================= #
593
+ def load_the_dataset_based_on_the_exam_topic_before_rejecting_invalid_entries
594
+ load_the_dataset_based_on_the_exam_topic
595
+ reject_invalid_entries
596
+ end
597
+
598
+ # ========================================================================= #
599
+ # === main_file_exists?
600
+ # ========================================================================= #
601
+ def main_file_exists?(i = exam_file?)
602
+ File.exist? i
603
+ end
604
+
605
+ # ========================================================================= #
606
+ # === set_dataset
607
+ # ========================================================================= #
608
+ def set_dataset(i = nil)
609
+ @dataset = i
610
+ end; alias set_data set_dataset # === set_data
611
+
612
+ # ========================================================================= #
613
+ # === dataset?
614
+ # ========================================================================= #
615
+ def dataset?
616
+ @dataset
617
+ end
618
+
619
+ # ========================================================================= #
620
+ # === edit_sanitize_topics_in_vim
621
+ #
622
+ # To trigger this, do:
623
+ #
624
+ # qa --vim
625
+ #
626
+ # ========================================================================= #
627
+ def edit_sanitize_topics_in_vim
628
+ position_in_the_file = 445
629
+ file =
630
+ RUBY_STUDIUM_HOME_DIR+'toplevel_methods/find_exam_topic_and_exam_title.rb'
631
+ _ = 'vim '+file+' +'+position_in_the_file.to_s
632
+ esystem _
633
+ end
634
+
635
+ # ========================================================================= #
636
+ # === determine_the_exam_topic_then_determine_the_exam_file
637
+ # ========================================================================= #
638
+ def determine_the_exam_topic_then_determine_the_exam_file
639
+ determine_the_exam_topic
640
+ determine_the_exam_file
641
+ end
642
+
643
+ # ========================================================================= #
644
+ # === determine_the_exam_file
645
+ # ========================================================================= #
646
+ def determine_the_exam_file(exam_topic = exam_topic?)
647
+ unless ::Studium.is_this_a_registered_exam_topic?(exam_topic)
648
+ exam_topic = ::Studium.return_random_exam_topic
649
+ end
650
+ target_file = directory_to_the_exam_topics?+
651
+ find_corresponding_exam_topic(exam_topic)
652
+ set_exam_file(target_file)
653
+ end
654
+
655
+ # ========================================================================= #
656
+ # === report_how_many_registered_questions_are_available
657
+ # ========================================================================= #
658
+ def report_how_many_registered_questions_are_available
659
+ n_questions = ::Studium.n_questions_available?
660
+ opnn; e "#{rev}There are #{simp(n_questions.to_s)} registered "\
661
+ "questions available."
662
+ end
663
+
664
+ # ========================================================================= #
665
+ # === report_whether_we_will_show_the_topic
666
+ # ========================================================================= #
667
+ def report_whether_we_will_show_the_topic
668
+ opnn; e 'Will we show the topic of the exams when asking a '\
669
+ 'question: '+
670
+ simp(VerboseTruth[may_we_show_the_topic?])
671
+ end
672
+
673
+ # ========================================================================= #
674
+ # === exam_topic?
675
+ # ========================================================================= #
676
+ def exam_topic?
677
+ @exam_topic
678
+ end; alias exam_title? exam_topic? # === exam_title?
679
+ alias which_topic? exam_topic? # === which_topic?
680
+ alias topic? exam_topic? # === topic?
681
+ alias topic exam_topic? # === topic
682
+ alias title exam_topic? # === title
683
+ alias title? exam_topic? # === title?
684
+ alias category? exam_topic? # === category?
685
+
686
+ # ========================================================================= #
687
+ # === load_the_dataset_based_on_the_exam_topic
688
+ #
689
+ # Determine the @dataset variable.
690
+ # ========================================================================= #
691
+ def load_the_dataset_based_on_the_exam_topic(i = exam_file?)
692
+ @dataset = File.readlines(i)
693
+ end; alias determine_the_dataset load_the_dataset_based_on_the_exam_topic # === determine_the_dataset
694
+
695
+ # ========================================================================= #
696
+ # === notify_the_user_that_all_questions_have_been_answered_already
697
+ # ========================================================================= #
698
+ def notify_the_user_that_all_questions_have_been_answered_already(
699
+ which_topic = which_topic?
700
+ )
701
+ opnn; e 'All questions have already been answered '
702
+ opnn; e "for the topic `#{orange(which_topic)}`. "\
703
+ "#{slateblue(cheering_person?)}"
704
+ end
705
+
706
+ # ========================================================================= #
707
+ # === set_exam_topic
708
+ #
709
+ # We need to store the expanded topic name, so that something like
710
+ # "bioanalytik" is turned into "bioanalytik_und_biosensoren".
711
+ #
712
+ # Whenever a topic is set through this method, this will also be
713
+ # stored into a file. This then allows us to query what the
714
+ # last topic was, e. g. via "qa --last_topic?".
715
+ # ========================================================================= #
716
+ def set_exam_topic(i)
717
+ i = i.first if i.is_a? Array
718
+ # ======================================================================= #
719
+ # === Handle Hashes
720
+ #
721
+ # If a Hash is given then we will try to find a specific key in
722
+ # that Hash.
723
+ # ======================================================================= #
724
+ if i.is_a?(Hash) and i.has_key?(:use_this_topic)
725
+ i = i[:use_this_topic]
726
+ end
727
+ i = i.to_s.dup # Work with a String past this point.
728
+ i.downcase! # Convention is to store the file downcased.
729
+ case i
730
+ # ======================================================================= #
731
+ # === random
732
+ #
733
+ # We fetch a random topic via this entry-point.
734
+ # ======================================================================= #
735
+ when 'fetch_a_random_topic',
736
+ 'random_topic',
737
+ 'random',
738
+ 'rand'
739
+ i = ::Studium::Exams.random_short_name_topic # This is allowed, for random topics.
740
+ # ======================================================================= #
741
+ # === molbio
742
+ #
743
+ # This entry point is special.
744
+ # ======================================================================= #
745
+ when 'molbio','molekularbiologie','molbio?'
746
+ i = 'amg|amg2|genex1|gentech1|gentech2|pcr'
747
+ # ======================================================================= #
748
+ # === OLAST
749
+ # ======================================================================= #
750
+ when /^qlast$/i,
751
+ /^olast$/i # === olast tag
752
+ _ = FILE_LAST_TOPIC
753
+ if File.exist? _
754
+ i = File.read(FILE_LAST_TOPIC).strip
755
+ else
756
+ opnn; no_file_exists_at(_)
757
+ end
758
+ end
759
+ # ======================================================================= #
760
+ # If the input has a '|', we assume that the user wants to randomly
761
+ # pick one entry.
762
+ # ======================================================================= #
763
+ if i.include? '|'
764
+ i = i.split('|').shuffle
765
+ end
766
+ # ======================================================================= #
767
+ # Before we do the real assignment, we will sanitize this through
768
+ # the Studium.find_corresponding_exam_topic "filter".
769
+ # ======================================================================= #
770
+ i = Studium.find_corresponding_exam_topic(i)
771
+ @exam_topic = i
772
+ end; alias set_this_topic set_exam_topic # === set_this_topic
773
+
774
+ # ========================================================================= #
775
+ # === n_questions?
776
+ #
777
+ # Return how many questions are available in the given dataset at hand.
778
+ # ========================================================================= #
779
+ def n_questions?
780
+ @dataset.size
781
+ end
782
+
783
+ # ========================================================================= #
784
+ # === determine_the_exam_pool
785
+ # ========================================================================= #
786
+ def determine_the_exam_pool(
787
+ array = @dataset
788
+ )
789
+ # ======================================================================= #
790
+ # Get rid of files that end with "[]\n" tokens, but only if a certain
791
+ # instance variable is set to true.
792
+ # ======================================================================= #
793
+ if @reject_lines_that_end_with_a_done_token
794
+ array = array.reject {|line|
795
+ line.end_with?(" []#{N}")
796
+ }
797
+ end
798
+ @exam_pool = array
799
+ end
800
+
801
+ # ========================================================================= #
802
+ # === n_questions_already_answered?
803
+ # ========================================================================= #
804
+ def n_questions_already_answered?
805
+ @exam_pool.size
806
+ end
807
+
808
+ # ========================================================================= #
809
+ # === line?
810
+ # ========================================================================= #
811
+ def line?
812
+ @line
813
+ end; alias line line? # === line
814
+ alias full_question_line? line? # === full_question_line?
815
+
816
+ # ========================================================================= #
817
+ # === store_last_topic_into_file
818
+ #
819
+ # By default we will not report this activity.
820
+ # ========================================================================= #
821
+ def store_last_topic_into_file(
822
+ what = topic?
823
+ )
824
+ into = FILE_LAST_TOPIC
825
+ write_what_into(what, into)
826
+ end
827
+
828
+ # ========================================================================= #
829
+ # === determine_the_exam_topic
830
+ # ========================================================================= #
831
+ def determine_the_exam_topic
832
+ use_this_topic = first_argument?
833
+ case use_this_topic
834
+ when nil, ''
835
+ use_this_topic = :random
836
+ end
837
+ set_exam_topic(use_this_topic)
838
+ store_last_topic_into_file(use_this_topic)
839
+ end
840
+
841
+ # ========================================================================= #
842
+ # === try_to_save_the_line (save tag)
843
+ #
844
+ # This is called whenever the main line is obtained. The original line is
845
+ # copied, not any modified variant.
846
+ #
847
+ # We will store into a file, which is kept at @store_where.
848
+ #
849
+ # It usually defaults to the file /Depot/Studium/last_question_asked.md
850
+ # or wherever else the base-directory has been defined.
851
+ # ========================================================================= #
852
+ def try_to_save_the_line(
853
+ i = line?
854
+ )
855
+ _ = store_where? # Where to store.
856
+ if File.exist?(File.dirname(_))
857
+ if debug?
858
+ opnn; e "Now saving: #{bold_blue(i)} into the file #{sfile(_)}"
859
+ end if commandline?
860
+ if File.writable?(File.dirname(_))
861
+ write_what_into(i, _) # Save it.
862
+ end
863
+ end
864
+ end
865
+
866
+ # ========================================================================= #
867
+ # === set_line
868
+ #
869
+ # Set the line via this method. The line is a full line from the
870
+ # file that contains all questions and answers of a specific
871
+ # topic at hand.
872
+ #
873
+ # Note that this setter does NOT modify anything; the reason why it
874
+ # shall not modify anything is because we will store that line into
875
+ # a local file too.
876
+ # ========================================================================= #
877
+ def set_line(i)
878
+ i = i.first if i.is_a? Array # We only want the first entry, if it is an Array.
879
+ @line = i
880
+ end
881
+
882
+ # ========================================================================= #
883
+ # === set_all_questions_from_the_topic_to_solved
884
+ #
885
+ # This will solve all questions from a given topic.
886
+ #
887
+ # Invocation example:
888
+ #
889
+ # qa ALL_SOLVED
890
+ #
891
+ # ========================================================================= #
892
+ def set_all_questions_from_the_topic_to_solved
893
+ if commandline?
894
+ require 'studium/exams/solve_all_questions_from_this_topic.rb'
895
+ this_topic = which_topic?
896
+ e "#{rev}Setting all questions from the topic "\
897
+ "#{sfancy(this_topic)} to solved."
898
+ Studium::SolveAllQuestionsFromThisTopic.new(this_topic)
899
+ end
900
+ end
901
+
902
+ require 'studium/toplevel_methods/filter_away_invalid_questions.rb'
903
+ # ========================================================================= #
904
+ # === filter_away_invalid_questions
905
+ # ========================================================================= #
906
+ def filter_away_invalid_questions(i)
907
+ Studium.filter_away_invalid_questions(i)
908
+ end
909
+
910
+ # ========================================================================= #
911
+ # === do_ask_a_random_question_before_showing_the_answer
912
+ # ========================================================================= #
913
+ def do_ask_a_random_question_before_showing_the_answer
914
+ determine_the_exam_pool
915
+ if @exam_pool.empty?
916
+ notify_the_user_that_all_questions_have_been_answered_already
917
+ exit_program
918
+ else
919
+ use_this_sample = @exam_pool.sample
920
+ set_line(use_this_sample)
921
+ try_to_save_the_line(@line)
922
+ # ======================================================================= #
923
+ # Next, we must determine the "split" position in that question-answer
924
+ # line. This will vary depending on the particular line, as we allow
925
+ # for different formats to be used therein.
926
+ # ======================================================================= #
927
+ @question_answer.set_line(@line) { :then_determine_the_split_position }
928
+ @question_answer.determine_the_question_and_the_answer
929
+ ask_this_question(@question_answer.question?)
930
+ start_default_sleep
931
+ show_this_answer(@question_answer.answer?)
932
+ end
933
+ end; alias ask_question_then_show_the_answer_after_a_delay do_ask_a_random_question_before_showing_the_answer # === ask_question_then_show_the_answer_after_a_delay
934
+ alias show_question_then_sleep_then_show_answer do_ask_a_random_question_before_showing_the_answer # === show_question_then_sleep_then_show_answer
935
+ alias ask_sleep_show do_ask_a_random_question_before_showing_the_answer # === ask_sleep_show
936
+ alias ask_the_question_then_reveal_the_answer do_ask_a_random_question_before_showing_the_answer # === ask_the_question_then_reveal_the_answer
937
+
938
+ end; end; end