studium 0.18.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (821) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +3310 -0
  3. data/bin/all_passed_exams +14 -0
  4. data/bin/check_description_of_these_lectures +7 -0
  5. data/bin/curriculum_module_displayer +7 -0
  6. data/bin/cycle +7 -0
  7. data/bin/d10 +7 -0
  8. data/bin/d100 +7 -0
  9. data/bin/d15 +7 -0
  10. data/bin/d150 +7 -0
  11. data/bin/d20 +7 -0
  12. data/bin/d25 +7 -0
  13. data/bin/d3 +7 -0
  14. data/bin/d30 +7 -0
  15. data/bin/d5 +7 -0
  16. data/bin/determine_curricula +7 -0
  17. data/bin/display_lecture_url +7 -0
  18. data/bin/exam_registration_at +7 -0
  19. data/bin/exam_statistics +7 -0
  20. data/bin/exams_per_month +9 -0
  21. data/bin/finished_exams_at_this_university +7 -0
  22. data/bin/flashcards +7 -0
  23. data/bin/from_curriculum_id_to_university +9 -0
  24. data/bin/location_to_this_exam_topic.rb +7 -0
  25. data/bin/mandatory_continuous_assessment +7 -0
  26. data/bin/mandatory_upcoming_courses +10 -0
  27. data/bin/n_ECTS +7 -0
  28. data/bin/n_exam_questions_already_answered +15 -0
  29. data/bin/names_of_all_solved_exams +7 -0
  30. data/bin/not_completed_exams +7 -0
  31. data/bin/nquestions +7 -0
  32. data/bin/nsolved +7 -0
  33. data/bin/open_last_exam_question_asked_file +7 -0
  34. data/bin/passed_exams +7 -0
  35. data/bin/passed_pr/303/274fungsimmanente_courses +7 -0
  36. data/bin/passed_this_exam_on +10 -0
  37. data/bin/pdf_for +7 -0
  38. data/bin/question_answer +7 -0
  39. data/bin/random_exam_topic +7 -0
  40. data/bin/registered_for_this_exam +15 -0
  41. data/bin/report_solved_topics +7 -0
  42. data/bin/return_n_ects_from_this_file +7 -0
  43. data/bin/return_n_questions_solved_in_total +7 -0
  44. data/bin/rti_conflict +7 -0
  45. data/bin/search_for_n_ects +7 -0
  46. data/bin/show_lectures_on_the_commandline +7 -0
  47. data/bin/show_passed_exams_having_this_grade +7 -0
  48. data/bin/show_themes +7 -0
  49. data/bin/solved +9 -0
  50. data/bin/solved_ects +7 -0
  51. data/bin/studienkennzahl +7 -0
  52. data/bin/studium +7 -0
  53. data/bin/studium_actions +7 -0
  54. data/bin/studium_skeleton +7 -0
  55. data/bin/ufind +7 -0
  56. data/bin/upcoming_exams +7 -0
  57. data/bin/week_parser +7 -0
  58. data/doc/ECTS_CONSIDERATIONS/ECTS_CONSIDERATIONS.md +85 -0
  59. data/doc/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER.md +44 -0
  60. data/doc/README.gen +3263 -0
  61. data/doc/SQL_database_specification/SQL_database_specification.md +46 -0
  62. data/doc/deprecated_components/deprecated_components.md +46 -0
  63. data/doc/documentation_for_the_file_lecture_information/documentation_for_the_file_lecture_information.md +311 -0
  64. data/doc/elegant_colours/elegant_colours.md +21 -0
  65. data/doc/statistics/yearly_statistics.md +8 -0
  66. data/doc/todo/todo_for_the_graphical_parts_of_the_studium_gem_including_www_related_aspects.md +92 -0
  67. data/doc/todo/todo_for_the_studium_gem.md +55 -0
  68. data/img/STUDIES.png +0 -0
  69. data/lib/studium/actions/actions.rb +134 -0
  70. data/lib/studium/autoinclude.rb +7 -0
  71. data/lib/studium/base/base.rb +3554 -0
  72. data/lib/studium/base/commandline_arguments_module/commandline_arguments_module.rb +115 -0
  73. data/lib/studium/base/html_colours_module.rb +632 -0
  74. data/lib/studium/base/runmode_module/runmode_module.rb +103 -0
  75. data/lib/studium/c/README.md +2 -0
  76. data/lib/studium/c/a.out +0 -0
  77. data/lib/studium/c/obtain_random_entry.c +11 -0
  78. data/lib/studium/check_and_sanitize/README.md +15 -0
  79. data/lib/studium/check_and_sanitize/check_curriculum_for_correct_separation_of_bachelor_and_master.rb +141 -0
  80. data/lib/studium/check_and_sanitize/check_for_all_exam_topics_being_registered.rb +118 -0
  81. data/lib/studium/check_and_sanitize/check_for_correct_themes_of_each_course.rb +100 -0
  82. data/lib/studium/check_and_sanitize/check_for_existing_description_of_this_lecture.rb +194 -0
  83. data/lib/studium/check_and_sanitize/check_important_exams.rb +138 -0
  84. data/lib/studium/check_and_sanitize/check_the_lecture_information_file.rb +166 -0
  85. data/lib/studium/check_and_sanitize/correct_all_dates_in_the_file_lecture_information.rb +115 -0
  86. data/lib/studium/check_and_sanitize/date_sanitizer.rb +350 -0
  87. data/lib/studium/check_and_sanitize/find_duplicate_lectures.rb +124 -0
  88. data/lib/studium/check_and_sanitize/missing_priority_entry.rb +44 -0
  89. data/lib/studium/check_and_sanitize/sanitize_lecture_information.rb +434 -0
  90. data/lib/studium/colours/colours.rb +1711 -0
  91. data/lib/studium/commandline/commandline.rb +1848 -0
  92. data/lib/studium/constants/constants.rb +2063 -0
  93. data/lib/studium/css/project.css +273 -0
  94. data/lib/studium/curricula/attribute_lecture_to_curriculum/attribute_boku_lecture_to_curriculum.rb +384 -0
  95. data/lib/studium/curricula/attribute_lecture_to_curriculum/attribute_lecture_to_curriculum.rb +238 -0
  96. data/lib/studium/curricula/curricula_from_this_website/curricula_from_this_website.rb +141 -0
  97. data/lib/studium/curricula/curriculum.rb +213 -0
  98. data/lib/studium/curricula/curriculum_as_string.rb +280 -0
  99. data/lib/studium/curricula/curriculum_module_displayer/constants.rb +33 -0
  100. data/lib/studium/curricula/curriculum_module_displayer/curriculum_module_displayer.rb +417 -0
  101. data/lib/studium/curricula/curriculum_module_displayer/initialize.rb +25 -0
  102. data/lib/studium/curricula/curriculum_module_displayer/menu.rb +45 -0
  103. data/lib/studium/curricula/curriculum_module_displayer/reset.rb +74 -0
  104. data/lib/studium/curricula/curriculum_module_displayer/run.rb +20 -0
  105. data/lib/studium/curricula/curriculum_module_displayer/set_use_this_curriculum.rb +93 -0
  106. data/lib/studium/curricula/curriculum_module_displayer/show_and_report.rb +190 -0
  107. data/lib/studium/curricula/determine_curricula/constants.rb +11 -0
  108. data/lib/studium/curricula/determine_curricula/determine_curricula.rb +36 -0
  109. data/lib/studium/curricula/determine_curricula/help.rb +39 -0
  110. data/lib/studium/curricula/determine_curricula/initialize.rb +48 -0
  111. data/lib/studium/curricula/determine_curricula/menu.rb +151 -0
  112. data/lib/studium/curricula/determine_curricula/misc.rb +403 -0
  113. data/lib/studium/curricula/determine_curricula/report.rb +141 -0
  114. data/lib/studium/curricula/determine_curricula/reset.rb +59 -0
  115. data/lib/studium/curricula/determine_curricula/run.rb +19 -0
  116. data/lib/studium/curricula/determine_elective_courses_in_this_curriculum.rb +112 -0
  117. data/lib/studium/curricula/display_bachelor_curricula.rb +90 -0
  118. data/lib/studium/curricula/handle_curricula/README.md +9 -0
  119. data/lib/studium/curricula/handle_curricula/handle_curricula.rb +99 -0
  120. data/lib/studium/curricula/handle_curricula/misc.rb +798 -0
  121. data/lib/studium/curricula/mitteilungsbl/303/244tter/mitteilungsbl/303/244tter.rb +323 -0
  122. data/lib/studium/curricula/modules/display_on_the_commandline.rb +319 -0
  123. data/lib/studium/curricula/modules/return_n_ects_in_this_module.rb +74 -0
  124. data/lib/studium/curricula/n_percent_solved_in_this_curriculum.rb +73 -0
  125. data/lib/studium/curricula/prepare_individual_curriculum.rb +304 -0
  126. data/lib/studium/curricula/random_curriculum_creator/random_curriculum_creator.rb +164 -0
  127. data/lib/studium/curricula/show_all_unfinished_courses_of_this_curriculum/show_all_unfinished_courses_of_this_curriculum.rb +116 -0
  128. data/lib/studium/curricula/show_lectures_of_this_curriculum.rb +114 -0
  129. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/show_lectures_of_this_curriculum_id.rb +554 -0
  130. data/lib/studium/curricula/show_solved_percentage_among_the_registered_curricula.rb +87 -0
  131. data/lib/studium/curricula/sorted_individual_curricula.rb +121 -0
  132. data/lib/studium/ects/boku_ects_splitter.rb +128 -0
  133. data/lib/studium/ects/ects_per_university/ects_per_university.rb +179 -0
  134. data/lib/studium/ects/ects_scanner.rb +141 -0
  135. data/lib/studium/ects/ects_to_university_parser.rb +142 -0
  136. data/lib/studium/ects/last_entry_is_curriculum.rb +150 -0
  137. data/lib/studium/ects/n_ects_in_these_lectures.rb +196 -0
  138. data/lib/studium/ects/n_ects_points_in_mandatory_presence_courses.rb +47 -0
  139. data/lib/studium/ects/return_n_ects_from_this_file.rb +59 -0
  140. data/lib/studium/ects/return_n_ects_from_this_url.rb +197 -0
  141. data/lib/studium/ects/search_for_n_ects/search_for_n_ects.rb +719 -0
  142. data/lib/studium/ects/show_completed_ects_in_all_curricula.rb +245 -0
  143. data/lib/studium/ects/show_passed_credits_per_curriculum.rb +276 -0
  144. data/lib/studium/ects/simple_total_ects_points.rb +135 -0
  145. data/lib/studium/ects/solved_ects/constants.rb +19 -0
  146. data/lib/studium/ects/solved_ects/reset.rb +50 -0
  147. data/lib/studium/ects/solved_ects/solved_ects.rb +325 -0
  148. data/lib/studium/ects/solved_ects_per_university/reset.rb +25 -0
  149. data/lib/studium/ects/solved_ects_per_university/solved_ects_per_university.rb +116 -0
  150. data/lib/studium/ects/still_missing.rb +129 -0
  151. data/lib/studium/ects/sum_of_ects.rb +144 -0
  152. data/lib/studium/encoding/encoding.rb +109 -0
  153. data/lib/studium/exam_topics/RNAi_siRNA_and_miRNA +100 -0
  154. data/lib/studium/exam_topics/abfall_als_ressource +86 -0
  155. data/lib/studium/exam_topics/advanced_biochemistry +937 -0
  156. data/lib/studium/exam_topics/advanced_biotechnology +234 -0
  157. data/lib/studium/exam_topics/advanced_cellbiology +251 -0
  158. data/lib/studium/exam_topics/advanced_chemistry +547 -0
  159. data/lib/studium/exam_topics/advanced_immunology +225 -0
  160. data/lib/studium/exam_topics/advanced_microbiology +49 -0
  161. data/lib/studium/exam_topics/advanced_topics_in_plant_sciences +117 -0
  162. data/lib/studium/exam_topics/advanced_virology +273 -0
  163. data/lib/studium/exam_topics/ageing +154 -0
  164. data/lib/studium/exam_topics/agrar_ecology +67 -0
  165. data/lib/studium/exam_topics/agrarmarkt +73 -0
  166. data/lib/studium/exam_topics/agrarphysik +35 -0
  167. data/lib/studium/exam_topics/alcohols +30 -0
  168. data/lib/studium/exam_topics/algorithms +104 -0
  169. data/lib/studium/exam_topics/allergie +76 -0
  170. data/lib/studium/exam_topics/allgemeine_genetik +1006 -0
  171. data/lib/studium/exam_topics/allgemeine_mikrobiologie +1012 -0
  172. data/lib/studium/exam_topics/aminoacids +469 -0
  173. data/lib/studium/exam_topics/analytische_chemie_1 +134 -0
  174. data/lib/studium/exam_topics/analytische_chemie_2 +31 -0
  175. data/lib/studium/exam_topics/anatomie +378 -0
  176. data/lib/studium/exam_topics/anorganische_chemie +357 -0
  177. data/lib/studium/exam_topics/anthropologie +239 -0
  178. data/lib/studium/exam_topics/antibodies_and_antigens +790 -0
  179. data/lib/studium/exam_topics/apoptosis +35 -0
  180. data/lib/studium/exam_topics/archaea +112 -0
  181. data/lib/studium/exam_topics/archaeo_viruses +7 -0
  182. data/lib/studium/exam_topics/archaeology +5 -0
  183. data/lib/studium/exam_topics/architecture +8 -0
  184. data/lib/studium/exam_topics/artificial_intelligence +90 -0
  185. data/lib/studium/exam_topics/atomemissionsspektrometrie +6 -0
  186. data/lib/studium/exam_topics/audio +11 -0
  187. data/lib/studium/exam_topics/bacteriophages +266 -0
  188. data/lib/studium/exam_topics/basic_biochemistry +1008 -0
  189. data/lib/studium/exam_topics/basic_biotechnology +1011 -0
  190. data/lib/studium/exam_topics/basic_chemistry +1007 -0
  191. data/lib/studium/exam_topics/basic_virology +1008 -0
  192. data/lib/studium/exam_topics/bauwesen +6 -0
  193. data/lib/studium/exam_topics/betriebssysteme +128 -0
  194. data/lib/studium/exam_topics/betriebswirtschaftslehre +29 -0
  195. data/lib/studium/exam_topics/bioanalytik_und_biosensoren +451 -0
  196. data/lib/studium/exam_topics/biochips +80 -0
  197. data/lib/studium/exam_topics/bioelektrochemie +57 -0
  198. data/lib/studium/exam_topics/biofilms +58 -0
  199. data/lib/studium/exam_topics/bioinformatics +523 -0
  200. data/lib/studium/exam_topics/biological_therapeutics +156 -0
  201. data/lib/studium/exam_topics/biologie +152 -0
  202. data/lib/studium/exam_topics/biomarkers +137 -0
  203. data/lib/studium/exam_topics/biomaterials +90 -0
  204. data/lib/studium/exam_topics/biomedical_studies +16 -0
  205. data/lib/studium/exam_topics/biomembranes +6 -0
  206. data/lib/studium/exam_topics/bionik +65 -0
  207. data/lib/studium/exam_topics/biophysik +34 -0
  208. data/lib/studium/exam_topics/biopolymers +10 -0
  209. data/lib/studium/exam_topics/bioprozesstechnik +149 -0
  210. data/lib/studium/exam_topics/bioressourcenmanagement +78 -0
  211. data/lib/studium/exam_topics/birds +5 -0
  212. data/lib/studium/exam_topics/bodenkunde +384 -0
  213. data/lib/studium/exam_topics/bodenmikrobiologie +40 -0
  214. data/lib/studium/exam_topics/cancerbiology +488 -0
  215. data/lib/studium/exam_topics/cell_cultures +229 -0
  216. data/lib/studium/exam_topics/cellbiology +1011 -0
  217. data/lib/studium/exam_topics/cellular_transport_and_protein_secretion +27 -0
  218. data/lib/studium/exam_topics/cellular_vesicles +11 -0
  219. data/lib/studium/exam_topics/cellulose +6 -0
  220. data/lib/studium/exam_topics/chemische_technologie_anorganischer_stoffe +210 -0
  221. data/lib/studium/exam_topics/chemische_technologie_organischer_stoffe +25 -0
  222. data/lib/studium/exam_topics/chemisches_labor +60 -0
  223. data/lib/studium/exam_topics/chemokines_and_cytokines +45 -0
  224. data/lib/studium/exam_topics/chemotaxis_quorum_sensing_and_motility_in_prokaryotes +116 -0
  225. data/lib/studium/exam_topics/citric_acid_cycle +84 -0
  226. data/lib/studium/exam_topics/clinical_microbiology +520 -0
  227. data/lib/studium/exam_topics/computer_science +309 -0
  228. data/lib/studium/exam_topics/computer_vision_and_computer_graphics +15 -0
  229. data/lib/studium/exam_topics/crispr +51 -0
  230. data/lib/studium/exam_topics/cyanobacteria +45 -0
  231. data/lib/studium/exam_topics/cytogenetics_and_chromosome_biology +598 -0
  232. data/lib/studium/exam_topics/databases_and_sql +126 -0
  233. data/lib/studium/exam_topics/dna_mutation_and_dna_repair +186 -0
  234. data/lib/studium/exam_topics/dna_replication +80 -0
  235. data/lib/studium/exam_topics/ecogenetics +26 -0
  236. data/lib/studium/exam_topics/ecological_agriculture +12 -0
  237. data/lib/studium/exam_topics/ecology +332 -0
  238. data/lib/studium/exam_topics/economy +226 -0
  239. data/lib/studium/exam_topics/electron_microscopy +7 -0
  240. data/lib/studium/exam_topics/elektronenmikroskopie +356 -0
  241. data/lib/studium/exam_topics/elektrophorese +132 -0
  242. data/lib/studium/exam_topics/elektrotechnik_und_elektrizit/303/244t +42 -0
  243. data/lib/studium/exam_topics/elisa +55 -0
  244. data/lib/studium/exam_topics/embryologie_und_entwicklung +657 -0
  245. data/lib/studium/exam_topics/endospores_and_spores +104 -0
  246. data/lib/studium/exam_topics/enzymes_and_cofactors +395 -0
  247. data/lib/studium/exam_topics/epigenetik +188 -0
  248. data/lib/studium/exam_topics/erste_hilfe +414 -0
  249. data/lib/studium/exam_topics/ethik +143 -0
  250. data/lib/studium/exam_topics/evolution_and_evolutionary_genetics +372 -0
  251. data/lib/studium/exam_topics/excel +7 -0
  252. data/lib/studium/exam_topics/fish +19 -0
  253. data/lib/studium/exam_topics/fluorescence_microscopy +10 -0
  254. data/lib/studium/exam_topics/food_microbiology_and_food_biotechnology +92 -0
  255. data/lib/studium/exam_topics/forensik +65 -0
  256. data/lib/studium/exam_topics/forstwirtschaft +53 -0
  257. data/lib/studium/exam_topics/fortgeschrittene_genetik +692 -0
  258. data/lib/studium/exam_topics/fortgeschrittene_gentechnik +221 -0
  259. data/lib/studium/exam_topics/fortgeschrittene_physik +6 -0
  260. data/lib/studium/exam_topics/fungi +119 -0
  261. data/lib/studium/exam_topics/genetische_krankheiten +209 -0
  262. data/lib/studium/exam_topics/genexpression +1008 -0
  263. data/lib/studium/exam_topics/genomics_and_metagenomics +290 -0
  264. data/lib/studium/exam_topics/gentechnik_und_praktische_biochemie +961 -0
  265. data/lib/studium/exam_topics/geochemistry +67 -0
  266. data/lib/studium/exam_topics/geography +9 -0
  267. data/lib/studium/exam_topics/geologie_und_mineralogie +624 -0
  268. data/lib/studium/exam_topics/geometrie +56 -0
  269. data/lib/studium/exam_topics/geschichte +95 -0
  270. data/lib/studium/exam_topics/gluconeogenesis +72 -0
  271. data/lib/studium/exam_topics/glycogen +45 -0
  272. data/lib/studium/exam_topics/glycolysis +118 -0
  273. data/lib/studium/exam_topics/glykomik +131 -0
  274. data/lib/studium/exam_topics/glyoxylatzyklus +31 -0
  275. data/lib/studium/exam_topics/grassland_cultivation +32 -0
  276. data/lib/studium/exam_topics/hormone +152 -0
  277. data/lib/studium/exam_topics/html +8 -0
  278. data/lib/studium/exam_topics/human_ecology +8 -0
  279. data/lib/studium/exam_topics/hygiene +224 -0
  280. data/lib/studium/exam_topics/imaging_and_microscopy +270 -0
  281. data/lib/studium/exam_topics/immunanalytik +94 -0
  282. data/lib/studium/exam_topics/immunologie +1011 -0
  283. data/lib/studium/exam_topics/informatik +117 -0
  284. data/lib/studium/exam_topics/innate_immunity +52 -0
  285. data/lib/studium/exam_topics/insekten +66 -0
  286. data/lib/studium/exam_topics/insulin_and_diabetes +57 -0
  287. data/lib/studium/exam_topics/java +624 -0
  288. data/lib/studium/exam_topics/javascript +29 -0
  289. data/lib/studium/exam_topics/klima +6 -0
  290. data/lib/studium/exam_topics/kryptographie +10 -0
  291. data/lib/studium/exam_topics/landtechnik +26 -0
  292. data/lib/studium/exam_topics/lebensmittel_und_getr/303/244nke +224 -0
  293. data/lib/studium/exam_topics/lebensmitteltechnologie +16 -0
  294. data/lib/studium/exam_topics/light_microscopy +19 -0
  295. data/lib/studium/exam_topics/linux_and_unix +36 -0
  296. data/lib/studium/exam_topics/lipids +145 -0
  297. data/lib/studium/exam_topics/macroeconomics +39 -0
  298. data/lib/studium/exam_topics/marketing +53 -0
  299. data/lib/studium/exam_topics/mathematics +311 -0
  300. data/lib/studium/exam_topics/medizin_und_biomedizinische_technik +254 -0
  301. data/lib/studium/exam_topics/medizinische_chemie_und_pharmazie +441 -0
  302. data/lib/studium/exam_topics/messtechnik_und_regeltechnik +104 -0
  303. data/lib/studium/exam_topics/metabolismus +482 -0
  304. data/lib/studium/exam_topics/meteorologie_und_atmosph/303/244re +120 -0
  305. data/lib/studium/exam_topics/microbial_ecology +37 -0
  306. data/lib/studium/exam_topics/microcontrollers +11 -0
  307. data/lib/studium/exam_topics/mikrobielle_lebensgemeinschaften +58 -0
  308. data/lib/studium/exam_topics/mikrobielle_physiologie +313 -0
  309. data/lib/studium/exam_topics/mitochondria +57 -0
  310. data/lib/studium/exam_topics/mixed +287 -0
  311. data/lib/studium/exam_topics/molecular_biology_of_plants +281 -0
  312. data/lib/studium/exam_topics/molekulare_medizin +133 -0
  313. data/lib/studium/exam_topics/nanotechnologie +456 -0
  314. data/lib/studium/exam_topics/nature_conservation_and_biodiversity +247 -0
  315. data/lib/studium/exam_topics/naturstoffe +9 -0
  316. data/lib/studium/exam_topics/netzwerke +63 -0
  317. data/lib/studium/exam_topics/neuroanatomie +25 -0
  318. data/lib/studium/exam_topics/neurobiology +356 -0
  319. data/lib/studium/exam_topics/nucleotide_sequencing +41 -0
  320. data/lib/studium/exam_topics/nutztierethologie +11 -0
  321. data/lib/studium/exam_topics/object_oriented_modeling +15 -0
  322. data/lib/studium/exam_topics/obstbau +249 -0
  323. data/lib/studium/exam_topics/organische_chemie +1007 -0
  324. data/lib/studium/exam_topics/organische_chemie_2 +137 -0
  325. data/lib/studium/exam_topics/paleobiology +39 -0
  326. data/lib/studium/exam_topics/parasitic_diseases_and_molecular_infection_biology +336 -0
  327. data/lib/studium/exam_topics/patent_law +55 -0
  328. data/lib/studium/exam_topics/pathologie +761 -0
  329. data/lib/studium/exam_topics/pcr +155 -0
  330. data/lib/studium/exam_topics/pentosephosphatweg +61 -0
  331. data/lib/studium/exam_topics/peroxisomes_glycosomes_and_lysosomes +66 -0
  332. data/lib/studium/exam_topics/pflanzenanatomie +262 -0
  333. data/lib/studium/exam_topics/pflanzenbau +24 -0
  334. data/lib/studium/exam_topics/pflanzenschutz +35 -0
  335. data/lib/studium/exam_topics/pflanzenwissenschaften +1009 -0
  336. data/lib/studium/exam_topics/pharmaceutical_biotechnology +252 -0
  337. data/lib/studium/exam_topics/physik +449 -1
  338. data/lib/studium/exam_topics/physikalische_chemie +79 -0
  339. data/lib/studium/exam_topics/physiology_and_histology +592 -0
  340. data/lib/studium/exam_topics/phytochemie +33 -0
  341. data/lib/studium/exam_topics/plant_biotechnology +132 -0
  342. data/lib/studium/exam_topics/plant_breeding +64 -0
  343. data/lib/studium/exam_topics/plant_development +50 -0
  344. data/lib/studium/exam_topics/populationsgenetik +143 -0
  345. data/lib/studium/exam_topics/posttranslationale_modifikation_von_proteinen +198 -0
  346. data/lib/studium/exam_topics/programming +41 -0
  347. data/lib/studium/exam_topics/projektmanagement +226 -0
  348. data/lib/studium/exam_topics/prokaryote_genetics +587 -0
  349. data/lib/studium/exam_topics/protein_engineering +35 -0
  350. data/lib/studium/exam_topics/proteolyse +39 -0
  351. data/lib/studium/exam_topics/proteomik +42 -0
  352. data/lib/studium/exam_topics/protozoans +24 -0
  353. data/lib/studium/exam_topics/prozesstechnik +95 -0
  354. data/lib/studium/exam_topics/psychologie +21 -0
  355. data/lib/studium/exam_topics/python +391 -0
  356. data/lib/studium/exam_topics/quality_management +266 -0
  357. data/lib/studium/exam_topics/rechtsgrundlagen +126 -0
  358. data/lib/studium/exam_topics/research_topics_in_immunobiology +42 -0
  359. data/lib/studium/exam_topics/rna_and_dna +535 -0
  360. data/lib/studium/exam_topics/rna_seq +13 -0
  361. data/lib/studium/exam_topics/robotics +12 -0
  362. data/lib/studium/exam_topics/ruby +240 -0
  363. data/lib/studium/exam_topics/ruby_on_rails +63 -0
  364. data/lib/studium/exam_topics/scientific_writing_and_publishing +38 -0
  365. data/lib/studium/exam_topics/semisynthese_von_proteinen_und_nukleotiden +120 -0
  366. data/lib/studium/exam_topics/sexualbiologie +327 -0
  367. data/lib/studium/exam_topics/signal_transduction_and_laser_systems +215 -0
  368. data/lib/studium/exam_topics/sozialbiologie +17 -0
  369. data/lib/studium/exam_topics/soziologie +5 -0
  370. data/lib/studium/exam_topics/splicing_exons_and_introns +67 -0
  371. data/lib/studium/exam_topics/sport_und_sportverletzungen +6 -0
  372. data/lib/studium/exam_topics/statistik +306 -0
  373. data/lib/studium/exam_topics/stemcells +182 -0
  374. data/lib/studium/exam_topics/stickstofffixierung +91 -0
  375. data/lib/studium/exam_topics/structural_bioinformatics +54 -0
  376. data/lib/studium/exam_topics/strukturbiologie +445 -0
  377. data/lib/studium/exam_topics/system_biology_and_synthetic_biology +108 -0
  378. data/lib/studium/exam_topics/systematische_zoologie +446 -0
  379. data/lib/studium/exam_topics/technical_ecology +144 -0
  380. data/lib/studium/exam_topics/technik +5 -0
  381. data/lib/studium/exam_topics/technische_chemie +208 -0
  382. data/lib/studium/exam_topics/technische_grundlagen_der_informatik +43 -0
  383. data/lib/studium/exam_topics/technische_mikrobiologie +393 -0
  384. data/lib/studium/exam_topics/technisches_zeichnen +5 -0
  385. data/lib/studium/exam_topics/the_bacterial_cell_wall +98 -0
  386. data/lib/studium/exam_topics/the_c_plus_plus_programming_language +531 -0
  387. data/lib/studium/exam_topics/the_c_programming_language +133 -0
  388. data/lib/studium/exam_topics/the_cellcycle +102 -0
  389. data/lib/studium/exam_topics/the_european_union +121 -0
  390. data/lib/studium/exam_topics/the_interferon_system +40 -0
  391. data/lib/studium/exam_topics/the_microbiome +164 -0
  392. data/lib/studium/exam_topics/the_universe +32 -0
  393. data/lib/studium/exam_topics/theoretische_chemie +5 -0
  394. data/lib/studium/exam_topics/theoretische_informatik +161 -0
  395. data/lib/studium/exam_topics/thermodynamics +21 -0
  396. data/lib/studium/exam_topics/tierzucht +139 -0
  397. data/lib/studium/exam_topics/toxikologie +508 -0
  398. data/lib/studium/exam_topics/transcription +188 -0
  399. data/lib/studium/exam_topics/translation_ribosomes_and_translational_control +155 -0
  400. data/lib/studium/exam_topics/umweltbiotechnologie +64 -0
  401. data/lib/studium/exam_topics/umweltchemie +233 -0
  402. data/lib/studium/exam_topics/urbanism_and_traffic +19 -0
  403. data/lib/studium/exam_topics/urea_cycle +56 -0
  404. data/lib/studium/exam_topics/vaccines_and_vaccination +253 -0
  405. data/lib/studium/exam_topics/vectors_and_gene_therapy +247 -0
  406. data/lib/studium/exam_topics/verfahrenstechnik +37 -0
  407. data/lib/studium/exam_topics/verhaltensbiologie +79 -0
  408. data/lib/studium/exam_topics/veterinary_medicine +10 -0
  409. data/lib/studium/exam_topics/vitamine +32 -0
  410. data/lib/studium/exam_topics/wasserkunde +144 -0
  411. data/lib/studium/exam_topics/weinbau +86 -0
  412. data/lib/studium/exam_topics/wissenschaft +20 -0
  413. data/lib/studium/exam_topics/yeast +104 -0
  414. data/lib/studium/exam_topics/zoologie +338 -0
  415. data/lib/studium/exams/afterburn/afterburn.rb +304 -0
  416. data/lib/studium/exams/ask_exam_from_the_upcoming_exams_pool.rb +150 -0
  417. data/lib/studium/exams/ask_exam_topic_question.rb +112 -0
  418. data/lib/studium/exams/ask_question_from_alias.rb +141 -0
  419. data/lib/studium/exams/ask_question_from_any_of_the_still_missing_lectures.rb +130 -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 +91 -0
  422. data/lib/studium/exams/ask_random_question.rb +195 -0
  423. data/lib/studium/exams/autoinclude.rb +7 -0
  424. data/lib/studium/exams/average_grade/average_grade.rb +404 -0
  425. data/lib/studium/exams/csv/create_csv_passed_exams_file.rb +217 -0
  426. data/lib/studium/exams/cycle.rb +291 -0
  427. data/lib/studium/exams/dataset/dataset.rb +126 -0
  428. data/lib/studium/exams/designate_ten_random_exam_topics/designate_ten_random_exam_topics.rb +88 -0
  429. data/lib/studium/exams/exam/exam.rb +130 -0
  430. data/lib/studium/exams/exam_bubble/exam_bubble.rb +444 -0
  431. data/lib/studium/exams/exam_bubble/menu_for_the_main_loop.rb +111 -0
  432. data/lib/studium/exams/exam_question/README.md +3 -0
  433. data/lib/studium/exams/exam_question/exam_question.rb +434 -0
  434. data/lib/studium/exams/exam_registration_at/constants.rb +49 -0
  435. data/lib/studium/exams/exam_registration_at/exam_registration_at.rb +242 -0
  436. data/lib/studium/exams/exam_registration_at/help.rb +46 -0
  437. data/lib/studium/exams/exam_registration_at/menu.rb +81 -0
  438. data/lib/studium/exams/exam_registration_at/report_and_show.rb +133 -0
  439. data/lib/studium/exams/exam_registration_at/reset.rb +54 -0
  440. data/lib/studium/exams/exam_statistics_from_this_file/exam_statistics_from_this_file.rb +119 -0
  441. data/lib/studium/exams/exam_topics.rb +194 -0
  442. data/lib/studium/exams/exams.rb +20 -0
  443. data/lib/studium/exams/exams_per_month/exams_per_month.rb +2442 -0
  444. data/lib/studium/exams/exams_this_week.rb +182 -0
  445. data/lib/studium/exams/fix_exam_dates.rb +121 -0
  446. data/lib/studium/exams/frozen.rb +36 -0
  447. data/lib/studium/exams/last_exams/last_exams.rb +479 -0
  448. data/lib/studium/exams/lectures_without_exam_entry.rb +137 -0
  449. data/lib/studium/exams/mandatory_continuous_assessment/mandatory_continuous_assessment.rb +1358 -0
  450. data/lib/studium/exams/move_all_unsolved_exam_questions_to_the_top_of_the_file.rb +173 -0
  451. data/lib/studium/exams/move_the_last_exam_question_to_the_top_of_the_file/move_the_last_exam_question_to_the_top_of_the_file.rb +111 -0
  452. data/lib/studium/exams/n_exams_in_these_topics.rb +477 -0
  453. data/lib/studium/exams/next_exam.rb +106 -0
  454. data/lib/studium/exams/next_exams.rb +378 -0
  455. data/lib/studium/exams/not_completed/README.md +5 -0
  456. data/lib/studium/exams/not_completed/not_completed.rb +143 -0
  457. data/lib/studium/exams/open_exam_associated_url/open_exam_associated_url.rb +154 -0
  458. data/lib/studium/exams/open_last_exam_question_asked_file/constants.rb +15 -0
  459. data/lib/studium/exams/open_last_exam_question_asked_file/initialize.rb +29 -0
  460. data/lib/studium/exams/open_last_exam_question_asked_file/open_last_exam_question_asked_file.rb +110 -0
  461. data/lib/studium/exams/push_solved_questions_on_top.rb +180 -0
  462. data/lib/studium/exams/question_answer/question_answer.rb +2936 -0
  463. data/lib/studium/exams/questions_solved_from_day_to_day/questions_solved_from_day_to_day.rb +379 -0
  464. data/lib/studium/exams/remote_ftp_url.rb +52 -0
  465. data/lib/studium/exams/repeat_last_question.rb +78 -0
  466. data/lib/studium/exams/report_total_amount_of_questions_and_answers_for.rb +116 -0
  467. data/lib/studium/exams/show_all_passed_exams_of_this_university.rb +252 -0
  468. data/lib/studium/exams/show_backlog_of_exams/show_backlog_of_exams.rb +114 -0
  469. data/lib/studium/exams/show_exams_for/show_exams_for.rb +172 -0
  470. data/lib/studium/exams/show_themes/constants.rb +28 -0
  471. data/lib/studium/exams/show_themes/menu.rb +61 -0
  472. data/lib/studium/exams/show_themes/misc.rb +538 -0
  473. data/lib/studium/exams/show_themes/reset.rb +62 -0
  474. data/lib/studium/exams/show_themes/show_themes.rb +27 -0
  475. data/lib/studium/exams/show_upcoming_exams/show_upcoming_exams.rb +1537 -0
  476. data/lib/studium/exams/solve_all_questions_from_this_topic.rb +114 -0
  477. data/lib/studium/exams/solved/solved.rb +434 -0
  478. data/lib/studium/exams/timetable/constants.rb +142 -0
  479. data/lib/studium/exams/timetable/timetable.rb +448 -0
  480. data/lib/studium/exams/unsolve_all_questions_from_this_topic.rb +163 -0
  481. data/lib/studium/exams/upcoming_exams/upcoming_exams.rb +555 -0
  482. data/lib/studium/exams/upcoming_exams_at_the_boku/constants.rb +23 -0
  483. data/lib/studium/exams/upcoming_exams_at_the_boku/html.rb +64 -0
  484. data/lib/studium/exams/upcoming_exams_at_the_boku/upcoming_exams_at_the_boku.rb +194 -0
  485. data/lib/studium/exams/upcoming_exams_dataset.rb +247 -0
  486. data/lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb +257 -0
  487. data/lib/studium/exams/upload_exam_topics.rb +360 -0
  488. data/lib/studium/graphviz/README.md +4 -0
  489. data/lib/studium/graphviz/bachelor_vector_based_strategies.dot +160 -0
  490. data/lib/studium/graphviz/master_vector_based_strategies.dot +46 -0
  491. data/lib/studium/gui/gtk3/control_panel/control_panel.rb +40 -0
  492. data/lib/studium/gui/gtk3/lecture_information/lecture_information.rb +191 -0
  493. data/lib/studium/gui/java/exam_question/ExamQuestion$1.class +0 -0
  494. data/lib/studium/gui/java/exam_question/ExamQuestion.class +0 -0
  495. data/lib/studium/gui/java/exam_question/ExamQuestion.java +215 -0
  496. data/lib/studium/gui/javafx/exam_question_widget/exam_question_widget.rb +58 -0
  497. data/lib/studium/gui/jruby/exam_trainer/exam_trainer.rb +637 -0
  498. data/lib/studium/gui/jruby/show_upcoming_exams/show_upcoming_exams.rb +85 -0
  499. data/lib/studium/gui/libui/ask_exam_question/ask_exam_question.rb +347 -0
  500. data/lib/studium/gui/shared_code/control_panel/control_panel_module.rb +305 -0
  501. data/lib/studium/gui/shared_code/exam_trainer/exam_trainer_widget_module.rb +0 -0
  502. data/lib/studium/gui/shared_code/information_about_a_lecture/information_about_a_lecture_module.rb +0 -0
  503. data/lib/studium/gui/shared_code/show_upcoming_exams/show_upcoming_exams_module.rb +129 -0
  504. data/lib/studium/gui/universal_widgets/curriculum_viewer/curriculum_viewer.rb +549 -0
  505. data/lib/studium/gui/universal_widgets/ects_per_university/ects_per_university.rb +302 -0
  506. data/lib/studium/gui/universal_widgets/exam_trainer/exam_trainer.config +6 -0
  507. data/lib/studium/gui/universal_widgets/exam_trainer/exam_trainer.rb +3266 -0
  508. data/lib/studium/gui/universal_widgets/exam_trainer/manifest.yml +12 -0
  509. data/lib/studium/gui/universal_widgets/expand_time_range/expand_time_range.rb +309 -0
  510. data/lib/studium/gui/universal_widgets/information_about_a_lecture/information_about_a_lecture.rb +242 -0
  511. data/lib/studium/gui/universal_widgets/show_upcoming_exams/show_upcoming_exams.rb +252 -0
  512. data/lib/studium/images/libui_ask_exam_question.png +0 -0
  513. data/lib/studium/images/outdated.png +0 -0
  514. data/lib/studium/images/small_logos/DNA.png +0 -0
  515. data/lib/studium/images/small_logos/README.md +2 -0
  516. data/lib/studium/images/small_logos/solved.png +0 -0
  517. data/lib/studium/images/studies_favicon.png +0 -0
  518. data/lib/studium/java/README.md +5 -0
  519. data/lib/studium/java/studium/AskExamQuestion.java +461 -0
  520. data/lib/studium/java/studium/Base.java +123 -0
  521. data/lib/studium/java/studium/Constants.java +122 -0
  522. data/lib/studium/java/studium/EnsureThatTheLogDirectoryExists.java +57 -0
  523. data/lib/studium/java/studium/Mkdir.java +13 -0
  524. data/lib/studium/java/studium/OpenLastExamQuestionurlLinkViaTheBrowser.java +90 -0
  525. data/lib/studium/java/studium/ReturnNQuestionsSolvedInTotal.java +69 -0
  526. data/lib/studium/java/studium/Solved.java +112 -0
  527. data/lib/studium/java/studium/Test.java +60 -0
  528. data/lib/studium/java/studium/studium/AskExamQuestion.class +0 -0
  529. data/lib/studium/java/studium/studium/Base.class +0 -0
  530. data/lib/studium/java/studium/studium/Constants.class +0 -0
  531. data/lib/studium/java/studium/studium/EnsureThatTheLogDirectoryExists.class +0 -0
  532. data/lib/studium/java/studium/studium/Mkdir.class +0 -0
  533. data/lib/studium/java/studium/studium/OpenLastExamQuestionurlLinkViaTheBrowser.class +0 -0
  534. data/lib/studium/java/studium/studium/ReturnNQuestionsSolvedInTotal.class +0 -0
  535. data/lib/studium/java/studium/studium/Solved.class +0 -0
  536. data/lib/studium/java/studium/studium/Test.class +0 -0
  537. data/lib/studium/jobs/jobs.rb +80 -0
  538. data/lib/studium/logging/README.md +2 -0
  539. data/lib/studium/logging/ensure_that_the_log_directory_exists.rb +58 -0
  540. data/lib/studium/logging/html_log_directory.rb +42 -0
  541. data/lib/studium/logging/log_directory.rb +112 -0
  542. data/lib/studium/logging/store_last_question_asked_into_file.rb +138 -0
  543. data/lib/studium/parsers/README.md +2 -0
  544. data/lib/studium/parsers/custom_exam_results_parser.rb +209 -0
  545. data/lib/studium/parsers/parse_remote_lecture.rb +331 -0
  546. data/lib/studium/project/project.rb +88 -0
  547. data/lib/studium/requires/common_popular_requires.rb +37 -0
  548. data/lib/studium/requires/commonly_used_requires.rb +14 -0
  549. data/lib/studium/requires/require_class_exams_solved.rb +7 -0
  550. data/lib/studium/requires/require_ects_scripts.rb +27 -0
  551. data/lib/studium/requires/require_encoding.rb +7 -0
  552. data/lib/studium/requires/require_the_check_and_sanitize_files.rb +31 -0
  553. data/lib/studium/requires/require_the_curricula_files.rb +28 -0
  554. data/lib/studium/requires/require_the_exam_question_class.rb +7 -0
  555. data/lib/studium/requires/require_the_exams_files.rb +46 -0
  556. data/lib/studium/requires/require_the_logging_files.rb +23 -0
  557. data/lib/studium/requires/require_the_parsers.rb +28 -0
  558. data/lib/studium/requires/require_the_studium_constants.rb +7 -0
  559. data/lib/studium/requires/require_the_studium_project.rb +72 -0
  560. data/lib/studium/requires/require_the_toplevel_methods.rb +27 -0
  561. data/lib/studium/requires/require_the_utility_scripts.rb +34 -0
  562. data/lib/studium/requires/require_upcoming_exams.rb +7 -0
  563. data/lib/studium/requires/require_yaml.rb +7 -0
  564. data/lib/studium/requires/return_remote_homepage_of_this_lecture.rb +7 -0
  565. data/lib/studium/requires/with_GUI.rb +13 -0
  566. data/lib/studium/requires/www_mode.rb +17 -0
  567. data/lib/studium/statistics/README.md +4 -0
  568. data/lib/studium/statistics/best_exam_months.rb +92 -0
  569. data/lib/studium/statistics/curriculum_comparer/curriculum_comparer.rb +423 -0
  570. data/lib/studium/statistics/determine_exam_statistics_from_this_file.rb +142 -0
  571. data/lib/studium/statistics/exam_topics_that_are_about_to_be_completed.rb +117 -0
  572. data/lib/studium/statistics/max_stats.rb +169 -0
  573. data/lib/studium/statistics/new_questions_per_year.rb +147 -0
  574. data/lib/studium/statistics/report_how_many_ects_points_per_curriculum_were_completed.rb +167 -0
  575. data/lib/studium/statistics/report_how_many_exam_questions_were_answered.rb +473 -0
  576. data/lib/studium/statistics/show_exam_statistics.rb +75 -0
  577. data/lib/studium/statistics/show_which_courses_are_in_a_bachelor_or_master_curriculum_respectively.rb +104 -0
  578. data/lib/studium/statistics/top_stats.rb +126 -0
  579. data/lib/studium/toplevel_methods/e_and_esystem.rb +34 -0
  580. data/lib/studium/toplevel_methods/find_exam_topic_and_exam_title.rb +3986 -0
  581. data/lib/studium/toplevel_methods/install_the_project_on_the_given_hostsystem.rb +31 -0
  582. data/lib/studium/toplevel_methods/return_remote_homepage_of_this_lecture.rb +11611 -0
  583. data/lib/studium/toplevel_methods/return_remote_moodle_link_of_this_lecture.rb +2405 -0
  584. data/lib/studium/toplevel_methods/roebe.rb +16 -0
  585. data/lib/studium/toplevel_methods/runmode.rb +45 -0
  586. data/lib/studium/toplevel_methods/toplevel_methods.rb +7295 -0
  587. data/lib/studium/universities_in_austria/README.md +2 -0
  588. data/lib/studium/universities_in_austria/boku/README.md +4 -0
  589. data/lib/studium/universities_in_austria/boku/boku_/303/266ffnungszeiten.rb +28 -0
  590. data/lib/studium/universities_in_austria/boku/show_three_pillars_of_these_lectures.rb +110 -0
  591. data/lib/studium/universities_in_austria/boku/three_pillars.rb +237 -0
  592. data/lib/studium/universities_in_austria/tu_vienna/README.md +6 -0
  593. data/lib/studium/universities_in_austria/tu_vienna/tu_ferien.rb +42 -0
  594. data/lib/studium/universities_in_austria/tu_vienna/tu_/303/266ffnungszeiten.rb +34 -0
  595. data/lib/studium/university_course/university_course.rb +409 -0
  596. data/lib/studium/utility_scripts/attribute_lectures_to_university/attribute_lectures_to_university.rb +375 -0
  597. data/lib/studium/utility_scripts/audio_stats.rb +171 -0
  598. data/lib/studium/utility_scripts/auto_stud/auto_stud.rb +252 -0
  599. data/lib/studium/utility_scripts/auto_stud/constants.rb +18 -0
  600. data/lib/studium/utility_scripts/auto_stud/initialize.rb +23 -0
  601. data/lib/studium/utility_scripts/auto_stud/misc.rb +18 -0
  602. data/lib/studium/utility_scripts/autogeneration/autogeneration.rb +158 -0
  603. data/lib/studium/utility_scripts/autopurge_this_lecture_date.rb +100 -0
  604. data/lib/studium/utility_scripts/average_grade_of_this_curriculum.rb +153 -0
  605. data/lib/studium/utility_scripts/blocked_courses.rb +146 -0
  606. data/lib/studium/utility_scripts/calendar/README.md +2 -0
  607. data/lib/studium/utility_scripts/calendar/calendar.rb +251 -0
  608. data/lib/studium/utility_scripts/calendar/misc.rb +35 -0
  609. data/lib/studium/utility_scripts/check_description_of_these_lectures.rb +221 -0
  610. data/lib/studium/utility_scripts/course_registrations/course_registrations.rb +98 -0
  611. data/lib/studium/utility_scripts/courses/courses.rb +177 -0
  612. data/lib/studium/utility_scripts/create/README.md +2 -0
  613. data/lib/studium/utility_scripts/create/webpage_of_university.rb +129 -0
  614. data/lib/studium/utility_scripts/create/webpage_of_university_BOKU.rb +61 -0
  615. data/lib/studium/utility_scripts/create/webpage_of_university_TU.rb +60 -0
  616. data/lib/studium/utility_scripts/create/webpage_of_university_UniWien.rb +60 -0
  617. data/lib/studium/utility_scripts/create_database/create_database.rb +126 -0
  618. data/lib/studium/utility_scripts/current_lectures_belonging_to_both_bachelor_and_master_curriculum.rb +113 -0
  619. data/lib/studium/utility_scripts/currently_participating_in_these_lectures/currently_participating_in_these_lectures.rb +104 -0
  620. data/lib/studium/utility_scripts/display_lecture_url/display_lecture_url.rb +176 -0
  621. data/lib/studium/utility_scripts/expand_time_range/expand_time_range.rb +521 -0
  622. data/lib/studium/utility_scripts/finished_exams_at_this_university/finished_exams_at_this_university.rb +171 -0
  623. data/lib/studium/utility_scripts/foreign_language_percentage/constants.rb +23 -0
  624. data/lib/studium/utility_scripts/foreign_language_percentage/foreign_language_percentage.rb +149 -0
  625. data/lib/studium/utility_scripts/foreign_language_percentage/help.rb +31 -0
  626. data/lib/studium/utility_scripts/foreign_language_percentage/initialize.rb +25 -0
  627. data/lib/studium/utility_scripts/foreign_language_percentage/menu.rb +158 -0
  628. data/lib/studium/utility_scripts/foreign_language_percentage/report.rb +62 -0
  629. data/lib/studium/utility_scripts/foreign_language_percentage/reset.rb +50 -0
  630. data/lib/studium/utility_scripts/foreign_language_percentage/run.rb +19 -0
  631. data/lib/studium/utility_scripts/generate_spreadsheet/generate_spreadsheet.rb +353 -0
  632. data/lib/studium/utility_scripts/generate_spreadsheet/misc.rb +144 -0
  633. data/lib/studium/utility_scripts/holidays/holidays.rb +154 -0
  634. data/lib/studium/utility_scripts/homepage_of_these_courses/homepage_of_these_courses.rb +125 -0
  635. data/lib/studium/utility_scripts/lectures_attributed_to_universities/lectures_attributed_to_universities.rb +336 -0
  636. data/lib/studium/utility_scripts/lva_dates_of_the_important_courses.rb +111 -0
  637. data/lib/studium/utility_scripts/lva_nummer/lva_nummer.rb +427 -0
  638. data/lib/studium/utility_scripts/mandatory_lectures_in_this_month/mandatory_lectures_in_this_month.rb +316 -0
  639. data/lib/studium/utility_scripts/moodle/moodle.rb +214 -0
  640. data/lib/studium/utility_scripts/name_of_this_lva_id/name_of_this_lva_id.rb +110 -0
  641. data/lib/studium/utility_scripts/new_stud.rb +324 -0
  642. data/lib/studium/utility_scripts/next_week/next_week.rb +103 -0
  643. data/lib/studium/utility_scripts/not_yet_registered/not_yet_registered.rb +120 -0
  644. data/lib/studium/utility_scripts/open_last_exam_question_url_link_via_the_browser.rb +76 -0
  645. data/lib/studium/utility_scripts/passed_ects_per_year/passed_ects_per_year.rb +313 -0
  646. data/lib/studium/utility_scripts/passed_pr/303/274fungsimmanente_courses/passed_pr/303/274fungsimmanente_courses.rb +181 -0
  647. data/lib/studium/utility_scripts/pdf/README.md +2 -0
  648. data/lib/studium/utility_scripts/pdf/create_pdf_file_for_this_exam_topic.rb +352 -0
  649. data/lib/studium/utility_scripts/pdf/hexapdf_support.rb +50 -0
  650. data/lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb +317 -0
  651. data/lib/studium/utility_scripts/priority/priority.rb +164 -0
  652. data/lib/studium/utility_scripts/priority_points/priority_points.rb +261 -0
  653. data/lib/studium/utility_scripts/publish_my_exams/publish_my_exams.rb +174 -0
  654. data/lib/studium/utility_scripts/regexes/README.md +1 -0
  655. data/lib/studium/utility_scripts/regexes/generate_regex.rb +314 -0
  656. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_available_moodle_links.rb +55 -0
  657. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_registered_lectures.rb +48 -0
  658. data/lib/studium/utility_scripts/report_outdated_timetable_entries/report_outdated_timetable_entries.rb +142 -0
  659. data/lib/studium/utility_scripts/report_whether_this_lecture_is_registered_in_the_file_lecture_information/report_whether_this_lecture_is_registered_in_the_file_lecture_information.rb +129 -0
  660. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/individual_resolve_practical_courses_date_conflicts.rb +254 -0
  661. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/resolve_practical_courses_date_conflicts.rb +265 -0
  662. data/lib/studium/utility_scripts/scrape_remote_university_url.rb +138 -0
  663. data/lib/studium/utility_scripts/semester_schedule_creator/semester_container.rb +144 -0
  664. data/lib/studium/utility_scripts/semester_schedule_creator/semester_schedule_creator.rb +373 -0
  665. data/lib/studium/utility_scripts/semesterplaner/semesterplaner.rb +311 -0
  666. data/lib/studium/utility_scripts/set_aliases_based_on_this_file.rb +96 -0
  667. data/lib/studium/utility_scripts/show_all_passed_master_lectures/show_all_passed_master_lectures.rb +126 -0
  668. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/show_conflicting_lva_lectures.rb +1385 -0
  669. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/constants.rb +23 -0
  670. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/menu.rb +63 -0
  671. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/reset.rb +33 -0
  672. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/run.rb +50 -0
  673. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/show_descriptions_of_lectures_belonging_to_this_module.rb +145 -0
  674. data/lib/studium/utility_scripts/show_lecturers/show_lecturers.rb +147 -0
  675. data/lib/studium/utility_scripts/show_lectures/show_lectures.rb +906 -0
  676. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_language/show_lectures_fitting_to_this_language.rb +121 -0
  677. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_theme/show_lectures_fitting_to_this_theme.rb +105 -0
  678. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb +3160 -0
  679. data/lib/studium/utility_scripts/show_lectures_on_this_day/show_lectures_on_this_day.rb +150 -0
  680. data/lib/studium/utility_scripts/show_lva_dates_of_this_lecture/show_lva_dates_of_this_lecture.rb +182 -0
  681. data/lib/studium/utility_scripts/show_mixed_bachelor_master_courses/show_mixed_bachelor_master_courses.rb +92 -0
  682. data/lib/studium/utility_scripts/show_outdated_lva_dates/show_outdated_lva_dates.rb +214 -0
  683. data/lib/studium/utility_scripts/show_passed_exams_having_this_grade/show_passed_exams_having_this_grade.rb +91 -0
  684. data/lib/studium/utility_scripts/show_solved_english_lectures/show_solved_english_lectures.rb +139 -0
  685. data/lib/studium/utility_scripts/steop/README.md +4 -0
  686. data/lib/studium/utility_scripts/steop/show_all_steop_lectures.rb +93 -0
  687. data/lib/studium/utility_scripts/steop/steop_lectures_in_this_curriculum.rb +284 -0
  688. data/lib/studium/utility_scripts/steop/steop_lva_dates.rb +119 -0
  689. data/lib/studium/utility_scripts/studienkennzahl/studienkennzahl.rb +116 -0
  690. data/lib/studium/utility_scripts/studium_skeleton/studium_skeleton.rb +241 -0
  691. data/lib/studium/utility_scripts/stundenplan.rb +600 -0
  692. data/lib/studium/utility_scripts/sync_studium_relevant_entries_one_level_downwards.rb +217 -0
  693. data/lib/studium/utility_scripts/ufind/ufind.rb +106 -0
  694. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/constants.rb +26 -0
  695. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/run.rb +20 -0
  696. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/upcoming_mandatory_presence_courses.rb +187 -0
  697. data/lib/studium/utility_scripts/video_lecture_downloader/video_lecture_downloader.rb +107 -0
  698. data/lib/studium/utility_scripts/week_parser/constants.rb +23 -0
  699. data/lib/studium/utility_scripts/week_parser/help.rb +32 -0
  700. data/lib/studium/utility_scripts/week_parser/menu.rb +59 -0
  701. data/lib/studium/utility_scripts/week_parser/misc.rb +373 -0
  702. data/lib/studium/utility_scripts/week_parser/reset.rb +65 -0
  703. data/lib/studium/utility_scripts/week_parser/run.rb +18 -0
  704. data/lib/studium/utility_scripts/week_parser/show.rb +236 -0
  705. data/lib/studium/utility_scripts/week_parser/week_parser.rb +49 -0
  706. data/lib/studium/utility_scripts/weekday_parser.rb +155 -0
  707. data/lib/studium/utility_scripts/weekly_schedule.rb +198 -0
  708. data/lib/studium/utility_scripts/wochenplanung/wochenplanung.rb +267 -0
  709. data/lib/studium/version/version.rb +46 -0
  710. data/lib/studium/www/exams/exams.cgi +54 -0
  711. data/lib/studium/www/fast_ask_exam_question/fast_ask_exam_question.cgi +156 -0
  712. data/lib/studium/www/handle_curricula/handle_curricula.cgi +154 -0
  713. data/lib/studium/www/next_generation_exam_question_trainer/next_generation_exam_question_trainer.cgi +112 -0
  714. data/lib/studium/www/next_generation_exam_question_trainer/solved.cgi +26 -0
  715. data/lib/studium/www/sinatra/app.rb +231 -0
  716. data/lib/studium/www/sinatra/curriculum_displayer/curriculum_displayer.rb +162 -0
  717. data/lib/studium/www/sinatra/misc.rb +115 -0
  718. data/lib/studium/www/statistics/statistics.cgi +82 -0
  719. data/lib/studium/www/upcoming_exams/upcoming_exams.cgi +36 -0
  720. data/lib/studium/yaml/ad_hoc_trainer/README.md +2 -0
  721. data/lib/studium/yaml/ad_hoc_trainer/exam_topics.md +22 -0
  722. data/lib/studium/yaml/allowed_themes_for_courses/allowed_themes_for_courses.yml +348 -0
  723. data/lib/studium/yaml/array_allowed_entries_for_the_file_lecture_information/array_allowed_entries_for_the_file_lecture_information.yml +71 -0
  724. data/lib/studium/yaml/available_exam_topics/available_exam_topics.yml +234 -0
  725. data/lib/studium/yaml/backlog_of_exams.yml +37 -0
  726. data/lib/studium/yaml/colours/custom_colours.yml +50 -0
  727. data/lib/studium/yaml/colours/use_colours.yml +1 -0
  728. data/lib/studium/yaml/current_exams.yml +30 -0
  729. data/lib/studium/yaml/curricula/README.md +39 -0
  730. data/lib/studium/yaml/curricula/bachelor/bachelor_agrarwissenschaften_033255.yml +147 -0
  731. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_basisblock_033630.yml +71 -0
  732. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_botanik_033630.yml +100 -0
  733. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_ecology_033630.yml +74 -0
  734. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_mikrobiologie_und_genetik_033630.yml +122 -0
  735. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_molekulare_biologie_033630.yml +106 -0
  736. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_zoologie_033630.yml +87 -0
  737. data/lib/studium/yaml/curricula/bachelor/bachelor_chemie_033662.yml +165 -0
  738. data/lib/studium/yaml/curricula/bachelor/bachelor_dummy_curriculum.yml +182 -0
  739. data/lib/studium/yaml/curricula/bachelor/bachelor_elektrotechnik_und_informationstechnik_033235.yml +13 -0
  740. data/lib/studium/yaml/curricula/bachelor/bachelor_forstwirtschaft_033225.yml +115 -0
  741. data/lib/studium/yaml/curricula/bachelor/bachelor_informatik_033521.yml +134 -0
  742. data/lib/studium/yaml/curricula/bachelor/bachelor_ktww_033231.yml +84 -0
  743. data/lib/studium/yaml/curricula/bachelor/bachelor_lmbt_033217.yml +121 -0
  744. data/lib/studium/yaml/curricula/bachelor/bachelor_medizinische_informatik_033533.yml +283 -0
  745. data/lib/studium/yaml/curricula/bachelor/bachelor_molekularbiologie_033665.yml +95 -0
  746. data/lib/studium/yaml/curricula/bachelor/bachelor_nutrition_science_033638.yml +119 -0
  747. data/lib/studium/yaml/curricula/bachelor/bachelor_pharmazie_033305.yml +170 -0
  748. data/lib/studium/yaml/curricula/bachelor/bachelor_technische_chemie_033290.yml +131 -0
  749. data/lib/studium/yaml/curricula/bachelor/bachelor_technische_informatik_033535.yml +23 -0
  750. data/lib/studium/yaml/curricula/bachelor/bachelor_ubrm_033227.yml +142 -0
  751. data/lib/studium/yaml/curricula/bachelor/bachelor_verfahrenstechnik_033273.yml +167 -0
  752. data/lib/studium/yaml/curricula/bachelor/bachelor_wirtschaftsinformatik_033526.yml +29 -0
  753. data/lib/studium/yaml/curricula/experimental/bachelor_informatik_in_den_lebenswissenschaften.yml +137 -0
  754. data/lib/studium/yaml/curricula/individual/bachelor_formale_logik.yml +88 -0
  755. data/lib/studium/yaml/curricula/individual/bachelor_informatik_und_molekulare_biologie.yml +1161 -0
  756. data/lib/studium/yaml/curricula/individual/bachelor_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +1157 -0
  757. data/lib/studium/yaml/curricula/individual/master_bioinformatics_and_nanobiotechnology_in_molecular_medicine.yml +306 -0
  758. data/lib/studium/yaml/curricula/individual/master_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +741 -0
  759. data/lib/studium/yaml/curricula/master/master_bioinformatik_066875.yml +75 -0
  760. data/lib/studium/yaml/curricula/master/master_biologie_molekulare_mikrobiologie_mikrobielle_oekologie_und_immunbiologie_066830.yml +78 -0
  761. data/lib/studium/yaml/curricula/master/master_biologische_chemie_066863.yml +66 -0
  762. data/lib/studium/yaml/curricula/master/master_dummy_curriculum.yml +197 -0
  763. data/lib/studium/yaml/curricula/master/master_genetik_und_entwicklungsbiologie_066877.yml +89 -0
  764. data/lib/studium/yaml/curricula/master/master_lmbt_066418.yml +112 -0
  765. data/lib/studium/yaml/curricula/master/master_molecular_biology_066865.yml +72 -0
  766. data/lib/studium/yaml/curricula/master/master_molekulare_biologie_066834.yml +151 -0
  767. data/lib/studium/yaml/curricula/master/master_pharmazie_066605.yml +176 -0
  768. data/lib/studium/yaml/curricula/master/master_technische_chemie_066490.yml +123 -0
  769. data/lib/studium/yaml/curricula/outdated/master_bioinformatics_and_molecular_biotechnology_including_aspects_from_molecular_medicine.yml +438 -0
  770. data/lib/studium/yaml/curricula/outdated/master_food_science_and_plant_biotechnology.yml +31 -0
  771. data/lib/studium/yaml/curricula.yml +562 -0
  772. data/lib/studium/yaml/daily_questions_solved/daily_questions_solved.yml +2019 -0
  773. data/lib/studium/yaml/daily_questions_solved/daily_questions_solved.yml~ +1983 -0
  774. data/lib/studium/yaml/default_delay.yml +4 -0
  775. data/lib/studium/yaml/default_encoding.yml +1 -0
  776. data/lib/studium/yaml/directory_to_the_exam_topics.yml +0 -0
  777. data/lib/studium/yaml/editor.yml +1 -0
  778. data/lib/studium/yaml/exams/next_exams_to_do.md +9 -0
  779. data/lib/studium/yaml/file_for_exam_questions.yml +1 -0
  780. data/lib/studium/yaml/german/README.md +2 -0
  781. data/lib/studium/yaml/german/german_to_english_month_names.yml +16 -0
  782. data/lib/studium/yaml/grouped_themes/grouped_themes.yml +264 -0
  783. data/lib/studium/yaml/holidays/holidays.yml +201 -0
  784. data/lib/studium/yaml/important_exams.yml +286 -0
  785. data/lib/studium/yaml/inscription_dates_of_universities.yml +60 -0
  786. data/lib/studium/yaml/lecture_aliases.yml +138 -0
  787. data/lib/studium/yaml/lecture_information/lecture_information.yml +66145 -0
  788. data/lib/studium/yaml/log_dir.yml +1 -0
  789. data/lib/studium/yaml/main_topic/main_topic.yml +11 -0
  790. data/lib/studium/yaml/max_stats/max_stats.yml +262 -0
  791. data/lib/studium/yaml/max_stats.yml +263 -0
  792. data/lib/studium/yaml/meta_themes +1 -0
  793. data/lib/studium/yaml/mitbelegung/README.md +4 -0
  794. data/lib/studium/yaml/mitbelegung/mitbelegung.yml +21 -0
  795. data/lib/studium/yaml/mitteilungsbl/303/244tter/mitteilungsbl/303/244tter.yml +363 -0
  796. data/lib/studium/yaml/n_total_questions.yml +1 -0
  797. data/lib/studium/yaml/rename_konsole_tab.yml +1 -0
  798. data/lib/studium/yaml/roebe/ad_hoc_exam_topics.md +19 -0
  799. data/lib/studium/yaml/roebe/sommersemester_2024_opportunities.md +441 -0
  800. data/lib/studium/yaml/semester_planner/README.md +4 -0
  801. data/lib/studium/yaml/semester_planner/semester_planner.yml +189 -0
  802. data/lib/studium/yaml/show_topic.yml +1 -0
  803. data/lib/studium/yaml/statistics/lecture_information.yml +1 -0
  804. data/lib/studium/yaml/statistics/max_stats.yml +239 -0
  805. data/lib/studium/yaml/statistics/statistics.yml +77 -0
  806. data/lib/studium/yaml/week/01_monday.yml +25 -0
  807. data/lib/studium/yaml/week/02_tuesday.yml +68 -0
  808. data/lib/studium/yaml/week/03_wednesday.yml +63 -0
  809. data/lib/studium/yaml/week/04_thursday.yml +20 -0
  810. data/lib/studium/yaml/week/05_friday.yml +31 -0
  811. data/lib/studium/yaml/week/06_saturday.yml +16 -0
  812. data/lib/studium/yaml/week/07_sunday.yml +0 -0
  813. data/lib/studium/yaml/week/README.md +10 -0
  814. data/lib/studium.rb +5 -0
  815. data/studium.gemspec +82 -0
  816. data/test/testing_colourized_question_and_answer.rb +18 -0
  817. data/test/testing_studium.rb +244 -0
  818. data/test/testing_studium_base_class.rb +31 -0
  819. data/test/testing_the_file_lecture_information.rb +18 -0
  820. data/test/testing_time_component.rb +29 -0
  821. metadata +1042 -0
@@ -0,0 +1,2063 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/constants/constants.rb'
6
+ # =========================================================================== #
7
+ module Studium
8
+
9
+ require 'studium/project/project.rb'
10
+ require 'studium/toplevel_methods/roebe.rb'
11
+
12
+ # ========================================================================= #
13
+ # Pull in the encoding-related constants next:
14
+ # ========================================================================= #
15
+ require 'studium/requires/require_encoding.rb'
16
+ require 'studium/requires/require_yaml.rb'
17
+ require 'studium/logging/log_directory.rb'
18
+
19
+ # ========================================================================= #
20
+ # === @file_lecture_information
21
+ # ========================================================================= #
22
+ @file_lecture_information = nil
23
+
24
+ # ========================================================================= #
25
+ # === Studium::DAY_NAMES
26
+ # ========================================================================= #
27
+ DAY_NAMES = %w(
28
+ Sun Mon Tue Wed Thu Fri Sat
29
+ )
30
+
31
+ # ========================================================================= #
32
+ # === FILE_CUSTOM_COLOURS
33
+ # ========================================================================= #
34
+ FILE_CUSTOM_COLOURS =
35
+ "#{yaml_directory?}colours/custom_colours.yml"
36
+
37
+ # ========================================================================= #
38
+ # === USERS_X
39
+ #
40
+ # Must be defined before RUBY_SRC_DIR and other constants.
41
+ # ========================================================================= #
42
+ USERS_X = '/home/x/'
43
+
44
+ # ========================================================================= #
45
+ # === RUBY_SRC_DIR
46
+ #
47
+ # Hardcoded path - but only relevant for my home system.
48
+ # ========================================================================= #
49
+ RUBY_SRC_DIR = "#{USERS_X}programming/ruby/src/"
50
+
51
+ # ========================================================================= #
52
+ # === NAMESPACE
53
+ # ========================================================================= #
54
+ NAMESPACE = inspect
55
+
56
+ # ========================================================================= #
57
+ # === N
58
+ # ========================================================================= #
59
+ N = "\n" # Define the newline for easier changes.
60
+
61
+ # ========================================================================= #
62
+ # === T
63
+ # ========================================================================= #
64
+ T = "\t"
65
+
66
+ # ========================================================================= #
67
+ # === RUBY_HEADER
68
+ # ========================================================================= #
69
+ RUBY_HEADER = "#!/usr/bin/ruby -w
70
+ # Encoding: UTF-8
71
+ # frozen_string_literal: true
72
+ # =========================================================================== #\n"
73
+
74
+ # ========================================================================= #
75
+ # === THRESHOLD_VALUE_N_EXAMS_AT_MAXIMUM
76
+ #
77
+ # The following constant will only be honoured if the above-defined constant
78
+ # WARN_THE_USER_IF_THERE_ARE_TOO_MANY_QUESTIONS_REGISTERED_IN_AN_EXAM_TOPIC
79
+ # has been set to true.
80
+ #
81
+ # The current threshold is set to 1000, meaning that if an exam-topic
82
+ # has more than 1000 registered questions/answers, the user will be
83
+ # notified of this, if the above constant was set to true.
84
+ # ========================================================================= #
85
+ THRESHOLD_VALUE_N_EXAMS_AT_MAXIMUM = 1000
86
+
87
+ # ========================================================================= #
88
+ # === CHECK_FOR_INCORRECT_ENTRIES_IN_THE_QUESTION_ANSWER_FILE_THAT_SHOULD_BE_COMMENTS
89
+ #
90
+ # If the following constant is set to true, then a certain method will
91
+ # check whether lines start with e. g. "t#" rather than "#". This is
92
+ # an indication that some typo is in that exam-questions file, which
93
+ # we then can auto-correct.
94
+ # ========================================================================= #
95
+ CHECK_FOR_INCORRECT_ENTRIES_IN_THE_QUESTION_ANSWER_FILE_THAT_SHOULD_BE_COMMENTS =
96
+ true
97
+
98
+ # ========================================================================= #
99
+ # === DEFAULT_TOPIC
100
+ #
101
+ # What is our default topic? We define it here. This may be used in
102
+ # the file dataset.rb
103
+ # ========================================================================= #
104
+ DEFAULT_TOPIC = 'rand'
105
+
106
+ # ========================================================================= #
107
+ # === WARN_THE_USER_IF_THERE_ARE_TOO_MANY_QUESTIONS_REGISTERED_IN_AN_EXAM_TOPIC
108
+ # ========================================================================= #
109
+ WARN_THE_USER_IF_THERE_ARE_TOO_MANY_QUESTIONS_REGISTERED_IN_AN_EXAM_TOPIC = true
110
+
111
+ # ========================================================================= #
112
+ # === CHEERING_PERSON
113
+ #
114
+ # This ASCII "symbol" is repeated in many classes of the Studium namespace,
115
+ # indicating a success (via a cheering person who throws up the arms).
116
+ # ========================================================================= #
117
+ CHEERING_PERSON = '\\o/'
118
+
119
+ # ========================================================================= #
120
+ # === RIGHT_ARROW
121
+ # ========================================================================= #
122
+ RIGHT_ARROW = '→'
123
+ UNICODE_RIGHT_ARROW = RIGHT_ARROW # === UNICODE_RIGHT_ARROW
124
+
125
+ # ========================================================================= #
126
+ # === UNICODE_CHECKMARK
127
+ # ========================================================================= #
128
+ UNICODE_CHECKMARK = '✓'
129
+
130
+ # ========================================================================= #
131
+ # === ONE_WEEK
132
+ # ========================================================================= #
133
+ ONE_WEEK = 7
134
+
135
+ # ========================================================================= #
136
+ # === APPEND_THIS
137
+ # ========================================================================= #
138
+ APPEND_THIS = '[]'
139
+
140
+ # ========================================================================= #
141
+ # === DEFAULT_DELAY
142
+ # ========================================================================= #
143
+ DEFAULT_DELAY = 3.0
144
+
145
+ # ========================================================================= #
146
+ # === Studium::ONE_MINUTE
147
+ # ========================================================================= #
148
+ ONE_MINUTE = 60 # 60 seconds.
149
+
150
+ # ========================================================================= #
151
+ # === Studium::ONE_HOUR
152
+ # ========================================================================= #
153
+ ONE_HOUR = ONE_MINUTE * 60
154
+
155
+ # ========================================================================= #
156
+ # === Studium::ONE_DAY
157
+ # ========================================================================= #
158
+ ONE_DAY = ONE_HOUR * 24
159
+
160
+ # ========================================================================= #
161
+ # === Studium::TWO_DAYS
162
+ # ========================================================================= #
163
+ TWO_DAYS = ONE_DAY * 2
164
+
165
+ # ========================================================================= #
166
+ # === Studium::THREE_DAYS
167
+ # ========================================================================= #
168
+ THREE_DAYS = ONE_DAY * 3
169
+
170
+ # ========================================================================= #
171
+ # === Studium::FOUR_DAYS
172
+ # ========================================================================= #
173
+ FOUR_DAYS = ONE_DAY * 4
174
+
175
+ # ========================================================================= #
176
+ # === Studium::FIVE_DAYS
177
+ # ========================================================================= #
178
+ FIVE_DAYS = ONE_DAY * 5
179
+
180
+ # ========================================================================= #
181
+ # === Studium::SIX_DAYS
182
+ # ========================================================================= #
183
+ SIX_DAYS = ONE_DAY * 6
184
+
185
+ # ========================================================================= #
186
+ # === FILE_EXAM_TOPICS_ARCHIVE
187
+ # ========================================================================= #
188
+ FILE_EXAM_TOPICS_ARCHIVE = 'exam_topics.tar.xz'
189
+
190
+ # ========================================================================= #
191
+ # === Studium::ARRAY_LECTURE_TYPES_THAT_ARE_MANDATORY_CONTINUOUS_ASSESSMENT
192
+ #
193
+ # Alle prüfungsimmanenten Lehrveranstaltungen (courses with "mandatory
194
+ # presence") werden im folgenden Array gesammelt.
195
+ #
196
+ # PS stands for "Projektarbeit", aka "Bachelorarbeiten" usually.
197
+ #
198
+ # "SK" stands for seminar+praktikum, aka seminar-presentation and
199
+ # practical course work.
200
+ #
201
+ # Please use a new line for every individual entry in the following
202
+ # constant.
203
+ # ========================================================================= #
204
+ ARRAY_LECTURE_TYPES_THAT_ARE_MANDATORY_CONTINUOUS_ASSESSMENT = %w(
205
+ UE
206
+ SE
207
+ KV
208
+ EX
209
+ SK
210
+ LU
211
+ VU
212
+ PA
213
+ PJ
214
+ PP
215
+ PR
216
+ PS
217
+ KO
218
+ KU
219
+ KV
220
+ VS
221
+ VX
222
+ OL
223
+ VL
224
+ VO+UE
225
+ SE+UE
226
+ VO+SE
227
+ )
228
+
229
+ # ========================================================================= #
230
+ # === MAKE_USE_OF_UNICODE_SYMBOLS_WHENEVER_POSSIBLE
231
+ #
232
+ # The following constant determines whether we will make use of
233
+ # Unicode symbols when that is possible, on the commandline.
234
+ #
235
+ # Unicode symbols in this context primarily refer to the unicode-checkmark
236
+ # "icon".
237
+ # ========================================================================= #
238
+ MAKE_USE_OF_UNICODE_SYMBOLS_WHENEVER_POSSIBLE = true
239
+
240
+ # ========================================================================= #
241
+ # === Studium.shall_we_make_use_of_unicode_symbols?
242
+ # ========================================================================= #
243
+ def self.shall_we_make_use_of_unicode_symbols?
244
+ MAKE_USE_OF_UNICODE_SYMBOLS_WHENEVER_POSSIBLE
245
+ end
246
+
247
+ # ========================================================================= #
248
+ # === Studium::ARRAY_GERMAN_WEEKDAYS
249
+ #
250
+ # All weekdays. This one is kept in german, though.
251
+ # ========================================================================= #
252
+ ARRAY_GERMAN_WEEKDAYS = %w(
253
+ Montag
254
+ Dienstag
255
+ Mittwoch
256
+ Donnerstag
257
+ Freitag
258
+ Samstag
259
+ Sonntag
260
+ ); ARRAY_WEEKDAYS = ARRAY_GERMAN_WEEKDAYS # === ARRAY_WEEKDAYS
261
+
262
+ # ========================================================================= #
263
+ # === Studium::HASH_SHORT_TO_LONG_WEEKDAYS
264
+ # ========================================================================= #
265
+ HASH_SHORT_TO_LONG_WEEKDAYS = {
266
+ 'Mon' => 'Monday',
267
+ 'Tue' => 'Tuesday',
268
+ 'Wed' => 'Wednesday',
269
+ 'Thu' => 'Thursday',
270
+ 'Fri' => 'Friday',
271
+ 'Sat' => 'Saturday',
272
+ 'Sun' => 'Sunday'
273
+ }
274
+
275
+ # ========================================================================= #
276
+ # === Studium::ENGLISH_TO_GERMAN_WEEKDAYS
277
+ # ========================================================================= #
278
+ ENGLISH_TO_GERMAN_WEEKDAYS = {
279
+ 'Monday' => 'Montag',
280
+ 'Tuesday' => 'Dienstag',
281
+ 'Wednesday' => 'Mittwoch',
282
+ 'Thursday' => 'Donnerstag',
283
+ 'Friday' => 'Freitag',
284
+ 'Saturday' => 'Samstag',
285
+ 'Sunday' => 'Sonntag'
286
+ }
287
+
288
+ # ========================================================================= #
289
+ # === GERMAN_TO_ENGLISH_WEEKDAYS
290
+ # ========================================================================= #
291
+ GERMAN_TO_ENGLISH_WEEKDAYS = ENGLISH_TO_GERMAN_WEEKDAYS.invert
292
+
293
+ # ========================================================================= #
294
+ # === ARRAY_ENGLISH_WEEKDAYS
295
+ # ========================================================================= #
296
+ ARRAY_ENGLISH_WEEKDAYS = ENGLISH_TO_GERMAN_WEEKDAYS.keys
297
+
298
+ # ========================================================================= #
299
+ # === Studium.array_english_weekdays?
300
+ # ========================================================================= #
301
+ def self.array_english_weekdays?
302
+ ARRAY_ENGLISH_WEEKDAYS
303
+ end
304
+
305
+ # ========================================================================= #
306
+ # === BOKU_N_ECTS_REGEX
307
+ #
308
+ # This regex can be used to determine the amount of ECTS points from
309
+ # BOKU-lectures. This is presently used in at the least two different
310
+ # rb.files.
311
+ #
312
+ # Also see:
313
+ #
314
+ # https://rubular.com/r/3hWI5p2f6G
315
+ #
316
+ # ========================================================================= #
317
+ BOKU_N_ECTS_REGEX =
318
+ /<span class="bold">(\d{1},?\d{0,1})<\/span> ECTS-Credits<\/td><\/tr>/
319
+
320
+ # ========================================================================= #
321
+ # === GERMAN_WEEK_NAMES
322
+ # ========================================================================= #
323
+ GERMAN_WEEK_NAMES = {
324
+ 'Mo' => 'Montag',
325
+ 'Di' => 'Dienstag',
326
+ 'Mi' => 'Mittwoch',
327
+ 'Do' => 'Donnerstag',
328
+ 'Fr' => 'Freitag',
329
+ 'Sa' => 'Samstag',
330
+ 'So' => 'Sonntag'
331
+ }
332
+
333
+ # ========================================================================= #
334
+ # === ARRAY_AVAILABLE_WEEKDAYS
335
+ #
336
+ # This will be an Array that has ['montag', 'dienstag' etc..]
337
+ # ========================================================================= #
338
+ ARRAY_AVAILABLE_WEEKDAYS = GERMAN_WEEK_NAMES.values.map(&:downcase)
339
+
340
+ # ========================================================================= #
341
+ # === REVERSE_GERMAN_WEEK_NAMES
342
+ # ========================================================================= #
343
+ REVERSE_GERMAN_WEEK_NAMES = GERMAN_WEEK_NAMES.invert
344
+
345
+ # ========================================================================= #
346
+ # === Studium::MONTH_NUMBER_TO_MONTH_NAME
347
+ #
348
+ # This constant maps from the month-number, such as 3, to the corresponding
349
+ # name of that month, such as 'March'.
350
+ # ========================================================================= #
351
+ MONTH_NUMBER_TO_MONTH_NAME = {
352
+ 1 => 'January',
353
+ 2 => 'February',
354
+ 3 => 'March',
355
+ 4 => 'April',
356
+ 5 => 'May',
357
+ 6 => 'June',
358
+ 7 => 'July',
359
+ 8 => 'August',
360
+ 9 => 'September',
361
+ 10 => 'October',
362
+ 11 => 'November',
363
+ 12 => 'December'
364
+ }
365
+
366
+ # ========================================================================= #
367
+ # === Studium.file_passwords
368
+ #
369
+ # This is only useful on my home system. It should probably be moved
370
+ # into its own file, such as roebe.rb.
371
+ # ========================================================================= #
372
+ def self.file_passwords
373
+ '/home/x/data/personal/yaml/passwords/passwords.yml'
374
+ end
375
+
376
+ # ========================================================================= #
377
+ # === UNICODE_HORIZONTAL_BAR
378
+ # ========================================================================= #
379
+ UNICODE_HORIZONTAL_BAR = '―'
380
+
381
+ # ========================================================================= #
382
+ # === Studium.unicode_horizontal_bar
383
+ #
384
+ # This method should be combined with
385
+ # Studium.shall_we_make_use_of_unicode_symbols?, but this is
386
+ # not mandatory and more of a recommendation instead.
387
+ # ========================================================================= #
388
+ def self.unicode_horizontal_bar
389
+ UNICODE_HORIZONTAL_BAR
390
+ end
391
+
392
+ # ========================================================================= #
393
+ # === ARRAY_ALL_KNOWN_DAYS_OF_THE_WEEK
394
+ # ========================================================================= #
395
+ ARRAY_ALL_KNOWN_DAYS_OF_THE_WEEK = [
396
+ :mo,
397
+ :di,
398
+ :mi,
399
+ :do,
400
+ :fr,
401
+ :sa,
402
+ :so
403
+ ]
404
+
405
+ # ========================================================================= #
406
+ # === MONTH_NAME_TO_MONTH_NUMBER
407
+ #
408
+ # And reverse the above Array as well.
409
+ # ========================================================================= #
410
+ MONTH_NAME_TO_MONTH_NUMBER = MONTH_NUMBER_TO_MONTH_NAME.invert
411
+
412
+ # ========================================================================= #
413
+ # === Studium.file_last_question_asked?
414
+ #
415
+ # Note that this method will return a "dynamic" result, which allows
416
+ # the user to use another log-directory.
417
+ # ========================================================================= #
418
+ def self.file_last_question_asked?(
419
+ use_this_as_the_log_directory =
420
+ log_dir?
421
+ )
422
+ # "#{use_this_as_the_log_directory}last_question_asked.md"
423
+ "#{use_this_as_the_log_directory}information_pertaining_to_the_last_exam_question_asked/last_exam_question_answer.md"
424
+ end; self.instance_eval { alias file_last_question_asked file_last_question_asked? } # === Studium.file_last_question_asked
425
+
426
+ # ========================================================================= #
427
+ # === RUBY_SRC_STUDIUM
428
+ #
429
+ # This constant may point to e. g.:
430
+ #
431
+ # /home/x/programming/RUBY/src/studium/
432
+ #
433
+ # ========================================================================= #
434
+ RUBY_SRC_STUDIUM = "#{RUBY_SRC_DIR}studium/"
435
+
436
+ # ========================================================================= #
437
+ # === RUBY_SRC_STUDIUM_LIB
438
+ #
439
+ # As above, but with a trailin 'lib/' part.
440
+ # ========================================================================= #
441
+ RUBY_SRC_STUDIUM_LIB = "#{RUBY_SRC_STUDIUM}lib/"
442
+
443
+ # ========================================================================= #
444
+ # === ROEBE_STUDIUM_DIR
445
+ #
446
+ # An important base constant for my home system.
447
+ #
448
+ # As can be seen, this either makes use of the environment variable
449
+ # STUDIUM, or simply uses a hardcoded path.
450
+ # ========================================================================= #
451
+ if ENV['MY_STUDIUM']
452
+ ROEBE_STUDIUM_DIR = "#{ENV['MY_STUDIUM']}/"
453
+ else # else hardcode it.
454
+ ROEBE_STUDIUM_DIR = "#{USERS_X}studium/"
455
+ end
456
+ # STUD = ROEBE_STUDIUM_DIR # === STUD # Disabled as of July 2022.
457
+ STUDIUM = ROEBE_STUDIUM_DIR # === STUDIUM
458
+ # ======================================================================= #
459
+ # === LOCAL_STUDIUM_DIR
460
+ # ======================================================================= #
461
+ LOCAL_STUDIUM_DIR = ROEBE_STUDIUM_DIR # === LOCAL_STUDIUM_DIR
462
+
463
+ # ========================================================================= #
464
+ # === REMOTE_PERSONAL_WEBSITE_URL
465
+ #
466
+ # My remote personal website.
467
+ # ========================================================================= #
468
+ REMOTE_PERSONAL_WEBSITE_URL = 'http://shevy.bplaced.net/'
469
+
470
+ # ========================================================================= #
471
+ # === Studium::RUBY_STUDIUM_HOME_DIR
472
+ #
473
+ # This constant is useful only for my setup at home.
474
+ #
475
+ # It may point to a path such as this one here:
476
+ #
477
+ # /home/x/programming/ruby/src/studium/lib/studium/
478
+ #
479
+ # ========================================================================= #
480
+ if ENV['RUBY_STUDIUM']
481
+ RUBY_STUDIUM_HOME_DIR = "#{ENV['RUBY_STUDIUM']}/".squeeze('/')
482
+ else # for .cgi like environments, we need to hardcode the directory.
483
+ RUBY_STUDIUM_HOME_DIR = "#{RUBY_SRC_DIR}studium/lib/studium/"
484
+ end
485
+
486
+ # ========================================================================= #
487
+ # === Studium.ruby_src_dir_at_home?
488
+ #
489
+ # This method will return a String such as:
490
+ #
491
+ # "/home/x/programming/ruby/src/"
492
+ #
493
+ # ========================================================================= #
494
+ def self.ruby_src_dir_at_home?
495
+ RUBY_SRC_DIR
496
+ end
497
+
498
+ # ========================================================================= #
499
+ # === BOKU_WIEN_DIR
500
+ #
501
+ # This is just for my personal home directory setup.
502
+ # ========================================================================= #
503
+ BOKU_WIEN_DIR = "#{ROEBE_STUDIUM_DIR}BOKU_WIEN/"
504
+ ROEBE_BOKU_WIEN = BOKU_WIEN_DIR # === ROEBE_BOKU_WIEN
505
+
506
+ # ========================================================================= #
507
+ # === Studium::ROEBE_BOKU_WIEN_YAML
508
+ # ========================================================================= #
509
+ ROEBE_BOKU_WIEN_YAML = "#{ROEBE_BOKU_WIEN}yaml/"
510
+
511
+ # ========================================================================= #
512
+ # === Studium.file_passed_exams_per_month
513
+ #
514
+ # This method is only useful on my home system really.
515
+ # ========================================================================= #
516
+ def self.file_passed_exams_per_month
517
+ "#{ROEBE_STUDIUM_DIR}yaml/passed_exams_per_month.csv"
518
+ end
519
+
520
+ # ========================================================================= #
521
+ # === TU_WIEN_DIR
522
+ # ========================================================================= #
523
+ TU_WIEN_DIR = "#{ROEBE_STUDIUM_DIR}TU_WIEN/"
524
+
525
+ # ========================================================================= #
526
+ # === Studium::ROEBE_TU_WIEN_YAML
527
+ # ========================================================================= #
528
+ ROEBE_TU_WIEN_YAML = "#{TU_WIEN_DIR}yaml/"
529
+
530
+ # ========================================================================= #
531
+ # === EXAMS_RESULT
532
+ #
533
+ # This is a constant solely for my home-setup. Other users will not
534
+ # need this constant.
535
+ # ========================================================================= #
536
+ EXAMS_RESULT = "#{ROEBE_STUDIUM_DIR}EXAMS_RESULT/"
537
+
538
+ # ========================================================================= #
539
+ # === ROEBE_FILE_RENAME_KONSOLE_TAB
540
+ #
541
+ # Hardcoded path since this is only used on my home system.
542
+ # ========================================================================= #
543
+ ROEBE_FILE_RENAME_KONSOLE_TAB =
544
+ "#{RUBY_STUDIUM_HOME_DIR}yaml/rename_konsole_tab.yml"
545
+
546
+ # ========================================================================= #
547
+ # === STUDIUM_YAML_DIRECTORY
548
+ #
549
+ # This constant depends on the constant STUDIUM_DIR.
550
+ #
551
+ # The value on my system will expand to:
552
+ #
553
+ # /home/x/studium/yaml/
554
+ #
555
+ # ========================================================================= #
556
+ # STUDIUM_YAML_DIRECTORY = "#{ROEBE_STUDIUM_DIR}yaml/"
557
+ # ^^^ disabled in June 2023.
558
+
559
+ # ========================================================================= #
560
+ # === Studium.studium_at_home_dir?
561
+ #
562
+ # This method will return a String such as "/home/x/studium/".
563
+ # ========================================================================= #
564
+ def self.studium_at_home_dir?
565
+ ROEBE_STUDIUM_DIR
566
+ end; self.instance_eval { alias studium_directory_at_home studium_at_home_dir? } # === Studium.studium_directory_at_home
567
+ self.instance_eval { alias studium_directory_at_home? studium_at_home_dir? } # === Studium.studium_directory_at_home?
568
+
569
+ # ========================================================================= #
570
+ # === FILE_BROWSER
571
+ # ========================================================================= #
572
+ FILE_BROWSER = "#{USERS_X}programming/ruby/src/roebe/lib/roebe/yaml/browser.yml"
573
+
574
+ # ========================================================================= #
575
+ # === ROEBE_UNI_WIEN
576
+ # ========================================================================= #
577
+ ROEBE_UNI_WIEN =
578
+ "#{ROEBE_STUDIUM_DIR}UNI_WIEN/"
579
+ UNI_WIEN = ROEBE_UNI_WIEN # === UNI_WIEN
580
+
581
+ # ========================================================================= #
582
+ # === Studium::ROEBE_UNI_WIEN_YAML
583
+ # ========================================================================= #
584
+ ROEBE_UNI_WIEN_YAML = "#{ROEBE_UNI_WIEN}yaml/"
585
+
586
+ # ========================================================================= #
587
+ # === Studium:.FILE_TODO_BOKU
588
+ # ========================================================================= #
589
+ FILE_TODO_BOKU =
590
+ "#{ROEBE_STUDIUM_DIR}INDIVIDUELLE_STUDIEN/TODO_BOKU.md"
591
+
592
+ # ========================================================================= #
593
+ # === SCI
594
+ # ========================================================================= #
595
+ if ENV['SCI'] # This here would not work in .cgi environments.
596
+ SCI = "#{ENV['SCI']}/"
597
+ else # Hence we hardcode a safe default.
598
+ SCI = "#{USERS_X}data/science/"
599
+ end
600
+
601
+ # ========================================================================= #
602
+ # === @exam_topics
603
+ # ========================================================================= #
604
+ @exam_topics = nil # Initialize it.
605
+
606
+ # ========================================================================= #
607
+ # === Studium.file_directory_to_the_exam_topics
608
+ #
609
+ # Keep track of the directory to the exam topics.
610
+ #
611
+ # This will be hardcoded to return e. g.:
612
+ #
613
+ # /Programs/Ruby/2.4.1/lib/ruby/site_ruby/2.4.0/studium/yaml/directory_to_the_exam_topics.yml
614
+ #
615
+ # ========================================================================= #
616
+ def self.file_directory_to_the_exam_topics
617
+ "#{project_yaml_directory?}directory_to_the_exam_topics.yml"
618
+ end
619
+
620
+ # ========================================================================= #
621
+ # === MY_EXAM_TOPICS
622
+ #
623
+ # Just for my exam topics - a hardcoded constant to the directory there.
624
+ # ========================================================================= #
625
+ MY_EXAM_TOPICS = "#{RUBY_SRC_STUDIUM_LIB}studium/exam_topics/"
626
+ begin
627
+ require 'html_tags/base/prototype.rb'
628
+ rescue LoadError; end
629
+
630
+ begin
631
+ require 'html_tags/requires/require_the_img_tag.rb'
632
+ rescue LoadError; end
633
+
634
+ # ========================================================================= #
635
+ # === IMG_DIRECTORY
636
+ # ========================================================================= #
637
+ IMG_DIRECTORY = '/home/x/data/images/'
638
+
639
+ # ========================================================================= #
640
+ # === Studium.path_to_the_vetmed_logo_image?
641
+ # ========================================================================= #
642
+ def self.path_to_the_vetmed_logo_image?
643
+ "#{IMG_DIRECTORY}studium/VETMED_LOGO_IMAGE.png"
644
+ end
645
+
646
+ # ========================================================================= #
647
+ # === Studium.path_to_the_practical_course_image?
648
+ # ========================================================================= #
649
+ def self.path_to_the_practical_course_image?
650
+ "#{IMG_DIRECTORY}studium/PRACTICAL_COURSE.png"
651
+ end
652
+
653
+ # ========================================================================= #
654
+ # === Studium.path_to_the_university_of_vienna_logo_image?
655
+ # ========================================================================= #
656
+ def self.path_to_the_university_of_vienna_logo_image?
657
+ "#{IMG_DIRECTORY}studium/UNIVERSITY_OF_VIENNA_LOGO_IMAGE.png"
658
+ end
659
+
660
+ # ========================================================================= #
661
+ # === Studium.path_to_the_tu_vienna_logo_image?
662
+ # ========================================================================= #
663
+ def self.path_to_the_tu_vienna_logo_image?
664
+ "#{IMG_DIRECTORY}studium/TU_VIENNA_LOGO.png"
665
+ end
666
+
667
+ # ========================================================================= #
668
+ # === @use_this_css_style_for_the_logo_images
669
+ # ========================================================================= #
670
+ @use_this_css_style_for_the_logo_images = 'margin-left:5px; border: 1px solid black;'
671
+
672
+ # ========================================================================= #
673
+ # === Studium.path_to_the_meduni_logo_image?
674
+ # ========================================================================= #
675
+ def self.path_to_the_meduni_logo_image?
676
+ "#{IMG_DIRECTORY}studium/MEDUNI_LOGO_IMAGE.png"
677
+ end
678
+
679
+ # ========================================================================= #
680
+ # === Studium.path_to_the_boku_logo_image?
681
+ # ========================================================================= #
682
+ def self.path_to_the_boku_logo_image?
683
+ "#{IMG_DIRECTORY}studium/BOKU_VIENNA_LOGO_IMAGE.png"
684
+ end
685
+
686
+ # ========================================================================= #
687
+ # === Studium.exam_topics_directory?
688
+ # ========================================================================= #
689
+ def self.exam_topics_directory?
690
+ "#{Studium.project_base_directory?}exam_topics/"
691
+ end
692
+
693
+ # ========================================================================= #
694
+ # === Studium.set_exam_topics
695
+ #
696
+ # Note that this will point to a directory.
697
+ # ========================================================================= #
698
+ def self.set_exam_topics(
699
+ i = EXAM_TOPICS
700
+ )
701
+ if i
702
+ i << '/' unless i.end_with? '/' # Ensure trailing '/' here.
703
+ end
704
+ @exam_topics = i
705
+ end
706
+
707
+ # ========================================================================= #
708
+ # === @exam_topics
709
+ #
710
+ # We need this instance variable on the toplevel because we may have
711
+ # to change this via the commandline sometimes.
712
+ #
713
+ # The input to Studium.set_exam_topics() should be a directory where
714
+ # the individual question-answer files can be found.
715
+ # ========================================================================= #
716
+ if ::Studium.is_on_roebe?
717
+ ::Studium.set_exam_topics(MY_EXAM_TOPICS)
718
+ elsif File.directory?(MY_EXAM_TOPICS) # This is a poor-man's rescue for windows specifically.
719
+ ::Studium.set_exam_topics(MY_EXAM_TOPICS)
720
+ else # This here is the default, for non-roebe systems.
721
+ ::Studium.set_exam_topics(@exam_topics)
722
+ end
723
+
724
+ # ========================================================================= #
725
+ # === directory_to_the_exam_topics.yml
726
+ #
727
+ # However had, the above can be overruled if the user has a non-empty
728
+ # yaml file called "directory_to_the_exam_topics.yml". If this file
729
+ # exists, and if it is non-empty, then we will instead use that as the
730
+ # directory. It will also overrule my personal setting in this case.
731
+ # ========================================================================= #
732
+ if File.exist?(Studium.file_directory_to_the_exam_topics) and
733
+ !File.empty?(Studium.file_directory_to_the_exam_topics)
734
+ _ = YAML.load_file(Studium.file_directory_to_the_exam_topics)
735
+ ::Studium.set_exam_topics(_)
736
+ end
737
+
738
+ # ========================================================================= #
739
+ # === Studium.permanenty_set_directory_to_the_exam_topics
740
+ #
741
+ # Use this method to permanently set another directory to
742
+ # the exam topics.
743
+ #
744
+ # Usage example:
745
+ #
746
+ # studium --set-directory-to-the-exam-topics=/Depot/j/EXAM_TOPICS/
747
+ #
748
+ # ========================================================================= #
749
+ def self.permanenty_set_directory_to_the_exam_topics(i)
750
+ i << '/' unless i.end_with? '/'
751
+ what = i
752
+ into = Studium.file_directory_to_the_exam_topics
753
+ Studium.write_what_into(what, into)
754
+ # ======================================================================= #
755
+ # On my home system, we will also update the file.
756
+ # ======================================================================= #
757
+ if ::Studium.is_on_roebe?
758
+ into = RUBY_STUDIUM_HOME_DIR+'yaml/directory_to_the_exam_topics.yml'
759
+ if File.exist? into
760
+ Studium.write_what_into(what, into)
761
+ else
762
+ e "File at `#{sfile(into)}` does not exist."
763
+ end
764
+ end
765
+ end
766
+
767
+ # ========================================================================= #
768
+ # === Studium.directory_to_the_exam_topics?
769
+ #
770
+ # This method is a getter for the actual @exam_topics - which must
771
+ # be a directory.
772
+ #
773
+ # This may return a directory, such as e. g.:
774
+ #
775
+ # /home/x/programming/ruby/src/studium/lib/studium/exam_topics/
776
+ #
777
+ # ========================================================================= #
778
+ def self.directory_to_the_exam_topics?
779
+ @exam_topics
780
+ end; self.instance_eval { alias path_to_exam_topic? directory_to_the_exam_topics? } # === Studium.path_to_exam_topic?
781
+ self.instance_eval { alias path_to_the_exam_directory? directory_to_the_exam_topics? } # === Studium.path_to_the_exam_directory?
782
+ self.instance_eval { alias directory_to_the_exam_topics directory_to_the_exam_topics? } # === Studium.directory_to_the_exam_topics
783
+ self.instance_eval { alias directory_to_my_exam_topics directory_to_the_exam_topics? } # === Studium.directory_to_my_exam_topics
784
+ self.instance_eval { alias directory_containing_the_exam_topics? directory_to_the_exam_topics? } # === Studium.directory_containing_the_exam_topics?
785
+ self.instance_eval { alias path_to_the_exam_topics? directory_to_the_exam_topics? } # === Studium.path_to_the_exam_topics?
786
+ self.instance_eval { alias exam_topics? directory_to_the_exam_topics? } # === Studium.exam_topics?
787
+
788
+ # ========================================================================= #
789
+ # === Studium.my_exam_topics_directory?
790
+ #
791
+ # This method will always return a hardcoded path.
792
+ # ========================================================================= #
793
+ def self.my_exam_topics_directory?
794
+ '/home/x/programming/ruby/src/studium/lib/studium/exam_topics/'
795
+ end
796
+
797
+ # ========================================================================= #
798
+ # === Studium::ARRAY_REGISTERED_CURRICULA
799
+ #
800
+ # All curricula should be registered here, as an Array of Symbols.
801
+ #
802
+ # Only list these curricula ONCE.
803
+ #
804
+ # This allows us to make use of that information, for example when
805
+ # displaying statistics about these curricula.
806
+ #
807
+ # Note that the following constant also includes aggregate
808
+ # curricula, such as bachelor_master_vektoren. If you need
809
+ # a method that returns only the non-standalone curricula,
810
+ # you can use the method defined after the following constant.
811
+ # ========================================================================= #
812
+ ARRAY_REGISTERED_CURRICULA = Dir[
813
+ ::Studium.project_yaml_directory?+
814
+ 'curricula/**/**.yml'
815
+ ].reject {|line|
816
+ line.include? 'outdated/'
817
+ }.map {|line|
818
+ File.basename(line.to_s).
819
+ delete_suffix('.yml').to_sym
820
+ }
821
+
822
+ # ========================================================================= #
823
+ # === Studium.return_registered_standalone_curricula
824
+ #
825
+ # We will remove the bachelor-master vektor curriculum from the
826
+ # Array that is returned by this method, mostly because it is
827
+ # an aggregated curriculum, rather than a single standalone
828
+ # one.
829
+ # ========================================================================= #
830
+ def self.return_registered_standalone_curricula
831
+ ARRAY_REGISTERED_CURRICULA - [:bachelor_master_vektoren]
832
+ end; self.instance_eval { alias registered_standalone_curricula return_registered_standalone_curricula } # === Studium.registered_standalone_curricula
833
+ self.instance_eval { alias available_curricula? return_registered_standalone_curricula } # === Studium.available_curricula?
834
+
835
+ # ========================================================================= #
836
+ # === FILE_BACHELOR_TECHNISCHE_CHEMIE_CURRICULUM
837
+ # ========================================================================= #
838
+ FILE_BACHELOR_TECHNISCHE_CHEMIE_CURRICULUM =
839
+ "#{project_curricula_yaml_directory?}"\
840
+ "bachelor/bachelor_technische_chemie_033290.yml"
841
+
842
+ # ========================================================================= #
843
+ # === FILE_BACHELOR_VERFAHRENSTECHNIK_CURRICULUM
844
+ # ========================================================================= #
845
+ FILE_BACHELOR_VERFAHRENSTECHNIK_CURRICULUM =
846
+ "#{project_curricula_yaml_directory?}"\
847
+ "bachelor/bachelor_verfahrenstechnik_033273.yml"
848
+
849
+ # ========================================================================= #
850
+ # === FILE_BACHELOR_MOLEKULARBIOLOGIE_GRAZ_CURRICULUM
851
+ # ========================================================================= #
852
+ FILE_BACHELOR_MOLEKULARBIOLOGIE_GRAZ_CURRICULUM =
853
+ "#{project_curricula_yaml_directory?}"\
854
+ "bachelor/bachelor_molekularbiologie_033665.yml"
855
+
856
+ # ========================================================================= #
857
+ # === FILE_BACHELOR_MASTER_BOKU_MOLEKULARE_BIOTECHNOLOGIE_UND_BIOINFORMATIK
858
+ #
859
+ # This entry point is for an individual curriculum.
860
+ # ========================================================================= #
861
+ FILE_BACHELOR_MASTER_BOKU_MOLEKULARE_BIOTECHNOLOGIE_UND_BIOINFORMATIK =
862
+ "#{ROEBE_BOKU_WIEN_YAML}"\
863
+ "bachelor/bachelor_master_molekulare_biotechnologie_und_bioinformatik.yml"
864
+
865
+ # ========================================================================= #
866
+ # === FILE_BACHELOR_BOKU_INDIVIDUELLES_CURRICULUM_BIOINFORMATIK_UND_BIOANALYTIK
867
+ # ========================================================================= #
868
+ FILE_BACHELOR_BOKU_INDIVIDUELLES_CURRICULUM_BIOINFORMATIK_UND_BIOANALYTIK =
869
+ "#{ROEBE_BOKU_WIEN_YAML}"\
870
+ "bachelor/bachelor_individuelles_curriculum_bio_informatik_und_molekulare_biotechnologie_mit_den_schwerpunkten_immunobiotechnologe_und_agrarbiotechnologie.yml"
871
+
872
+ # ========================================================================= #
873
+ # === FILE_MASTER_BOKU_INDIVIDUELLES_CURRICULUM_BIOINFORMATIK_UND_BIOANALYTIK
874
+ # ========================================================================= #
875
+ FILE_MASTER_BOKU_INDIVIDUELLES_CURRICULUM_BIOINFORMATIK_UND_BIOANALYTIK =
876
+ "#{ROEBE_BOKU_WIEN_YAML}individual/"\
877
+ "master_individuelles_curriculum_bio_informatik_und_molekulare_biotechnologie_mit_den_schwerpunkten_immunobiotechnologe_und_agrarbiotechnologie.yml"
878
+
879
+ # ========================================================================= #
880
+ # === FILE_BACHELOR_MASTER_TU_WIEN_INDIVIDUELLES_STUDIUM
881
+ # ========================================================================= #
882
+ FILE_BACHELOR_MASTER_TU_WIEN_INDIVIDUELLES_STUDIUM =
883
+ "#{ROEBE_TU_WIEN_YAML}"\
884
+ "bachelor/bachelor_master_individuelles_studium_noch_ohne_namen_an_der_TU_Wien.yml"
885
+
886
+ # ========================================================================= #
887
+ # === FILE_BACHELOR_MOLEKULARE_BIOLOGIE
888
+ #
889
+ # This is the bachelor-curriculum part for "molekulare biologie" in
890
+ # Vienna.
891
+ # ========================================================================= #
892
+ FILE_BACHELOR_MOLEKULARE_BIOLOGIE =
893
+ "#{project_curricula_yaml_directory?}"\
894
+ "bachelor/bachelor_biologie_molekulare_biologie_033630.yml"
895
+ UNIWIEN_BACHELOR_MOLEKULARE_BIOLOGIE = FILE_BACHELOR_MOLEKULARE_BIOLOGIE
896
+
897
+ # ========================================================================= #
898
+ # === FILE_MASTER_MOLEKULARE_BIOLOGIE
899
+ #
900
+ # The curriculum number for the master molecular biology is 066834.
901
+ # ========================================================================= #
902
+ FILE_MASTER_MOLEKULARE_BIOLOGIE =
903
+ "#{project_curricula_yaml_directory?}"\
904
+ "master/master_molekulare_biologie_066834.yml"
905
+ UNIWIEN_MASTER_MOLEKULARE_BIOLOGIE = FILE_MASTER_MOLEKULARE_BIOLOGIE # === UNIWIEN_MASTER_MOLEKULARE_BIOLOGIE
906
+ FILE_MASTER_MOLBIO = FILE_MASTER_MOLEKULARE_BIOLOGIE # === FILE_MASTER_MOLBIO
907
+
908
+ # ========================================================================= #
909
+ # === FILE_MASTER_IMMUNBIOLOGIE
910
+ #
911
+ # This is the main immunobiologie master, in vienna. The curriculum
912
+ # number is 066830.
913
+ # ========================================================================= #
914
+ FILE_MASTER_IMMUNBIOLOGIE =
915
+ "#{project_curricula_yaml_directory?}"\
916
+ "master/master_biologie_molekulare_mikrobiologie_mikrobielle_oekologie_und_immunbiologie_066830.yml"
917
+ UNIWIEN_MASTER_IMMUNBIOLOGIE = FILE_MASTER_IMMUNBIOLOGIE # === UNIWIEN_MASTER_IMMUNBIOLOGIE
918
+ FILE_MASTER_IMMUNO = FILE_MASTER_IMMUNBIOLOGIE # === FILE_MASTER_IMMUNO
919
+ FILE_MASTER_IMMUNOBIOLOGY_CURRICULUM = FILE_MASTER_IMMUNBIOLOGIE # === FILE_MASTER_IMMUNOBIOLOGY_CURRICULUM
920
+
921
+ # ========================================================================= #
922
+ # === FILE_BACHELOR_LMBT
923
+ #
924
+ # This is the curriculum for the BOKU "Lebensmittel- und Biotechnologie".
925
+ # ========================================================================= #
926
+ FILE_BACHELOR_LMBT =
927
+ "#{project_curricula_yaml_directory?}"\
928
+ "bachelor/bachelor_lmbt_033217.yml"
929
+ BOKU_BACHELOR_LMBT_CURRICULUM = FILE_BACHELOR_LMBT # === BOKU_BACHELOR_LMBT_CURRICULUM
930
+ FILE_BACHELOR_BOKU_LMBT = FILE_BACHELOR_LMBT # === FILE_BACHELOR_BOKU_LMBT
931
+ FILE_BOKU_BACHELOR_LMBT_CURRICULUM = FILE_BACHELOR_LMBT # === FILE_BOKU_BACHELOR_LMBT_CURRICULUM
932
+
933
+ # ========================================================================= #
934
+ # === FILE_BACHELOR_BOTANIK
935
+ # ========================================================================= #
936
+ FILE_BACHELOR_BOTANIK =
937
+ "#{project_curricula_yaml_directory?}"\
938
+ "bachelor/bachelor_biologie_botanik_033630.yml"
939
+ UNIWIEN_BACHELOR_BOTANIK_BIOLOGIE = FILE_BACHELOR_BOTANIK # === UNIWIEN_BACHELOR_BOTANIK_BIOLOGIE
940
+ FILE_BACHELOR_BOTANIK_CURRICULUM = FILE_BACHELOR_BOTANIK # === FILE_BACHELOR_BOTANIK_CURRICULUM
941
+
942
+ # ========================================================================= #
943
+ # === FILE_UNIWIEN_MASTER_BIOINFORMATIK_CURRICULUM
944
+ # ========================================================================= #
945
+ FILE_UNIWIEN_MASTER_BIOINFORMATIK_CURRICULUM =
946
+ "#{project_curricula_yaml_directory?}"\
947
+ "master/master_bioinformatik_066875.yml"
948
+
949
+ # ========================================================================= #
950
+ # === FILE_BACHELOR_MEDIZINISCHE_INFORMATIK_CURRICULUM
951
+ # ========================================================================= #
952
+ FILE_BACHELOR_MEDIZINISCHE_INFORMATIK_CURRICULUM =
953
+ "#{project_curricula_yaml_directory?}"\
954
+ "bachelor/bachelor_medizinische_informatik_033533.yml"
955
+
956
+ # ========================================================================= #
957
+ # === FILE_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN
958
+ # ========================================================================= #
959
+ FILE_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN =
960
+ "#{project_curricula_yaml_directory?}"\
961
+ "bachelor/bachelor_nutrition_science_033638.yml"
962
+ FILE_BACHELOR_ERN = FILE_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN # === FILE_BACHELOR_ERN
963
+ UNI_WIEN_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN_CURRICULUM = FILE_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN # === UNI_WIEN_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN_CURRICULUM
964
+ FILE_UNI_WIEN_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN_CURRICULUM = FILE_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN # === FILE_UNI_WIEN_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN_CURRICULUM
965
+
966
+ # ========================================================================= #
967
+ # === Studium.file_lecture_information?
968
+ #
969
+ # Note that a certain environment variable will always overrule the
970
+ # result of the following method.
971
+ # ========================================================================= #
972
+ def self.file_lecture_information?
973
+ # ======================================================================= #
974
+ # First check for the ENV variable STUDIUM_FILE_LECTURE_INFORMATION:
975
+ # ======================================================================= #
976
+ if ENV.has_key? 'STUDIUM_FILE_LECTURE_INFORMATION'
977
+ return ENV['STUDIUM_FILE_LECTURE_INFORMATION'].dup
978
+ else
979
+ return @file_lecture_information
980
+ end
981
+ end; self.instance_eval { alias file_lecture_information file_lecture_information? } # === Studium.file_lecture_information
982
+ self.instance_eval { alias lecture_information? file_lecture_information? } # === Studium.lecture_information
983
+
984
+ # ========================================================================= #
985
+ # === Studium.set_file_lecture_information
986
+ # ========================================================================= #
987
+ def self.set_file_lecture_information(
988
+ i = :default
989
+ )
990
+ case i
991
+ # ======================================================================= #
992
+ # === :default
993
+ # ======================================================================= #
994
+ when :default,
995
+ nil
996
+ i = "#{yaml_directory?}lecture_information/lecture_information.yml"
997
+ end
998
+ @file_lecture_information = i
999
+ end
1000
+
1001
+ # ========================================================================= #
1002
+ # === FILE_DEFAULT_DELAY
1003
+ #
1004
+ # The following constant, and its aliases defined below, determines where
1005
+ # to store the default delay for exam-questions to be used.
1006
+ #
1007
+ # This constant depends on the constant PROJECT_YAML_DIRECTORY, which
1008
+ # is defined in the following file:
1009
+ #
1010
+ # studium/project/project_yaml_directory.rb
1011
+ #
1012
+ # ========================================================================= #
1013
+ FILE_DEFAULT_DELAY = "#{project_yaml_directory?}default_delay.yml"
1014
+ FILE_DELAY = FILE_DEFAULT_DELAY # === FILE_DELAY
1015
+ DELAY_CONSTANT_STORED_HERE = FILE_DEFAULT_DELAY # === DELAY_CONSTANT_STORED_HERE
1016
+
1017
+ # ========================================================================= #
1018
+ # === Studium.file_daily_questions_solved?
1019
+ #
1020
+ # This method denotes where the file "daily_questions_solved.yml" is
1021
+ # to be stored. On my home system, this will make use of a different
1022
+ # path, hence why there is a check. The reason for this is because
1023
+ # I regularly back this file up, so that I can compare results over
1024
+ # different years more easily.
1025
+ # ========================================================================= #
1026
+ def self.file_daily_questions_solved?
1027
+ if ::Studium.is_on_roebe?
1028
+ "#{RUBY_SRC_STUDIUM_LIB}studium/yaml/daily_questions_solved/daily_questions_solved.yml"
1029
+ else # else use this default
1030
+ "#{log_dir?}daily_questions_solved/daily_questions_solved.yml"
1031
+ end
1032
+ end
1033
+
1034
+ # ========================================================================= #
1035
+ # === Studium.file_ten_aliases
1036
+ # ========================================================================= #
1037
+ def self.file_ten_aliases
1038
+ "#{log_dir?}ten_aliases.yml"
1039
+ end
1040
+
1041
+ # ========================================================================= #
1042
+ # === Studium.file_twenty_aliases
1043
+ # ========================================================================= #
1044
+ def self.file_twenty_aliases
1045
+ "#{log_dir?}twenty_aliases.yml"
1046
+ end
1047
+
1048
+ # ========================================================================= #
1049
+ # === MY_DATA
1050
+ # ========================================================================= #
1051
+ if ENV['MY_DATA']
1052
+ MY_DATA = "#{ENV['MY_DATA'].to_s}/"
1053
+ else
1054
+ MY_DATA = "#{USERS_X}data/"
1055
+ end
1056
+
1057
+ # ========================================================================= #
1058
+ # === LAST_SAVED_INTO_THIS_FILE
1059
+ # ========================================================================= #
1060
+ # LAST_SAVED_INTO_THIS_FILE =
1061
+ # FILE_LAST_SAVED_INTO_THIS_FILE = LAST_SAVED_INTO_THIS_FILE
1062
+ # ^^^ these two were removed on 21.06.2023.
1063
+
1064
+ # ========================================================================= #
1065
+ # Studium.last_saved_into_this_file
1066
+ # ========================================================================= #
1067
+ def self.last_saved_into_this_file
1068
+ "#{log_dir?}last_saved_into_this_file.md"
1069
+ end
1070
+
1071
+ # ========================================================================= #
1072
+ # === FILE_EDITOR
1073
+ # ========================================================================= #
1074
+ FILE_EDITOR = "#{yaml_directory?}editor.yml"
1075
+
1076
+ # ========================================================================= #
1077
+ # === FILE_LAST_RECORDED_START_TIME
1078
+ # ========================================================================= #
1079
+ require 'studium/logging/log_directory.rb'
1080
+ FILE_LAST_RECORDED_START_TIME =
1081
+ "#{log_dir?}last_recorded_start_time.md"
1082
+
1083
+ # ========================================================================= #
1084
+ # === FILE_RENAME_KONSOLE_TAB
1085
+ #
1086
+ # This constant specifies the path to the file that controls
1087
+ # as to whether we will rename the KDE konsole tab or
1088
+ # whether we will not.
1089
+ # ========================================================================= #
1090
+ FILE_RENAME_KONSOLE_TAB =
1091
+ "#{project_yaml_directory?}rename_konsole_tab.yml"
1092
+
1093
+ # ========================================================================= #
1094
+ # === FILE_N_TOTAL_QUESTIONS
1095
+ #
1096
+ # This constant may expand into e. g.
1097
+ #
1098
+ # "/Programs/Ruby/2.3.1/lib/ruby/site_ruby/2.3.0/studium/yaml/n_total_questions.yml"
1099
+ #
1100
+ # ========================================================================= #
1101
+ FILE_N_TOTAL_QUESTIONS =
1102
+ "#{yaml_directory?}n_total_questions.yml"
1103
+
1104
+ # ========================================================================= #
1105
+ # === USE_THIS_EDITOR
1106
+ #
1107
+ # The main editor for use in the project. This setting can be overruled
1108
+ # on the commandline.
1109
+ # ========================================================================= #
1110
+ if File.exist? FILE_EDITOR
1111
+ USE_THIS_EDITOR = YAML.load_file(FILE_EDITOR)
1112
+ else
1113
+ USE_THIS_EDITOR = 'bluefish'
1114
+ end
1115
+
1116
+ # ========================================================================= #
1117
+ # === Studium.file_max_stats
1118
+ # ========================================================================= #
1119
+ def self.file_max_stats
1120
+ "#{project_yaml_directory?}max_stats/max_stats.yml"
1121
+ end
1122
+
1123
+ # ========================================================================= #
1124
+ # === Studium.file_array_allowed_entries_for_the_file_lecture_information
1125
+ #
1126
+ # This method will return a path such as the following one:
1127
+ #
1128
+ # /home/Programs/Ruby/2.7.1/lib/ruby/site_ruby/2.7.0/studium/yaml/lecture_aliases.yml
1129
+ #
1130
+ # ========================================================================= #
1131
+ def self.file_array_allowed_entries_for_the_file_lecture_information
1132
+ "#{project_yaml_directory?}"\
1133
+ "array_allowed_entries_for_the_file_lecture_information.yml"
1134
+ end
1135
+
1136
+ # ========================================================================= #
1137
+ # === Studium.file_holidays
1138
+ #
1139
+ # The holidays.yml file keeps track of holidays at different
1140
+ # universities in Austria.
1141
+ # ========================================================================= #
1142
+ def self.file_holidays
1143
+ "#{project_yaml_directory?}holidays/holidays.yml"
1144
+ end
1145
+
1146
+ # ========================================================================= #
1147
+ # === Studium.file_grouped_themes
1148
+ # ========================================================================= #
1149
+ def self.file_grouped_themes
1150
+ "#{yaml_directory?}grouped_themes/grouped_themes.yml"
1151
+ end; self.instance_eval { alias file_meta_themes file_grouped_themes } # === Studium.file_meta_themes
1152
+
1153
+ # ========================================================================= #
1154
+ # === FILE_BACKLOG_OF_EXAMS
1155
+ # ========================================================================= #
1156
+ FILE_BACKLOG_OF_EXAMS =
1157
+ "#{yaml_directory?}backlog_of_exams.yml"
1158
+
1159
+ # ========================================================================= #
1160
+ # === FILE_STATISTICS
1161
+ #
1162
+ # This constant will point to e. g. the file
1163
+ # "studium/yaml/statistics.yml".
1164
+ # ========================================================================= #
1165
+ FILE_STATISTICS =
1166
+ "#{yaml_directory?}statistics/statistics.yml"
1167
+
1168
+ # ========================================================================= #
1169
+ # === Studium.file_allowed_themes_for_courses
1170
+ # ========================================================================= #
1171
+ def self.file_allowed_themes_for_courses
1172
+ "#{project_yaml_directory?}allowed_themes_for_courses/allowed_themes_for_courses.yml"
1173
+ end; self.instance_eval { alias file_allowed_themes_for_exams file_allowed_themes_for_courses } # === Studium.file_allowed_themes_for_exams
1174
+
1175
+ # ========================================================================= #
1176
+ # === FILE_META_TOPICS_STATISTICS
1177
+ #
1178
+ # This file will keep track of the statistics for the meta-topics,
1179
+ # such as meta-genetics or meta-biochemistry. We will only store
1180
+ # the maximum values each, that is, how many questions were answered.
1181
+ #
1182
+ # The format for each entry in the .yml file will be:
1183
+ #
1184
+ # :meta_biochemistry = { n_questions: 4314, n_answers: 1345 }
1185
+ #
1186
+ # ========================================================================= #
1187
+ FILE_META_TOPICS_STATISTICS = "#{yaml_directory?}meta_topics_statistics.yml"
1188
+
1189
+ # ========================================================================= #
1190
+ # === FILE_LECTURE_INFORMATION
1191
+ #
1192
+ # This is a hardcoded constant. It is better to not use it, though,
1193
+ # and instead use the toplevel instance variable called
1194
+ # @file_lecture_information. Since as of July 2022 this was deprecated;
1195
+ # it will be removed at a later time.
1196
+ # ========================================================================= #
1197
+ # FILE_LECTURE_INFORMATION = "#{PROJECT_YAML_DIRECTORY}lecture_information.yml"
1198
+
1199
+ # ========================================================================= #
1200
+ # === Studium.file_lecture_aliases
1201
+ # ========================================================================= #
1202
+ def self.file_lecture_aliases
1203
+ "#{project_yaml_directory?}lecture_aliases.yml"
1204
+ end
1205
+
1206
+ # ========================================================================= #
1207
+ # === Studium.file_important_exams?
1208
+ # ========================================================================= #
1209
+ def self.file_important_exams?
1210
+ "#{project_yaml_directory?}important_exams.yml"
1211
+ end; self.instance_eval { alias important_exams? file_important_exams? } # === Studium.important_exams
1212
+ self.instance_eval { alias file_important_exams file_important_exams? } # === Studium.file_important_exams
1213
+
1214
+ # ========================================================================= #
1215
+ # === Studium.csv_directory?
1216
+ #
1217
+ # Pointer to the csv/ subdirectory of the studium project.
1218
+ # ========================================================================= #
1219
+ def self.csv_directory?
1220
+ "#{project_base_directory?}csv/"
1221
+ end
1222
+
1223
+ # ========================================================================= #
1224
+ # === FILE_GERMAN_TO_ENGLISH_MONTH_NAMES
1225
+ # ========================================================================= #
1226
+ FILE_GERMAN_TO_ENGLISH_MONTH_NAMES =
1227
+ "#{project_yaml_directory?}german/german_to_english_month_names.yml"
1228
+
1229
+ # ========================================================================= #
1230
+ # === MONTH_NAME_ALIASES_GERMAN_TO_ENGLISH
1231
+ # ========================================================================= #
1232
+ MONTH_NAME_ALIASES_GERMAN_TO_ENGLISH = YAML.load_file(
1233
+ FILE_GERMAN_TO_ENGLISH_MONTH_NAMES
1234
+ )
1235
+
1236
+ # ========================================================================= #
1237
+ # === Studium.file_mitteilungsblätter
1238
+ # ========================================================================= #
1239
+ def self.file_mitteilungsblätter
1240
+ "#{yaml_directory?}mitteilungsblätter/mitteilungsblätter.yml"
1241
+ end
1242
+
1243
+ # ========================================================================= #
1244
+ # === Studium.file_all_registered_upcoming_exams
1245
+ #
1246
+ # In the long run this method should replace the constant called
1247
+ # FILE_ALL_REGISTERED_UPCOMING_EXAMS.
1248
+ # ========================================================================= #
1249
+ def self.file_all_registered_upcoming_exams(
1250
+ use_this_as_log_dir = log_dir?
1251
+ )
1252
+ "#{use_this_as_log_dir}all_registered_upcoming_exams.yml"
1253
+ end
1254
+
1255
+ # ========================================================================= #
1256
+ # === DEFAULT_BROWSER
1257
+ #
1258
+ # This constant determines which browser we will use. For most users
1259
+ # this may be hardcoded for the time being. If you want to ad-hoc
1260
+ # change this, either use the ENV variable BROWSER, or simply change
1261
+ # the hardcoded constant below (the last one).
1262
+ #
1263
+ # On my home system the default browser is stored here:
1264
+ #
1265
+ # /home/x/programming/ruby/src/roebe/lib/roebe/yaml/browser.yml
1266
+ #
1267
+ # ========================================================================= #
1268
+ if is_on_roebe? and File.exist?(FILE_BROWSER)
1269
+ require 'yaml'
1270
+ DEFAULT_BROWSER = YAML.load_file(FILE_BROWSER).strip
1271
+ elsif ENV.has_key?('BROWSER')
1272
+ DEFAULT_BROWSER = ENV['BROWSER'].to_s.dup
1273
+ else # else hardcoded it to palemoon.
1274
+ DEFAULT_BROWSER = 'palemoon'
1275
+ end
1276
+
1277
+ # ========================================================================= #
1278
+ # === FILE_LAST_TOPIC
1279
+ #
1280
+ # This file keeps track of the last topic used.
1281
+ # ========================================================================= #
1282
+ # FILE_LAST_TOPIC = "#{log_dir}last_topic.md"
1283
+
1284
+ # ========================================================================= #
1285
+ # === Studium.last_topic?
1286
+ #
1287
+ # Reader-method over the FILE_LAST_TOPIC constant. This one will determine
1288
+ # the path dynamically, whereas the constant above will be always static.
1289
+ # ========================================================================= #
1290
+ def self.last_topic?
1291
+ target_file = file_last_topic?
1292
+ if File.exist? target_file
1293
+ File.read(target_file).chomp
1294
+ else
1295
+ e "No file exists at #{sfile(target_file)}."
1296
+ end
1297
+ end
1298
+
1299
+ # ========================================================================= #
1300
+ # === Studium.file_last_topic?
1301
+ # ========================================================================= #
1302
+ def self.file_last_topic?
1303
+ "#{log_dir?}last_topic/last_topic.md"
1304
+ end
1305
+
1306
+ # ========================================================================= #
1307
+ # === Studium.file_statistics?
1308
+ # ========================================================================= #
1309
+ def self.file_statistics?
1310
+ "#{Studium.yaml_directory?}statistics.yml"
1311
+ end; self.instance_eval { alias file_statistics file_statistics? } # === Studium.file_statistics
1312
+
1313
+ # ========================================================================= #
1314
+ # === Studium.file_main_topic?
1315
+ # ========================================================================= #
1316
+ def self.file_main_topic?
1317
+ "#{yaml_directory?}main_topic/main_topic.yml"
1318
+ end; self.instance_eval { alias file_main_topic file_main_topic? } # === Studium.file_main_topic
1319
+
1320
+ # ========================================================================= #
1321
+ # === Studium.main_topic?
1322
+ #
1323
+ # This method will return the main topics (themes) that were assigned
1324
+ # manually - in other words, exam topics that were used.
1325
+ # ========================================================================= #
1326
+ def self.main_topic?(
1327
+ return_all_entries = false
1328
+ )
1329
+ require 'studium/requires/require_yaml.rb'
1330
+ case return_all_entries
1331
+ # ======================================================================= #
1332
+ # === :return_the_full_dataset
1333
+ # ======================================================================= #
1334
+ when :return_the_full_dataset
1335
+ return_all_entries = true
1336
+ end
1337
+ result = YAML.load_file(file_main_topic?)
1338
+ unless return_all_entries
1339
+ if result.is_a? Array
1340
+ result = result.first
1341
+ end
1342
+ end
1343
+ result
1344
+ end
1345
+
1346
+ # ========================================================================= #
1347
+ # Assign to @file_lecture_information once, initially.
1348
+ # ========================================================================= #
1349
+ set_file_lecture_information(:default)
1350
+
1351
+ # ========================================================================= #
1352
+ # === FILE_BACHELOR_ECOLOGY (ecology tag)
1353
+ # ========================================================================= #
1354
+ FILE_BACHELOR_ECOLOGY =
1355
+ "#{project_curricula_yaml_directory?}"\
1356
+ "bachelor/bachelor_biologie_ecology_033630.yml"
1357
+
1358
+ # ========================================================================= #
1359
+ # === FILE_MASTER_GENETIK_UND_ENTWICKLUNGSBIOLOGIE
1360
+ #
1361
+ # Has the number 066877.
1362
+ # ========================================================================= #
1363
+ FILE_MASTER_GENETIK_UND_ENTWICKLUNGSBIOLOGIE =
1364
+ "#{project_curricula_yaml_directory?}"\
1365
+ "master/master_genetik_und_entwicklungsbiologie_066877.yml"
1366
+ FILE_MASTER_GENETIK_UND_ENTWICKLUNGSBIOLOGIE_CURRICULUM = FILE_MASTER_GENETIK_UND_ENTWICKLUNGSBIOLOGIE
1367
+
1368
+ # ========================================================================= #
1369
+ # === Studium.file_master_bioinformatics_and_nanobiotechnology_in_molecular_medicine
1370
+ #
1371
+ # This is at the BOKU.
1372
+ # ========================================================================= #
1373
+ def self.file_master_bioinformatics_and_nanobiotechnology_in_molecular_medicine
1374
+ "#{project_curricula_yaml_directory?}individual/"\
1375
+ "master_bioinformatics_and_nanobiotechnology_in_molecular_medicine.yml"
1376
+ end
1377
+
1378
+ # ========================================================================= #
1379
+ # === FILE_MASTER_LMBT
1380
+ # ========================================================================= #
1381
+ FILE_MASTER_LMBT =
1382
+ "#{project_curricula_yaml_directory?}"\
1383
+ "master/master_lmbt_066418.yml"
1384
+ BOKU_MASTER_LMBT_CURRICULUM = FILE_MASTER_LMBT # === BOKU_MASTER_LMBT_CURRICULUM
1385
+ FILE_BOKU_MASTER_LMBT = FILE_MASTER_LMBT # === FILE_BOKU_MASTER_LMBT
1386
+ FILE_MASTER_LMBT_CURRICULUM = FILE_MASTER_LMBT # === FILE_MASTER_LMBT_CURRICULUM
1387
+
1388
+ # ========================================================================= #
1389
+ # === FILE_BACHELOR_BOKU_UBRM
1390
+ #
1391
+ # This is for the UBRM Bachelorcurriculum at the BOKU.
1392
+ # ========================================================================= #
1393
+ FILE_BACHELOR_BOKU_UBRM =
1394
+ "#{project_curricula_yaml_directory?}"\
1395
+ "bachelor/bachelor_ubrm_033227.yml"
1396
+ FILE_BACHELOR_UBRM = FILE_BACHELOR_BOKU_UBRM # === FILE_BACHELOR_UBRM
1397
+ FILE_BACHELOR_UBRM_CURRICULUM = FILE_BACHELOR_BOKU_UBRM # === FILE_BACHELOR_UBRM_CURRICULUM
1398
+
1399
+ # ========================================================================= #
1400
+ # === BOKU_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM
1401
+ #
1402
+ # This is the AW curriculum at the BOKU.
1403
+ # ========================================================================= #
1404
+ FILE_BOKU_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM =
1405
+ "#{project_curricula_yaml_directory?}"\
1406
+ "bachelor/bachelor_agrarwissenschaften_033255.yml"
1407
+ BOKU_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM = FILE_BOKU_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM # === BOKU_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM
1408
+ BOKU_BACHELOR_AW_CURRICULUM = FILE_BOKU_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM # === BOKU_BACHELOR_AW_CURRICULUM
1409
+ FILE_BACHELOR_AGRARWISSENSCHAFTEN = FILE_BOKU_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM # === FILE_BACHELOR_AGRARWISSENSCHAFTEN
1410
+ FILE_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM = FILE_BOKU_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM # === FILE_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM
1411
+
1412
+ # ========================================================================= #
1413
+ # === FILE_BACHELOR_INFORMATIK_CURRICULUM
1414
+ # ========================================================================= #
1415
+ FILE_BACHELOR_INFORMATIK_CURRICULUM =
1416
+ "#{project_curricula_yaml_directory?}"\
1417
+ "bachelor/bachelor_informatik_033521.yml"
1418
+
1419
+ # ========================================================================= #
1420
+ # === FILE_MASTER_BIOLOGISCHE_CHEMIE_CURRICULUM
1421
+ # ========================================================================= #
1422
+ FILE_MASTER_BIOLOGISCHE_CHEMIE_CURRICULUM =
1423
+ "#{project_curricula_yaml_directory?}"\
1424
+ "master/master_biologische_chemie_066863.yml"
1425
+
1426
+ # ========================================================================= #
1427
+ # === FILE_MASTER_PHARMAZIE
1428
+ #
1429
+ # This constant is for the master-curriculum pharmacy, at the
1430
+ # University of Vienna.
1431
+ # ========================================================================= #
1432
+ FILE_MASTER_PHARMAZIE =
1433
+ "#{project_curricula_yaml_directory?}"\
1434
+ "master/master_pharmazie_066605.yml"
1435
+ UNIWIEN_MASTER_PHARMAZIE = FILE_MASTER_PHARMAZIE # === UNIWIEN_MASTER_PHARMAZIE
1436
+ FILE_MASTER_PHARMAZIE_CURRICULUM = FILE_MASTER_PHARMAZIE # === FILE_MASTER_PHARMAZIE_CURRICULUM
1437
+
1438
+ # ========================================================================= #
1439
+ # === FILE_BACHELOR_CHEMIE_CURRICULUM
1440
+ # ========================================================================= #
1441
+ FILE_BACHELOR_CHEMIE_CURRICULUM =
1442
+ "#{project_curricula_yaml_directory?}"\
1443
+ "bachelor/bachelor_chemie_033662.yml"
1444
+ UNI_WIEN_BACHELOR_CHEMIE_CURRICULUM = FILE_BACHELOR_CHEMIE_CURRICULUM # === UNI_WIEN_BACHELOR_CHEMIE_CURRICULUM
1445
+ FILE_BACHELOR_UNI_WIEN_CHEMISTRY = FILE_BACHELOR_CHEMIE_CURRICULUM # === FILE_BACHELOR_UNI_WIEN_CHEMISTRY
1446
+ FILE_UNI_WIEN_BACHELOR_CHEMIE_CURRICULUM = FILE_BACHELOR_CHEMIE_CURRICULUM # === FILE_UNI_WIEN_BACHELOR_CHEMIE_CURRICULUM
1447
+
1448
+ # ========================================================================= #
1449
+ # === FILE_BACHELOR_PHARMAZIE
1450
+ # ========================================================================= #
1451
+ FILE_BACHELOR_PHARMAZIE =
1452
+ "#{project_curricula_yaml_directory?}"\
1453
+ "bachelor/bachelor_pharmazie_033305.yml"
1454
+ UNIWIEN_BACHELOR_PHARMAZIE = FILE_BACHELOR_PHARMAZIE # === UNIWIEN_BACHELOR_PHARMAZIE
1455
+ FILE_BACHELOR_PHARMAZIE_CURRICULUM = FILE_BACHELOR_PHARMAZIE # === FILE_BACHELOR_PHARMAZIE_CURRICULUM
1456
+
1457
+ # ========================================================================= #
1458
+ # === FILE_BACHELOR_GENETIK
1459
+ #
1460
+ # This constant has a few "aliases".
1461
+ # ========================================================================= #
1462
+ FILE_BACHELOR_GENETIK =
1463
+ "#{project_curricula_yaml_directory?}"\
1464
+ "bachelor/bachelor_biologie_mikrobiologie_und_genetik_033630.yml"
1465
+ UNIWIEN_BACHELOR_MIKROBIOLOGIE_UND_GENETIK_BIOLOGIE = FILE_BACHELOR_GENETIK
1466
+ FILE_BACHELOR_BIOLOGIE_MIKROBIOLOGIE_UND_GENETIK = FILE_BACHELOR_GENETIK
1467
+
1468
+ # ========================================================================= #
1469
+ # === FILE_TUWIEN_MASTER_BIOTECHNOLOGY_CURRICULUM
1470
+ # ========================================================================= #
1471
+ FILE_TUWIEN_MASTER_BIOTECHNOLOGY_CURRICULUM =
1472
+ "#{project_curricula_yaml_directory?}"\
1473
+ "master/master_technische_chemie_066490.yml"
1474
+ TUWIEN_MASTER_BIOTECHNOLOGY = FILE_TUWIEN_MASTER_BIOTECHNOLOGY_CURRICULUM
1475
+ FILE_MASTER_TUVIENNA_BIOTECHNOLOGY = FILE_TUWIEN_MASTER_BIOTECHNOLOGY_CURRICULUM
1476
+
1477
+ # ========================================================================= #
1478
+ # === FILE_UNIWIEN_BACHELOR_BASISBLOCK_BIOLOGIE
1479
+ # ========================================================================= #
1480
+ FILE_UNIWIEN_BACHELOR_BASISBLOCK_BIOLOGIE =
1481
+ "#{project_curricula_yaml_directory?}"\
1482
+ "bachelor/bachelor_biologie_basisblock_033630.yml"
1483
+ UNIWIEN_BACHELOR_BASISBLOCK_BIOLOGIE = FILE_UNIWIEN_BACHELOR_BASISBLOCK_BIOLOGIE
1484
+ FILE_BACHELOR_BIOLOGIE_BASISBLOCK = FILE_UNIWIEN_BACHELOR_BASISBLOCK_BIOLOGIE
1485
+
1486
+ # ========================================================================= #
1487
+ # === FILE_BACHELOR_VECTOR_BASED_STRATEGIES (vector tag, vektor tag)
1488
+ #
1489
+ # This is the bachelor-curriculum uniting Vektoren, Biotechnology
1490
+ # and Bioinformatics. It is the main entry point.
1491
+ # ========================================================================= #
1492
+ FILE_BACHELOR_VECTOR_BASED_STRATEGIES =
1493
+ "#{project_curricula_yaml_directory?}individual/"\
1494
+ "bachelor_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology"\
1495
+ ".yml"
1496
+ BACHELOR_MOLEKULARSIMULATORISCHE_VEKTOREN = FILE_BACHELOR_VECTOR_BASED_STRATEGIES # === BACHELOR_MOLEKULARSIMULATORISCHE_VEKTOREN
1497
+ FILE_BACHELOR_VECTOR = FILE_BACHELOR_VECTOR_BASED_STRATEGIES # === FILE_BACHELOR_VECTOR
1498
+ FILE_BACHELOR_VEKTORSYSTEME = FILE_BACHELOR_VECTOR_BASED_STRATEGIES # === FILE_BACHELOR_VEKTORSYSTEME
1499
+ FILE_BACHELOR_MOLEKULARSIMULATORISCHE_VEKTOREN = FILE_BACHELOR_VECTOR_BASED_STRATEGIES # === FILE_BACHELOR_MOLEKULARSIMULATORISCHE_VEKTOREN
1500
+ FILE_BACHELOR = FILE_BACHELOR_VECTOR_BASED_STRATEGIES # === FILE_BACHELOR
1501
+ FILE_INDIVIDUAL_BACHELOR_CURRICULUM = FILE_BACHELOR_VECTOR_BASED_STRATEGIES # === FILE_INDIVIDUAL_BACHELOR_CURRICULUM
1502
+ FILE_BACHELOR_VEKTOR_CURRICULUM = FILE_BACHELOR_VECTOR_BASED_STRATEGIES # === FILE_BACHELOR_VEKTOR_CURRICULUM
1503
+
1504
+ # ========================================================================= #
1505
+ # === FILE_MASTER_VEKTORX
1506
+ #
1507
+ # This is for the individual master-curriculum, vektorx, at the
1508
+ # University of Vienna.
1509
+ # ========================================================================= #
1510
+ FILE_MASTER_VEKTORX =
1511
+ "#{project_curricula_yaml_directory?}individual/"\
1512
+ "master_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology"\
1513
+ ".yml"
1514
+ FILE_MASTER_MOLEKULARSIMULATORISCHE_VEKTOREN = FILE_MASTER_VEKTORX # === FILE_MASTER_MOLEKULARSIMULATORISCHE_VEKTOREN
1515
+ MASTER_MOLEKULARSIMULATORISCHE_VEKTOREN = FILE_MASTER_VEKTORX # === MASTER_MOLEKULARSIMULATORISCHE_VEKTOREN
1516
+ FILE_MASTER_VECTOR = FILE_MASTER_VEKTORX # === FILE_MASTER_VECTOR
1517
+ FILE_MASTER_VEKTORSYSTEME = FILE_MASTER_VEKTORX # === FILE_MASTER_VEKTORSYSTEME
1518
+
1519
+ # ========================================================================= #
1520
+ # === FILE_BACHELOR_BOKU_KTWW_CURRICULUM
1521
+ # ========================================================================= #
1522
+ FILE_BACHELOR_BOKU_KTWW_CURRICULUM =
1523
+ "#{project_curricula_yaml_directory?}"\
1524
+ "bachelor/bachelor_ktww_033231.yml"
1525
+
1526
+ # ========================================================================= #
1527
+ # === FILE_BACHELOR_DUMMY_CURRICULUM
1528
+ # ========================================================================= #
1529
+ FILE_BACHELOR_DUMMY_CURRICULUM =
1530
+ "#{project_curricula_yaml_directory?}"\
1531
+ "bachelor/bachelor_dummy_curriculum.yml"
1532
+
1533
+ # ========================================================================= #
1534
+ # === FILE_MASTER_DUMMY_CURRICULUM
1535
+ # ========================================================================= #
1536
+ FILE_MASTER_DUMMY_CURRICULUM =
1537
+ "#{project_curricula_yaml_directory?}"\
1538
+ "master_dummy_curriculum.yml"
1539
+
1540
+ # ========================================================================= #
1541
+ # === FILE_MASTER_BIOINFORMATICS_AND_MOLECULAR_BIOTECHNOLOGY
1542
+ # ========================================================================= #
1543
+ FILE_MASTER_BIOINFORMATICS_AND_MOLECULAR_BIOTECHNOLOGY =
1544
+ "#{project_curricula_yaml_directory?}individual/"\
1545
+ "master_bioinformatics_and_molecular_biotechnology_including_aspects_from_molecular_medicine.yml"
1546
+
1547
+ # ========================================================================= #
1548
+ # === FILE_BACHELOR_TUWIEN_WIRTSCHAFTSINFORMATIK_CURRICULUM
1549
+ # ========================================================================= #
1550
+ FILE_BACHELOR_TUWIEN_WIRTSCHAFTSINFORMATIK_CURRICULUM =
1551
+ "#{project_curricula_yaml_directory?}"\
1552
+ "bachelor/bachelor_wirtschaftsinformatik_033526.yml"
1553
+
1554
+ # ========================================================================= #
1555
+ # === FILE_BACHELOR_BIOINFORMATIK_UND_MOLEKULARE_BIOTECHNOLOGIE_UNTER_BERÜCKSICHTIGUNG_MEDIZINISCH_IMMUNOLOGISCHER_ASPEKTE_CURRICULUM
1556
+ #
1557
+ # This is for the individual curriculum at the BOKU, at the bachelor level.
1558
+ #
1559
+ # This was deprecated as of June 2022.
1560
+ # ========================================================================= #
1561
+ # FILE_BACHELOR_BIOINFORMATIK_UND_MOLEKULARE_BIOTECHNOLOGIE_UNTER_BERÜCKSICHTIGUNG_MEDIZINISCH_IMMUNOLOGISCHER_ASPEKTE_CURRICULUM =
1562
+
1563
+ # ========================================================================= #
1564
+ # === FILE_BACHELOR_INFORMATIK_UND_BIOTECHNOLOGIE_UNTER_BERÜCKSICHTIGUNG_IMMUNANALYTISCH_MOLEKULARMEDIZINISCHER_ASPEKTE
1565
+ # ========================================================================= #
1566
+ FILE_BACHELOR_INFORMATIK_UND_BIOTECHNOLOGIE_UNTER_BERÜCKSICHTIGUNG_IMMUNANALYTISCH_MOLEKULARMEDIZINISCHER_ASPEKTE =
1567
+ "#{project_curricula_yaml_directory?}individual/"\
1568
+ "bachelor_informatik_und_biotechnologie_unter_berücksichtigung_immunanalytisch_molekularmedizinischer_aspekte.yml"
1569
+
1570
+ # ========================================================================= #
1571
+ # === Studium.file_indi2
1572
+ # ========================================================================= #
1573
+ def self.file_indi2
1574
+ FILE_BACHELOR_INFORMATIK_UND_BIOTECHNOLOGIE_UNTER_BERÜCKSICHTIGUNG_IMMUNANALYTISCH_MOLEKULARMEDIZINISCHER_ASPEKTE
1575
+ end
1576
+
1577
+ # ========================================================================= #
1578
+ # === FILE_BACHELOR_INFORMATIK_UND_MOLEKULARE_BIOLOGIE
1579
+ #
1580
+ # This is for the (individual) curriculum at the TU Vienna.
1581
+ #
1582
+ # This constant is mildly deprecated since as of December 2022. Use
1583
+ # the method instead.
1584
+ # ========================================================================= #
1585
+ FILE_BACHELOR_INFORMATIK_UND_MOLEKULARE_BIOLOGIE =
1586
+ "#{project_curricula_yaml_directory?}individual/"\
1587
+ "bachelor_informatik_und_molekulare_biologie.yml"
1588
+
1589
+ # ========================================================================= #
1590
+ # === Studium.file_bachelor_informatik_und_molekulare_biologie
1591
+ # ========================================================================= #
1592
+ def self.file_bachelor_informatik_und_molekulare_biologie
1593
+ "#{project_curricula_yaml_directory?}individual/"\
1594
+ "bachelor_informatik_und_molekulare_biologie.yml"
1595
+ end
1596
+
1597
+ # ========================================================================= #
1598
+ # === FILE_BACHELOR_TUWIEN_ELEKTROTECHNIK_UND_INFORMATIONSTECHNIK_CURRICULUM
1599
+ # ========================================================================= #
1600
+ FILE_BACHELOR_TUWIEN_ELEKTROTECHNIK_UND_INFORMATIONSTECHNIK_CURRICULUM =
1601
+ "#{project_curricula_yaml_directory?}"\
1602
+ "bachelor/bachelor_elektrotechnik_und_informationstechnik_033235.yml"
1603
+
1604
+ # ========================================================================= #
1605
+ # === FILE_BACHELOR_FORSTWIRTSCHAFT_CURRICULUM
1606
+ # ========================================================================= #
1607
+ FILE_BACHELOR_FORSTWIRTSCHAFT_CURRICULUM =
1608
+ "#{project_curricula_yaml_directory?}"\
1609
+ "bachelor/bachelor_forstwirtschaft_033225.yml"
1610
+
1611
+ # ========================================================================= #
1612
+ # === ARRAY_REGISTERED_CURRICULA_FILES
1613
+ #
1614
+ # This should be determined automatically.
1615
+ # ========================================================================= #
1616
+ ARRAY_REGISTERED_CURRICULA_FILES = [
1617
+ FILE_BACHELOR_MASTER_BOKU_MOLEKULARE_BIOTECHNOLOGIE_UND_BIOINFORMATIK,
1618
+ FILE_BACHELOR_BOKU_INDIVIDUELLES_CURRICULUM_BIOINFORMATIK_UND_BIOANALYTIK,
1619
+ FILE_MASTER_BOKU_INDIVIDUELLES_CURRICULUM_BIOINFORMATIK_UND_BIOANALYTIK,
1620
+ FILE_BACHELOR_MASTER_TU_WIEN_INDIVIDUELLES_STUDIUM,
1621
+ FILE_BACHELOR_MOLEKULARE_BIOLOGIE,
1622
+ FILE_MASTER_MOLEKULARE_BIOLOGIE,
1623
+ FILE_MASTER_IMMUNBIOLOGIE,
1624
+ FILE_BACHELOR_LMBT,
1625
+ FILE_BACHELOR_BOTANIK,
1626
+ FILE_UNIWIEN_MASTER_BIOINFORMATIK_CURRICULUM,
1627
+ FILE_BACHELOR_MEDIZINISCHE_INFORMATIK_CURRICULUM,
1628
+ FILE_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN,
1629
+ FILE_BACHELOR_ECOLOGY,
1630
+ FILE_MASTER_GENETIK_UND_ENTWICKLUNGSBIOLOGIE,
1631
+ FILE_MASTER_LMBT,
1632
+ FILE_BACHELOR_BOKU_UBRM,
1633
+ FILE_BOKU_BACHELOR_AGRARWISSENSCHAFTEN_CURRICULUM,
1634
+ FILE_BACHELOR_INFORMATIK_CURRICULUM,
1635
+ FILE_MASTER_BIOLOGISCHE_CHEMIE_CURRICULUM,
1636
+ FILE_MASTER_PHARMAZIE,
1637
+ FILE_BACHELOR_CHEMIE_CURRICULUM,
1638
+ FILE_BACHELOR_PHARMAZIE,
1639
+ FILE_BACHELOR_GENETIK,
1640
+ FILE_TUWIEN_MASTER_BIOTECHNOLOGY_CURRICULUM,
1641
+ FILE_BACHELOR_TECHNISCHE_CHEMIE_CURRICULUM,
1642
+ FILE_BACHELOR_VERFAHRENSTECHNIK_CURRICULUM,
1643
+ FILE_BACHELOR_MOLEKULARBIOLOGIE_GRAZ_CURRICULUM,
1644
+ FILE_BACHELOR_VECTOR_BASED_STRATEGIES,
1645
+ FILE_MASTER_VEKTORX,
1646
+ FILE_BACHELOR_BOKU_KTWW_CURRICULUM,
1647
+ FILE_MASTER_BIOINFORMATICS_AND_MOLECULAR_BIOTECHNOLOGY,
1648
+ FILE_BACHELOR_TUWIEN_WIRTSCHAFTSINFORMATIK_CURRICULUM,
1649
+ FILE_BACHELOR_INFORMATIK_UND_BIOTECHNOLOGIE_UNTER_BERÜCKSICHTIGUNG_IMMUNANALYTISCH_MOLEKULARMEDIZINISCHER_ASPEKTE,
1650
+ FILE_BACHELOR_INFORMATIK_UND_MOLEKULARE_BIOLOGIE,
1651
+ FILE_BACHELOR_TUWIEN_ELEKTROTECHNIK_UND_INFORMATIONSTECHNIK_CURRICULUM,
1652
+ FILE_BACHELOR_FORSTWIRTSCHAFT_CURRICULUM
1653
+ ]
1654
+
1655
+ # ========================================================================= #
1656
+ # === Studium.file_curricula
1657
+ #
1658
+ # This would expand to the location:
1659
+ #
1660
+ # /Programs/Ruby/2.5.0/lib/ruby/site_ruby/2.5.0/studium/yaml/curricula.yml
1661
+ #
1662
+ # on my system.
1663
+ # ========================================================================= #
1664
+ def self.file_curricula
1665
+ "#{yaml_directory?}curricula.yml"
1666
+ end
1667
+
1668
+ # ========================================================================= #
1669
+ # === Studium.file_for_exam_questions
1670
+ #
1671
+ # Easier module-method to query where the exam questions are stored.
1672
+ #
1673
+ # This may give a result such as:
1674
+ #
1675
+ # /Programs/Ruby/2.4.1/lib/ruby/site_ruby/2.4.0/studium/yaml/file_for_exam_questions.yml
1676
+ #
1677
+ # ========================================================================= #
1678
+ def self.file_for_exam_questions
1679
+ "#{yaml_directory?}file_for_last_exam_question.yml"
1680
+ end
1681
+
1682
+ # ========================================================================= #
1683
+ # === Studium.file_current_exams
1684
+ #
1685
+ # Feedback for the current-exams file, via this method.
1686
+ #
1687
+ # Where all current exams are kept.
1688
+ #
1689
+ # If the environment has a value defined for STUDIUM_YAML then we will
1690
+ # use that. Otherwise, we will simply hardcode to the absolute path.
1691
+ # ========================================================================= #
1692
+ def self.file_current_exams
1693
+ "#{project_yaml_directory?}current_exams.yml"
1694
+ end; self.instance_eval { alias current_exams file_current_exams } # === Studium.current_exams
1695
+
1696
+ # ========================================================================= #
1697
+ # === FILE_EXAMS
1698
+ #
1699
+ # The path to my exams-file. You could in principle modify this if
1700
+ # you want to use your own exams file.
1701
+ #
1702
+ # On my home system, this constant will point at:
1703
+ #
1704
+ # /home/x/STUDIUM/YAML/exams.yml
1705
+ #
1706
+ # ========================================================================= #
1707
+ FILE_EXAMS = "#{Studium.yaml_dir?}exams.yml"
1708
+ ALL_EXAMS_FILE = FILE_EXAMS # === ALL_EXAMS_FILE
1709
+
1710
+ # ========================================================================= #
1711
+ # === @file_exams
1712
+ # ========================================================================= #
1713
+ @file_exams = FILE_EXAMS
1714
+
1715
+ # ========================================================================= #
1716
+ # === Studium.file_exams?
1717
+ # ========================================================================= #
1718
+ def self.file_exams?
1719
+ @file_exams
1720
+ end
1721
+
1722
+ # ========================================================================= #
1723
+ # === Studium.set_file_exams
1724
+ #
1725
+ # This setter allows you to use another exams-file, other than 'exams.yml'.
1726
+ # ========================================================================= #
1727
+ def self.set_file_exams(i = FILE_EXAMS)
1728
+ @file_exams = i
1729
+ end
1730
+
1731
+ module WebConstants # === Studium::WebConstants
1732
+
1733
+ # ========================================================================= #
1734
+ # === Studium::WebConstants::TIMETABLE_DIV
1735
+ # ========================================================================= #
1736
+ TIMETABLE_DIV =
1737
+ '<div style="font-family: monospace; '\
1738
+ 'padding:0.25em; '\
1739
+ 'border: 4px dotted slateblue; '\
1740
+ 'margin-bottom: 1.75em;">'
1741
+
1742
+ # ========================================================================= #
1743
+ # === BR
1744
+ #
1745
+ # This simply refers to <br> aka the breakline tag.
1746
+ # ========================================================================= #
1747
+ BR = '<br>'
1748
+
1749
+ end # end Studium::WebConstants
1750
+
1751
+ if Object.const_defined?(:HtmlTags) and self.respond_to?(:img)
1752
+
1753
+ # ======================================================================= #
1754
+ # === Studium.return_logo_for_this_university
1755
+ #
1756
+ # The logos have to be generated dynamically here, as we will
1757
+ # use them via a height and weight setting.
1758
+ # ======================================================================= #
1759
+ def self.return_logo_for_this_university(
1760
+ i = :uniwien
1761
+ )
1762
+ unless @use_this_css_style_for_the_logo_images.include? 'width'
1763
+ if @use_this_css_style_for_the_logo_images.frozen?
1764
+ @use_this_css_style_for_the_logo_images = @use_this_css_style_for_the_logo_images.dup
1765
+ end
1766
+ @use_this_css_style_for_the_logo_images << 'width: 65px'
1767
+ end
1768
+ i = i.to_sym if i.is_a? String # We need a Symbol past this point.
1769
+ case i
1770
+ # ======================================================================= #
1771
+ # === :vetmed
1772
+ # ======================================================================= #
1773
+ when :Vetmed,
1774
+ :vetmed
1775
+ return_vetmed_logo_image
1776
+ # ======================================================================= #
1777
+ # === :boku
1778
+ # ======================================================================= #
1779
+ when :boku,
1780
+ :Boku,
1781
+ :BOKU
1782
+ return_boku_logo_image
1783
+ # ======================================================================= #
1784
+ # === :uniwien
1785
+ # ======================================================================= #
1786
+ when :uniwien,
1787
+ :UniWien,
1788
+ :'Uni Wien'
1789
+ return_university_of_vienna_logo_image
1790
+ # ======================================================================= #
1791
+ # === :tu
1792
+ # ======================================================================= #
1793
+ when :tu,
1794
+ :tuwien,
1795
+ :TUVienna,
1796
+ :'TU Vienna'
1797
+ return_tu_vienna_logo_image
1798
+ else
1799
+ i # else return it unmodified.
1800
+ end
1801
+ end
1802
+
1803
+ # ======================================================================= #
1804
+ # === Studium.return_vetmed_logo_image
1805
+ # ======================================================================= #
1806
+ def self.return_vetmed_logo_image
1807
+ img(
1808
+ path_to_the_vetmed_logo_image?,
1809
+ css_style: @use_this_css_style_for_the_logo_images
1810
+ )
1811
+ end
1812
+
1813
+ # ======================================================================= #
1814
+ # === Studium.return_meduni_logo_image
1815
+ # ======================================================================= #
1816
+ def self.return_meduni_logo_image
1817
+ img(
1818
+ path_to_the_meduni_logo_image?,
1819
+ css_style: @use_this_css_style_for_the_logo_images
1820
+ )
1821
+ end
1822
+
1823
+ # ======================================================================= #
1824
+ # === Studium.return_boku_logo_image
1825
+ # ======================================================================= #
1826
+ def self.return_boku_logo_image
1827
+ img(
1828
+ path_to_the_boku_logo_image?,
1829
+ css_style: @use_this_css_style_for_the_logo_images
1830
+ )
1831
+ end
1832
+
1833
+ # ======================================================================= #
1834
+ # === Studium::BACHELOR_IMAGE
1835
+ # ======================================================================= #
1836
+ BACHELOR_IMAGE = img(
1837
+ "#{IMG_DIRECTORY}studium/BACHELOR.png",
1838
+ css_style: 'margin-left:6px'
1839
+ )
1840
+
1841
+ # ======================================================================= #
1842
+ # === Studium::MASTER_IMAGE
1843
+ # ======================================================================= #
1844
+ MASTER_IMAGE = img(
1845
+ "#{IMG_DIRECTORY}studium/MASTER.png",
1846
+ css_style: 'margin-left:6px'
1847
+ )
1848
+
1849
+ # ======================================================================= #
1850
+ # === Studium::MEDUNI_LOGO_IMAGE.png
1851
+ #
1852
+ # Is presently a default of 30px height size.
1853
+ # ======================================================================= #
1854
+ MEDUNI_LOGO_IMAGE = return_meduni_logo_image
1855
+
1856
+ # ======================================================================= #
1857
+ # === VETMED_LOGO_IMAGE.png
1858
+ #
1859
+ # Is presently a default of 30px height size.
1860
+ # ======================================================================= #
1861
+ VETMED_LOGO_IMAGE = return_vetmed_logo_image
1862
+
1863
+ # ======================================================================= #
1864
+ # === PRACTICAL_COURSE_IMAGE
1865
+ # ======================================================================= #
1866
+ PRACTICAL_COURSE_IMAGE = img(
1867
+ "#{IMG_DIRECTORY}studium/PRACTICAL_COURSE.png",
1868
+ css_style: 'margin-left:6px'
1869
+ )
1870
+
1871
+ # ======================================================================= #
1872
+ # === UNIVERSITY_OF_GRAZ_LOGO_IMAGE
1873
+ # ======================================================================= #
1874
+ UNIVERSITY_OF_GRAZ_LOGO_IMAGE = img(
1875
+ "#{IMG_DIRECTORY}studium/UNIVERSITY_OF_GRAZ_LOGO_IMAGE.png",
1876
+ css_style: @use_this_css_style_for_the_logo_images
1877
+ )
1878
+
1879
+ # ======================================================================= #
1880
+ # === STEOP_PICTURE
1881
+ # ======================================================================= #
1882
+ STEOP_PICTURE = img(
1883
+ "#{IMG_DIRECTORY}universities/STEOP.png",
1884
+ css_style: @use_this_css_style_for_the_logo_images
1885
+ )
1886
+
1887
+ # ======================================================================= #
1888
+ # === Studium.relative_steop_picture
1889
+ # ======================================================================= #
1890
+ def self.relative_steop_picture(
1891
+ i = '../../'
1892
+ )
1893
+ img(
1894
+ "#{IMG_DIRECTORY.sub(/\/home\/x\//, i)}universities/STEOP.png",
1895
+ css_style: @use_this_css_style_for_the_logo_images
1896
+ )
1897
+ end
1898
+
1899
+ # ======================================================================= #
1900
+ # === Studium::BOKU_VIENNA_LOGO_IMAGE
1901
+ #
1902
+ # Is presently a default of 30px height size.
1903
+ # ======================================================================= #
1904
+ BOKU_VIENNA_LOGO_IMAGE = return_boku_logo_image
1905
+
1906
+ # ======================================================================= #
1907
+ # === Studium.return_university_of_vienna_logo_image
1908
+ # ======================================================================= #
1909
+ def self.return_university_of_vienna_logo_image
1910
+ img(
1911
+ path_to_the_university_of_vienna_logo_image?,
1912
+ css_style: @use_this_css_style_for_the_logo_images
1913
+ )
1914
+ end
1915
+
1916
+ # ======================================================================= #
1917
+ # === UNIVERSITY_OF_VIENNA_LOGO_IMAGE
1918
+ #
1919
+ # Is presently a default of 30px height size.
1920
+ # ======================================================================= #
1921
+ UNIVERSITY_OF_VIENNA_LOGO_IMAGE = return_university_of_vienna_logo_image
1922
+
1923
+ # ======================================================================= #
1924
+ # === Studium.return_tu_vienna_logo_image
1925
+ # ======================================================================= #
1926
+ def self.return_tu_vienna_logo_image
1927
+ img(
1928
+ path_to_the_tu_vienna_logo_image?,
1929
+ css_style: @use_this_css_style_for_the_logo_images
1930
+ )
1931
+ end
1932
+
1933
+ # ======================================================================= #
1934
+ # === TU_VIENNA_LOGO_IMAGE
1935
+ #
1936
+ # Is presently a default of 30px height size.
1937
+ # ======================================================================= #
1938
+ TU_VIENNA_LOGO_IMAGE = return_tu_vienna_logo_image
1939
+
1940
+ end
1941
+
1942
+ # ========================================================================= #
1943
+ # === REGEX_FOR_PWD_STUD
1944
+ #
1945
+ # This is the regex that will extract the proper pwdstud entry from
1946
+ # the file cd_aliases.yml.
1947
+ # ========================================================================= #
1948
+ REGEX_FOR_PWD_STUD =
1949
+ /^pwdstud\d{1}.+$/
1950
+
1951
+ # ========================================================================= #
1952
+ # === REGEX_FOR_BOKU_EXAMS
1953
+ # ========================================================================= #
1954
+ REGEX_FOR_BOKU_EXAMS =
1955
+ /pStpSpNr=(\d+)/
1956
+
1957
+ # ========================================================================= #
1958
+ # === REGEX_FOR_OPENING_AND_CLOSING_COLOUR_TAGS
1959
+ #
1960
+ # See: https://rubular.com/r/s8ur8ca1XjLXlg
1961
+ # ========================================================================= #
1962
+ REGEX_FOR_OPENING_AND_CLOSING_COLOUR_TAGS =
1963
+ /<[\/()a-zA-Z]+?>/
1964
+
1965
+ # ========================================================================= #
1966
+ # The regexes that are defined next are all for the file called
1967
+ # "sanitize_lecture_information.rb"
1968
+ # ========================================================================= #
1969
+
1970
+ # ========================================================================= #
1971
+ # === REGEX_FOR_ORT
1972
+ #
1973
+ # This is for the "Ort:" entry of courses.
1974
+ # ========================================================================= #
1975
+ REGEX_FOR_ORT = /" # Ort: /
1976
+
1977
+ # ========================================================================= #
1978
+ # === Studium::TU_WIEN_N_ECTS_REGEX
1979
+ #
1980
+ # This regex can be used to determine the amount of ECTS points from
1981
+ # TU Wien-lectures.
1982
+ #
1983
+ # Also see:
1984
+ #
1985
+ # https://rubular.com/r/FVq4plPrTR
1986
+ #
1987
+ # ========================================================================= #
1988
+ TU_WIEN_N_ECTS_REGEX =
1989
+ /<li>ECTS: (\d+\.\d+)\s+<\/li>/
1990
+
1991
+ end
1992
+
1993
+ if __FILE__ == $PROGRAM_NAME
1994
+ alias e puts
1995
+ require 'colours/autoinclude'
1996
+ require 'colours/autogenerated/html_colours_methods.rb'
1997
+ include Studium
1998
+ pp Studium.return_registered_standalone_curricula
1999
+ pp FILE_BACHELOR_MOLEKULARBIOLOGIE_GRAZ_CURRICULUM
2000
+ e Studium.yaml_dir?
2001
+ e Studium::FILE_DEFAULT_DELAY
2002
+ e 'File n-total questions: '+FILE_N_TOTAL_QUESTIONS
2003
+ e 'File holidays: '+Studium.file_holidays
2004
+ e 'Studium.yaml_dir?: '+Studium.yaml_dir?
2005
+ e Studium::ROEBE_BOKU_WIEN_YAML
2006
+ e rev+'The main topic is: '+sfancy(Studium.main_topic?)
2007
+ e rev+'The list of past exams on my home system are kept here: '+
2008
+ sfile(Studium.file_exams?)
2009
+ e Studium::ONE_MINUTE
2010
+ e SIX_DAYS
2011
+ e Studium::MAKE_USE_OF_UNICODE_SYMBOLS_WHENEVER_POSSIBLE
2012
+ e Studium::USE_THIS_EDITOR
2013
+ e Studium.file_last_question_asked?
2014
+ e RUBY_SRC_DIR
2015
+ e Studium.ruby_src_dir_at_home?
2016
+ e Studium.studium_at_home_dir?
2017
+ e Studium::ROEBE_BOKU_WIEN_YAML
2018
+ e Studium::ROEBE_UNI_WIEN
2019
+ e Studium::ROEBE_UNI_WIEN_YAML
2020
+ e Studium::ROEBE_TU_WIEN_YAML
2021
+ e 'The file important_exams.yml can be found at '+
2022
+ sfancy(Studium.file_important_exams?)
2023
+ e
2024
+ e 'All german weekdays are as follows:'
2025
+ e
2026
+ pp Studium::ARRAY_GERMAN_WEEKDAYS
2027
+ e
2028
+ e 'Studium.file_curricula '+Colours.steelblue(Studium.file_curricula)
2029
+ e
2030
+ e Colours.steelblue(Studium.file_mitteilungsblätter)
2031
+ e
2032
+ e 'Studium.file_directory_to_the_exam_topics: '+
2033
+ Colours.steelblue(Studium.file_directory_to_the_exam_topics)
2034
+ e
2035
+ e 'The exam topics directory is kept at: '+
2036
+ sfancy(Studium.exam_topics_directory?)
2037
+ e
2038
+ e Studium.directory_to_the_exam_topics?
2039
+ # require 'studium/toplevel_methods/find_exam_topic_and_exam_title.rb'
2040
+ e 'Studium.file_passed_exams_per_month: '+
2041
+ Studium.file_passed_exams_per_month
2042
+ e
2043
+ e 'Directory to the exam topics: '+Studium.directory_to_the_exam_topics?
2044
+ e 'Exam topics directory: '+Studium.my_exam_topics_directory?
2045
+ e
2046
+ # The following two constants only work in web-mode for the time being.
2047
+ # e Studium::MASTER_IMAGE
2048
+ # e Studium::TU_VIENNA_LOGO_IMAGE
2049
+ e
2050
+ e Studium.unicode_horizontal_bar*80
2051
+ e
2052
+ e ' ROEBE_STUDIUM_DIR: '+ROEBE_STUDIUM_DIR
2053
+ e ' RUBY_STUDIUM_HOME_DIR: '+RUBY_STUDIUM_HOME_DIR
2054
+ e ' EXAMS_RESULT: '+EXAMS_RESULT
2055
+ e ' ROEBE_UNI_WIEN_YAML: '+ROEBE_UNI_WIEN_YAML
2056
+ e ' SCI: '+SCI
2057
+ e ' FILE_PASSED_EXAMS_PER_MONTH: '+Studium.file_passed_exams_per_month
2058
+ e
2059
+ e Studium.unicode_horizontal_bar*80
2060
+ e
2061
+ end # returnlocationtothisexamtopic
2062
+ # returnlocationtothisexamtopic yeast
2063
+ # constants.rb