studium 0.13.1

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

Potentially problematic release.


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

Files changed (871) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +2785 -0
  3. data/bin/ask_exam_question +7 -0
  4. data/bin/check_description_of_these_lectures +7 -0
  5. data/bin/curriculum_module_displayer +7 -0
  6. data/bin/cycle +7 -0
  7. data/bin/d10 +7 -0
  8. data/bin/d100 +7 -0
  9. data/bin/d15 +7 -0
  10. data/bin/d20 +7 -0
  11. data/bin/d25 +7 -0
  12. data/bin/d3 +7 -0
  13. data/bin/d30 +7 -0
  14. data/bin/d5 +7 -0
  15. data/bin/determine_curricula +7 -0
  16. data/bin/display_lecture_url +7 -0
  17. data/bin/exam_registration_at +7 -0
  18. data/bin/exam_statistics +7 -0
  19. data/bin/exams_per_month +9 -0
  20. data/bin/finished_exams_at_this_university +7 -0
  21. data/bin/flashcards +7 -0
  22. data/bin/from_curriculum_id_to_university +9 -0
  23. data/bin/location_to_this_exam_topic.rb +7 -0
  24. data/bin/mandatory_continuous_assessment +7 -0
  25. data/bin/mandatory_upcoming_courses +7 -0
  26. data/bin/n_ECTS +7 -0
  27. data/bin/n_exam_questions_already_answered +16 -0
  28. data/bin/nquestions +7 -0
  29. data/bin/nsolved +7 -0
  30. data/bin/open_last_exam_question_asked_file +7 -0
  31. data/bin/passed_exams +7 -0
  32. data/bin/passed_pr/303/274fungsimmanente_courses +7 -0
  33. data/bin/pdf_for +7 -0
  34. data/bin/random_exam_topic +7 -0
  35. data/bin/report_solved_topics +7 -0
  36. data/bin/return_n_ects_from_this_file +7 -0
  37. data/bin/search_for_n_ects +7 -0
  38. data/bin/show_lectures_on_the_commandline +7 -0
  39. data/bin/show_themes +7 -0
  40. data/bin/solved +9 -0
  41. data/bin/solved_ects +7 -0
  42. data/bin/studienkennzahl +7 -0
  43. data/bin/studium +7 -0
  44. data/bin/studium_skeleton +7 -0
  45. data/bin/ufind +7 -0
  46. data/bin/upcoming_exams +7 -0
  47. data/bin/week_parser +7 -0
  48. data/doc/ECTS_CONSIDERATIONS.md +81 -0
  49. data/doc/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER.md +44 -0
  50. data/doc/README.gen +2742 -0
  51. data/doc/SQL_database_specification.md +46 -0
  52. data/doc/deprecated_components.md +24 -0
  53. data/doc/documentation_for_the_file_lecture_information.md +311 -0
  54. data/doc/elegant_colours.md +21 -0
  55. data/doc/todo/TODO_FOR_STUDIUM_GEM.md +112 -0
  56. data/doc/todo/TODO_FOR_THE_GRAPHICAL_PARTS_OF_THE_STUDIUM_GEM_INCLUDING_WWW_RELATED_ASPECTS.md +35 -0
  57. data/img/STUDIES.png +0 -0
  58. data/lib/studium/autoinclude.rb +7 -0
  59. data/lib/studium/base/base.rb +2710 -0
  60. data/lib/studium/base/prototype.rb +543 -0
  61. data/lib/studium/c/README.md +2 -0
  62. data/lib/studium/c/a.out +0 -0
  63. data/lib/studium/c/obtain_random_entry.c +11 -0
  64. data/lib/studium/check_and_sanitize/README.md +11 -0
  65. data/lib/studium/check_and_sanitize/check_curriculum_for_correct_separation_of_bachelor_and_master.rb +141 -0
  66. data/lib/studium/check_and_sanitize/check_for_all_exam_topics_being_registered.rb +110 -0
  67. data/lib/studium/check_and_sanitize/check_for_correct_themes_of_each_course.rb +90 -0
  68. data/lib/studium/check_and_sanitize/check_for_existing_description_of_this_lecture.rb +189 -0
  69. data/lib/studium/check_and_sanitize/check_the_lecture_information_file.rb +163 -0
  70. data/lib/studium/check_and_sanitize/find_duplicate_lectures.rb +115 -0
  71. data/lib/studium/check_and_sanitize/missing_priority_entry.rb +44 -0
  72. data/lib/studium/check_and_sanitize/sanitize_this_string_containing_the_lva_dates.rb +79 -0
  73. data/lib/studium/colours/colours.rb +549 -0
  74. data/lib/studium/colours/sfancy.rb +46 -0
  75. data/lib/studium/colours/sfile.rb +35 -0
  76. data/lib/studium/colours/simp.rb +40 -0
  77. data/lib/studium/colours/use_colours.rb +39 -0
  78. data/lib/studium/colours/use_this_colour_for_exam_questions_and_exam_answers.rb +80 -0
  79. data/lib/studium/commandline/commandline.rb +932 -0
  80. data/lib/studium/commandline/menu.rb +903 -0
  81. data/lib/studium/constants/colours.rb +14 -0
  82. data/lib/studium/constants/constants.rb +2142 -0
  83. data/lib/studium/constants/image_constants.rb +217 -0
  84. data/lib/studium/constants/web_constants.rb +25 -0
  85. data/lib/studium/css/project.css +267 -0
  86. data/lib/studium/curricula/curriculum.rb +210 -0
  87. data/lib/studium/curricula/curriculum_as_string.rb +280 -0
  88. data/lib/studium/curricula/curriculum_module_displayer/constants.rb +33 -0
  89. data/lib/studium/curricula/curriculum_module_displayer/curriculum_module_displayer.rb +417 -0
  90. data/lib/studium/curricula/curriculum_module_displayer/initialize.rb +25 -0
  91. data/lib/studium/curricula/curriculum_module_displayer/menu.rb +45 -0
  92. data/lib/studium/curricula/curriculum_module_displayer/reset.rb +74 -0
  93. data/lib/studium/curricula/curriculum_module_displayer/run.rb +20 -0
  94. data/lib/studium/curricula/curriculum_module_displayer/set_use_this_curriculum.rb +93 -0
  95. data/lib/studium/curricula/curriculum_module_displayer/show_and_report.rb +190 -0
  96. data/lib/studium/curricula/determine_curricula/constants.rb +11 -0
  97. data/lib/studium/curricula/determine_curricula/determine_curricula.rb +36 -0
  98. data/lib/studium/curricula/determine_curricula/help.rb +39 -0
  99. data/lib/studium/curricula/determine_curricula/initialize.rb +48 -0
  100. data/lib/studium/curricula/determine_curricula/menu.rb +151 -0
  101. data/lib/studium/curricula/determine_curricula/misc.rb +403 -0
  102. data/lib/studium/curricula/determine_curricula/report.rb +143 -0
  103. data/lib/studium/curricula/determine_curricula/reset.rb +59 -0
  104. data/lib/studium/curricula/determine_curricula/run.rb +19 -0
  105. data/lib/studium/curricula/determine_elective_courses_in_this_curriculum.rb +112 -0
  106. data/lib/studium/curricula/display_bachelor_curricula.rb +90 -0
  107. data/lib/studium/curricula/mitteilungsbl/303/244tter/mitteilungsbl/303/244tter.rb +324 -0
  108. data/lib/studium/curricula/modules/display_on_the_commandline.rb +319 -0
  109. data/lib/studium/curricula/modules/return_n_ects_in_this_module.rb +75 -0
  110. data/lib/studium/curricula/n_percent_solved_in_this_curriculum.rb +75 -0
  111. data/lib/studium/curricula/prepare_individual_curriculum.rb +304 -0
  112. data/lib/studium/curricula/random_curriculum_creator/random_curriculum_creator.rb +163 -0
  113. data/lib/studium/curricula/show_lectures_of_this_curriculum.rb +114 -0
  114. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/constants.rb +11 -0
  115. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/initialize.rb +27 -0
  116. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/menu.rb +35 -0
  117. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/misc.rb +264 -0
  118. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/report.rb +163 -0
  119. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/reset.rb +64 -0
  120. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/show_lectures_of_this_curriculum_id.rb +38 -0
  121. data/lib/studium/curricula/show_solved_percentage_among_the_registered_curricula.rb +87 -0
  122. data/lib/studium/ects/boku_ects_splitter.rb +128 -0
  123. data/lib/studium/ects/ects_per_university.rb +179 -0
  124. data/lib/studium/ects/ects_scanner.rb +141 -0
  125. data/lib/studium/ects/ects_to_university_parser.rb +142 -0
  126. data/lib/studium/ects/last_entry_is_curriculum.rb +150 -0
  127. data/lib/studium/ects/n_ects_in_these_lectures.rb +196 -0
  128. data/lib/studium/ects/n_ects_points_in_mandatory_presence_courses.rb +50 -0
  129. data/lib/studium/ects/return_n_ects_from_this_file.rb +59 -0
  130. data/lib/studium/ects/return_n_ects_from_this_url.rb +196 -0
  131. data/lib/studium/ects/search_for_n_ects.rb +614 -0
  132. data/lib/studium/ects/show_completed_ects_in_all_curricula.rb +191 -0
  133. data/lib/studium/ects/show_passed_credits_per_curriculum.rb +276 -0
  134. data/lib/studium/ects/simple_total_ects_points.rb +135 -0
  135. data/lib/studium/ects/solved_ects/constants.rb +19 -0
  136. data/lib/studium/ects/solved_ects/reset.rb +51 -0
  137. data/lib/studium/ects/solved_ects/solved_ects.rb +325 -0
  138. data/lib/studium/ects/solved_ects_per_university/reset.rb +25 -0
  139. data/lib/studium/ects/solved_ects_per_university/solved_ects_per_university.rb +106 -0
  140. data/lib/studium/ects/still_missing.rb +129 -0
  141. data/lib/studium/ects/sum_of_ects.rb +144 -0
  142. data/lib/studium/encoding/encoding.rb +108 -0
  143. data/lib/studium/exam_topics/RNAi_siRNA_and_miRNA +86 -0
  144. data/lib/studium/exam_topics/abfall_als_ressource +86 -0
  145. data/lib/studium/exam_topics/advanced_biochemistry +781 -0
  146. data/lib/studium/exam_topics/advanced_biotechnology +214 -0
  147. data/lib/studium/exam_topics/advanced_cellbiology +27 -0
  148. data/lib/studium/exam_topics/advanced_chemistry +504 -0
  149. data/lib/studium/exam_topics/advanced_microbiology +43 -0
  150. data/lib/studium/exam_topics/advanced_topics_in_plant_sciences +85 -0
  151. data/lib/studium/exam_topics/advanced_virology +218 -0
  152. data/lib/studium/exam_topics/ageing +114 -0
  153. data/lib/studium/exam_topics/agrar_ecology +63 -0
  154. data/lib/studium/exam_topics/agrarmarkt +71 -0
  155. data/lib/studium/exam_topics/agrarphysik +35 -0
  156. data/lib/studium/exam_topics/alcohols +29 -0
  157. data/lib/studium/exam_topics/algorithms +52 -0
  158. data/lib/studium/exam_topics/allergie +75 -0
  159. data/lib/studium/exam_topics/allgemeine_genetik +1006 -0
  160. data/lib/studium/exam_topics/allgemeine_mikrobiologie +946 -0
  161. data/lib/studium/exam_topics/aminoacids +438 -0
  162. data/lib/studium/exam_topics/analytische_chemie_1 +132 -0
  163. data/lib/studium/exam_topics/analytische_chemie_2 +31 -0
  164. data/lib/studium/exam_topics/anatomie +290 -0
  165. data/lib/studium/exam_topics/anorganische_chemie +311 -0
  166. data/lib/studium/exam_topics/anthropologie +116 -0
  167. data/lib/studium/exam_topics/antibodies_and_antigens +764 -0
  168. data/lib/studium/exam_topics/apoptosis +35 -0
  169. data/lib/studium/exam_topics/archaea +60 -0
  170. data/lib/studium/exam_topics/architecture +8 -0
  171. data/lib/studium/exam_topics/artificial_intelligence +81 -0
  172. data/lib/studium/exam_topics/atomemissionsspektrometrie +6 -0
  173. data/lib/studium/exam_topics/audio +11 -0
  174. data/lib/studium/exam_topics/bacteriophages +240 -0
  175. data/lib/studium/exam_topics/basic_biochemistry +1002 -0
  176. data/lib/studium/exam_topics/basic_biotechnology +1001 -0
  177. data/lib/studium/exam_topics/basic_chemistry +1007 -0
  178. data/lib/studium/exam_topics/basic_virology +1008 -0
  179. data/lib/studium/exam_topics/bauwesen +6 -0
  180. data/lib/studium/exam_topics/betriebssysteme +126 -0
  181. data/lib/studium/exam_topics/betriebswirtschaftslehre +29 -0
  182. data/lib/studium/exam_topics/bioanalytik_und_biosensoren +382 -0
  183. data/lib/studium/exam_topics/biochips +78 -0
  184. data/lib/studium/exam_topics/bioelektrochemie +57 -0
  185. data/lib/studium/exam_topics/biofilms +22 -0
  186. data/lib/studium/exam_topics/bioinformatics +503 -0
  187. data/lib/studium/exam_topics/biological_therapeutics +153 -0
  188. data/lib/studium/exam_topics/biologie +137 -0
  189. data/lib/studium/exam_topics/biomarkers +106 -0
  190. data/lib/studium/exam_topics/biomaterials +89 -0
  191. data/lib/studium/exam_topics/biomembranes +6 -0
  192. data/lib/studium/exam_topics/bionik +65 -0
  193. data/lib/studium/exam_topics/biophysik +34 -0
  194. data/lib/studium/exam_topics/biopolymers +10 -0
  195. data/lib/studium/exam_topics/bioprozesstechnik +149 -0
  196. data/lib/studium/exam_topics/bioressourcenmanagement +78 -0
  197. data/lib/studium/exam_topics/bodenkunde +373 -0
  198. data/lib/studium/exam_topics/bodenmikrobiologie +40 -0
  199. data/lib/studium/exam_topics/cancerbiology +442 -0
  200. data/lib/studium/exam_topics/cell_cultures +155 -0
  201. data/lib/studium/exam_topics/cellbiology +995 -0
  202. data/lib/studium/exam_topics/cellular_transport_and_protein_secretion +27 -0
  203. data/lib/studium/exam_topics/cellulose +6 -0
  204. data/lib/studium/exam_topics/chemische_technologie_anorganischer_stoffe +209 -0
  205. data/lib/studium/exam_topics/chemische_technologie_organischer_stoffe +25 -0
  206. data/lib/studium/exam_topics/chemisches_labor +60 -0
  207. data/lib/studium/exam_topics/chemotaxis_and_motility_in_prokaryotes +87 -0
  208. data/lib/studium/exam_topics/citric_acid_cycle +80 -0
  209. data/lib/studium/exam_topics/clinical_microbiology +492 -0
  210. data/lib/studium/exam_topics/computer_graphics +5 -0
  211. data/lib/studium/exam_topics/computer_science +280 -0
  212. data/lib/studium/exam_topics/crispr +28 -0
  213. data/lib/studium/exam_topics/cyanobacteria +42 -0
  214. data/lib/studium/exam_topics/cytogenetics_and_chromosome_biology +551 -0
  215. data/lib/studium/exam_topics/cytokines +5 -0
  216. data/lib/studium/exam_topics/databases_and_sql +106 -0
  217. data/lib/studium/exam_topics/dna_mutation_and_dna_repair +35 -0
  218. data/lib/studium/exam_topics/dna_replication +56 -0
  219. data/lib/studium/exam_topics/ecogenetics +26 -0
  220. data/lib/studium/exam_topics/ecological_agriculture +12 -0
  221. data/lib/studium/exam_topics/ecology +314 -0
  222. data/lib/studium/exam_topics/economy +211 -0
  223. data/lib/studium/exam_topics/elektronenmikroskopie +354 -0
  224. data/lib/studium/exam_topics/elektrophorese +89 -0
  225. data/lib/studium/exam_topics/elektrotechnik_und_elektrizit/303/244t +41 -0
  226. data/lib/studium/exam_topics/elisa +54 -0
  227. data/lib/studium/exam_topics/embryologie_und_entwicklung +547 -0
  228. data/lib/studium/exam_topics/endospores_and_spores +104 -0
  229. data/lib/studium/exam_topics/enzymes_and_cofactors +345 -0
  230. data/lib/studium/exam_topics/epigenetik +179 -0
  231. data/lib/studium/exam_topics/ethik +138 -0
  232. data/lib/studium/exam_topics/evolution_and_evolutionary_genetics +328 -0
  233. data/lib/studium/exam_topics/excel +7 -0
  234. data/lib/studium/exam_topics/fish +19 -0
  235. data/lib/studium/exam_topics/fluorescence_microscopy +7 -0
  236. data/lib/studium/exam_topics/food_microbiology_and_food_biotechnology +71 -0
  237. data/lib/studium/exam_topics/forensik +11 -0
  238. data/lib/studium/exam_topics/forstwirtschaft +53 -0
  239. data/lib/studium/exam_topics/fortgeschrittene_genetik +511 -0
  240. data/lib/studium/exam_topics/fortgeschrittene_gentechnik +211 -0
  241. data/lib/studium/exam_topics/fortgeschrittene_physik +6 -0
  242. data/lib/studium/exam_topics/fungi +79 -0
  243. data/lib/studium/exam_topics/genetische_krankheiten +176 -0
  244. data/lib/studium/exam_topics/genexpression +1008 -0
  245. data/lib/studium/exam_topics/genomics_and_metagenomics +244 -0
  246. data/lib/studium/exam_topics/gentechnik_und_praktische_biochemie +901 -0
  247. data/lib/studium/exam_topics/geochemistry +67 -0
  248. data/lib/studium/exam_topics/geography +8 -0
  249. data/lib/studium/exam_topics/geologie_und_mineralogie +621 -0
  250. data/lib/studium/exam_topics/geometrie +47 -0
  251. data/lib/studium/exam_topics/geschichte +93 -0
  252. data/lib/studium/exam_topics/gluconeogenesis +59 -0
  253. data/lib/studium/exam_topics/glycogen +25 -0
  254. data/lib/studium/exam_topics/glycolysis +109 -0
  255. data/lib/studium/exam_topics/glykomik +100 -0
  256. data/lib/studium/exam_topics/glyoxylatzyklus +31 -0
  257. data/lib/studium/exam_topics/grassland_cultivation +32 -0
  258. data/lib/studium/exam_topics/hormone +134 -0
  259. data/lib/studium/exam_topics/html +7 -0
  260. data/lib/studium/exam_topics/human_ecology +8 -0
  261. data/lib/studium/exam_topics/hygiene +191 -0
  262. data/lib/studium/exam_topics/imaging_and_microscopy +241 -0
  263. data/lib/studium/exam_topics/immunanalytik +94 -0
  264. data/lib/studium/exam_topics/immunologie +982 -0
  265. data/lib/studium/exam_topics/informatik +97 -0
  266. data/lib/studium/exam_topics/innate_immunity +22 -0
  267. data/lib/studium/exam_topics/insekten +57 -0
  268. data/lib/studium/exam_topics/insulin_and_diabetes +57 -0
  269. data/lib/studium/exam_topics/java +502 -0
  270. data/lib/studium/exam_topics/javascript +12 -0
  271. data/lib/studium/exam_topics/klima +6 -0
  272. data/lib/studium/exam_topics/kryptographie +5 -0
  273. data/lib/studium/exam_topics/landtechnik +26 -0
  274. data/lib/studium/exam_topics/lebensmittel +208 -0
  275. data/lib/studium/exam_topics/lebensmitteltechnologie +16 -0
  276. data/lib/studium/exam_topics/linux +5 -0
  277. data/lib/studium/exam_topics/lipids +94 -0
  278. data/lib/studium/exam_topics/macroeconomics +40 -0
  279. data/lib/studium/exam_topics/mathematics +254 -0
  280. data/lib/studium/exam_topics/medizin_und_biomedizinische_technik +250 -0
  281. data/lib/studium/exam_topics/medizinische_chemie_und_pharmazie +398 -0
  282. data/lib/studium/exam_topics/messtechnik_und_regeltechnik +104 -0
  283. data/lib/studium/exam_topics/metabolismus +406 -0
  284. data/lib/studium/exam_topics/microbial_ecology +35 -0
  285. data/lib/studium/exam_topics/microcontrollers +11 -0
  286. data/lib/studium/exam_topics/mikrobielle_lebensgemeinschaften +33 -0
  287. data/lib/studium/exam_topics/mikrobielle_physiologie +172 -0
  288. data/lib/studium/exam_topics/mitochondria +32 -0
  289. data/lib/studium/exam_topics/mixed +278 -0
  290. data/lib/studium/exam_topics/molecular_biology_of_plants +242 -0
  291. data/lib/studium/exam_topics/molekulare_medizin +131 -0
  292. data/lib/studium/exam_topics/nanotechnologie +453 -0
  293. data/lib/studium/exam_topics/nature_conservation_and_biodiversity +166 -0
  294. data/lib/studium/exam_topics/naturstoffe +9 -0
  295. data/lib/studium/exam_topics/netzwerke +32 -0
  296. data/lib/studium/exam_topics/neurobiology +267 -0
  297. data/lib/studium/exam_topics/nucleotide_sequencing +32 -0
  298. data/lib/studium/exam_topics/nutztierethologie +11 -0
  299. data/lib/studium/exam_topics/object_oriented_modeling +14 -0
  300. data/lib/studium/exam_topics/obstbau +234 -0
  301. data/lib/studium/exam_topics/organische_chemie +1007 -0
  302. data/lib/studium/exam_topics/organische_chemie_2 +118 -0
  303. data/lib/studium/exam_topics/paleobiology +35 -0
  304. data/lib/studium/exam_topics/parasitic_diseases_and_molecular_infection_biology +335 -0
  305. data/lib/studium/exam_topics/patent_law +55 -0
  306. data/lib/studium/exam_topics/pathologie +717 -0
  307. data/lib/studium/exam_topics/pcr +144 -0
  308. data/lib/studium/exam_topics/pentosephosphatweg +41 -0
  309. data/lib/studium/exam_topics/peroxisomes_glycosomes_and_lysosomes +54 -0
  310. data/lib/studium/exam_topics/pflanzenanatomie +255 -0
  311. data/lib/studium/exam_topics/pflanzenbau +24 -0
  312. data/lib/studium/exam_topics/pflanzenschutz +35 -0
  313. data/lib/studium/exam_topics/pflanzenwissenschaften +1009 -0
  314. data/lib/studium/exam_topics/pharmaceutical_biotechnology +250 -0
  315. data/lib/studium/exam_topics/physik +433 -1
  316. data/lib/studium/exam_topics/physikalische_chemie +86 -0
  317. data/lib/studium/exam_topics/physiology_and_histology +506 -0
  318. data/lib/studium/exam_topics/phytochemie +33 -0
  319. data/lib/studium/exam_topics/plant_biotechnology +128 -0
  320. data/lib/studium/exam_topics/plant_breeding +64 -0
  321. data/lib/studium/exam_topics/plant_development +50 -0
  322. data/lib/studium/exam_topics/populationsgenetik +136 -0
  323. data/lib/studium/exam_topics/posttranslationale_modifikation_von_proteinen +191 -0
  324. data/lib/studium/exam_topics/projektmanagement +219 -0
  325. data/lib/studium/exam_topics/prokaryote_genetics +531 -0
  326. data/lib/studium/exam_topics/protein_engineering +8 -0
  327. data/lib/studium/exam_topics/proteolyse +33 -0
  328. data/lib/studium/exam_topics/proteomik +40 -0
  329. data/lib/studium/exam_topics/prozesstechnik +95 -0
  330. data/lib/studium/exam_topics/psychologie +13 -0
  331. data/lib/studium/exam_topics/python +353 -0
  332. data/lib/studium/exam_topics/quality_management +256 -0
  333. data/lib/studium/exam_topics/rechtsgrundlagen +115 -0
  334. data/lib/studium/exam_topics/research_topics_in_immunobiology +42 -0
  335. data/lib/studium/exam_topics/rna_and_dna +395 -0
  336. data/lib/studium/exam_topics/rna_seq +11 -0
  337. data/lib/studium/exam_topics/ruby +146 -0
  338. data/lib/studium/exam_topics/ruby_on_rails +63 -0
  339. data/lib/studium/exam_topics/scientific_writing_and_publishing +38 -0
  340. data/lib/studium/exam_topics/semisynthese_von_proteinen_und_nukleotiden +120 -0
  341. data/lib/studium/exam_topics/sexualbiologie +62 -0
  342. data/lib/studium/exam_topics/signal_transduction_and_laser_systems +167 -0
  343. data/lib/studium/exam_topics/splicing_exons_and_introns +63 -0
  344. data/lib/studium/exam_topics/statistik +233 -0
  345. data/lib/studium/exam_topics/stemcells +158 -0
  346. data/lib/studium/exam_topics/stickstofffixierung +75 -0
  347. data/lib/studium/exam_topics/structural_bioinformatics +54 -0
  348. data/lib/studium/exam_topics/strukturbiologie +380 -0
  349. data/lib/studium/exam_topics/system_biology_and_synthetic_biology +101 -0
  350. data/lib/studium/exam_topics/systematische_zoologie +433 -0
  351. data/lib/studium/exam_topics/technical_ecology +144 -0
  352. data/lib/studium/exam_topics/technische_chemie +202 -0
  353. data/lib/studium/exam_topics/technische_grundlagen_der_informatik +26 -0
  354. data/lib/studium/exam_topics/technische_mikrobiologie +393 -0
  355. data/lib/studium/exam_topics/technisches_zeichnen +5 -0
  356. data/lib/studium/exam_topics/the_bacterial_cell_wall +97 -0
  357. data/lib/studium/exam_topics/the_c_plus_plus_programming_language +489 -0
  358. data/lib/studium/exam_topics/the_c_programming_language +129 -0
  359. data/lib/studium/exam_topics/the_cellcycle +81 -0
  360. data/lib/studium/exam_topics/the_european_union +119 -0
  361. data/lib/studium/exam_topics/the_interferon_system +38 -0
  362. data/lib/studium/exam_topics/the_microbiome +163 -0
  363. data/lib/studium/exam_topics/the_universe +12 -0
  364. data/lib/studium/exam_topics/theoretische_chemie +5 -0
  365. data/lib/studium/exam_topics/theoretische_informatik +157 -0
  366. data/lib/studium/exam_topics/tierzucht +94 -0
  367. data/lib/studium/exam_topics/toxikologie +408 -0
  368. data/lib/studium/exam_topics/transcription +82 -0
  369. data/lib/studium/exam_topics/translation_ribosomes_and_translational_control +142 -0
  370. data/lib/studium/exam_topics/umweltbiotechnologie +63 -0
  371. data/lib/studium/exam_topics/umweltchemie +233 -0
  372. data/lib/studium/exam_topics/urbanism_and_traffic +19 -0
  373. data/lib/studium/exam_topics/urea_cycle +55 -0
  374. data/lib/studium/exam_topics/vaccines_and_vaccination +242 -0
  375. data/lib/studium/exam_topics/vectors_and_gene_therapy +240 -0
  376. data/lib/studium/exam_topics/verfahrenstechnik +32 -0
  377. data/lib/studium/exam_topics/veterinary_medicine +10 -0
  378. data/lib/studium/exam_topics/vitamine +24 -0
  379. data/lib/studium/exam_topics/wasserkunde +137 -0
  380. data/lib/studium/exam_topics/weinbau +59 -0
  381. data/lib/studium/exam_topics/wissenschaft +18 -0
  382. data/lib/studium/exam_topics/yeast +102 -0
  383. data/lib/studium/exam_topics/zoologie +330 -0
  384. data/lib/studium/exams/afterburn/afterburn.rb +257 -0
  385. data/lib/studium/exams/ask_exam_from_the_upcoming_exams_pool.rb +150 -0
  386. data/lib/studium/exams/ask_exam_topic_question.rb +112 -0
  387. data/lib/studium/exams/ask_question_from_alias.rb +141 -0
  388. data/lib/studium/exams/ask_question_from_any_of_the_still_missing_lectures.rb +131 -0
  389. data/lib/studium/exams/ask_question_from_grouped_themes.rb +141 -0
  390. data/lib/studium/exams/ask_question_from_last_topic.rb +91 -0
  391. data/lib/studium/exams/ask_random_question.rb +195 -0
  392. data/lib/studium/exams/autoinclude.rb +7 -0
  393. data/lib/studium/exams/csv/create_csv_passed_exams_file.rb +217 -0
  394. data/lib/studium/exams/cycle.rb +291 -0
  395. data/lib/studium/exams/dataset.rb +123 -0
  396. data/lib/studium/exams/designate_ten_random_exam_topics/designate_ten_random_exam_topics.rb +88 -0
  397. data/lib/studium/exams/exam/exam.rb +130 -0
  398. data/lib/studium/exams/exam_question/README.md +3 -0
  399. data/lib/studium/exams/exam_question/answer.rb +177 -0
  400. data/lib/studium/exams/exam_question/constants.rb +111 -0
  401. data/lib/studium/exams/exam_question/exam_question.rb +1135 -0
  402. data/lib/studium/exams/exam_question/menu.rb +333 -0
  403. data/lib/studium/exams/exam_question/misc.rb +895 -0
  404. data/lib/studium/exams/exam_question/question.rb +91 -0
  405. data/lib/studium/exams/exam_question/reset.rb +96 -0
  406. data/lib/studium/exams/exam_registration_at/constants.rb +49 -0
  407. data/lib/studium/exams/exam_registration_at/exam_registration_at.rb +242 -0
  408. data/lib/studium/exams/exam_registration_at/help.rb +46 -0
  409. data/lib/studium/exams/exam_registration_at/menu.rb +81 -0
  410. data/lib/studium/exams/exam_registration_at/report_and_show.rb +133 -0
  411. data/lib/studium/exams/exam_registration_at/reset.rb +54 -0
  412. data/lib/studium/exams/exam_statistics_from_this_file/exam_statistics_from_this_file.rb +119 -0
  413. data/lib/studium/exams/exam_topics.rb +194 -0
  414. data/lib/studium/exams/exams.rb +20 -0
  415. data/lib/studium/exams/exams_per_month/exams_per_month.rb +2438 -0
  416. data/lib/studium/exams/exams_this_week.rb +182 -0
  417. data/lib/studium/exams/fix_exam_dates.rb +121 -0
  418. data/lib/studium/exams/frozen.rb +36 -0
  419. data/lib/studium/exams/last_exams/last_exams.rb +398 -0
  420. data/lib/studium/exams/lectures_without_exam_entry.rb +137 -0
  421. data/lib/studium/exams/mandatory_continuous_assessment/mandatory_continuous_assessment.rb +1956 -0
  422. data/lib/studium/exams/move_the_last_exam_question_to_the_top_of_the_file/move_the_last_exam_question_to_the_top_of_the_file.rb +111 -0
  423. data/lib/studium/exams/n_exams_in_these_topics.rb +404 -0
  424. data/lib/studium/exams/next_exam.rb +107 -0
  425. data/lib/studium/exams/next_exams.rb +378 -0
  426. data/lib/studium/exams/open_exam_associated_url.rb +154 -0
  427. data/lib/studium/exams/open_last_exam_question_asked_file/constants.rb +15 -0
  428. data/lib/studium/exams/open_last_exam_question_asked_file/initialize.rb +29 -0
  429. data/lib/studium/exams/open_last_exam_question_asked_file/open_last_exam_question_asked_file.rb +109 -0
  430. data/lib/studium/exams/pr/303/274fung.rb +289 -0
  431. data/lib/studium/exams/push_solved_questions_on_top.rb +180 -0
  432. data/lib/studium/exams/questions_solved_from_day_to_day/questions_solved_from_day_to_day.rb +377 -0
  433. data/lib/studium/exams/remote_ftp_url.rb +52 -0
  434. data/lib/studium/exams/repeat_last_question.rb +78 -0
  435. data/lib/studium/exams/show_all_passed_exams_of_this_university.rb +252 -0
  436. data/lib/studium/exams/show_backlog_of_exams.rb +117 -0
  437. data/lib/studium/exams/show_next_exams_for.rb +133 -0
  438. data/lib/studium/exams/show_themes/constants.rb +28 -0
  439. data/lib/studium/exams/show_themes/menu.rb +61 -0
  440. data/lib/studium/exams/show_themes/misc.rb +537 -0
  441. data/lib/studium/exams/show_themes/reset.rb +62 -0
  442. data/lib/studium/exams/show_themes/show_themes.rb +27 -0
  443. data/lib/studium/exams/show_upcoming_exams/consider_autogenerating_exam_aliases.rb +181 -0
  444. data/lib/studium/exams/show_upcoming_exams/constants.rb +82 -0
  445. data/lib/studium/exams/show_upcoming_exams/help.rb +33 -0
  446. data/lib/studium/exams/show_upcoming_exams/initialize.rb +77 -0
  447. data/lib/studium/exams/show_upcoming_exams/menu.rb +60 -0
  448. data/lib/studium/exams/show_upcoming_exams/report.rb +200 -0
  449. data/lib/studium/exams/show_upcoming_exams/reset.rb +45 -0
  450. data/lib/studium/exams/show_upcoming_exams/run.rb +20 -0
  451. data/lib/studium/exams/show_upcoming_exams/show_upcoming_exams.rb +544 -0
  452. data/lib/studium/exams/solve_all_questions_from_this_topic.rb +114 -0
  453. data/lib/studium/exams/solved/constants.rb +32 -0
  454. data/lib/studium/exams/solved/help.rb +24 -0
  455. data/lib/studium/exams/solved/initialize.rb +55 -0
  456. data/lib/studium/exams/solved/menu.rb +41 -0
  457. data/lib/studium/exams/solved/reset.rb +28 -0
  458. data/lib/studium/exams/solved/solved.rb +313 -0
  459. data/lib/studium/exams/unsolve_all_questions_from_this_topic.rb +162 -0
  460. data/lib/studium/exams/upcoming_exams/constants.rb +15 -0
  461. data/lib/studium/exams/upcoming_exams/help.rb +41 -0
  462. data/lib/studium/exams/upcoming_exams/initialize.rb +27 -0
  463. data/lib/studium/exams/upcoming_exams/menu.rb +79 -0
  464. data/lib/studium/exams/upcoming_exams/misc.rb +415 -0
  465. data/lib/studium/exams/upcoming_exams/reset.rb +34 -0
  466. data/lib/studium/exams/upcoming_exams/run.rb +26 -0
  467. data/lib/studium/exams/upcoming_exams/upcoming_exams.rb +32 -0
  468. data/lib/studium/exams/upcoming_exams_at_the_boku/constants.rb +23 -0
  469. data/lib/studium/exams/upcoming_exams_at_the_boku/html.rb +64 -0
  470. data/lib/studium/exams/upcoming_exams_at_the_boku/upcoming_exams_at_the_boku.rb +194 -0
  471. data/lib/studium/exams/upcoming_exams_dataset.rb +247 -0
  472. data/lib/studium/exams/upload_exam_topics.rb +360 -0
  473. data/lib/studium/graphviz/README.md +4 -0
  474. data/lib/studium/graphviz/bachelor_vector_based_strategies.dot +160 -0
  475. data/lib/studium/graphviz/master_vector_based_strategies.dot +46 -0
  476. data/lib/studium/gui/gtk3/README.md +1 -0
  477. data/lib/studium/gui/gtk3/ask_exam_question/ask_exam_question.config +6 -0
  478. data/lib/studium/gui/gtk3/ask_exam_question/ask_exam_question.rb +760 -0
  479. data/lib/studium/gui/gtk3/ask_exam_question/manifest.yml +12 -0
  480. data/lib/studium/gui/gtk3/control_panel/control_panel.rb +39 -0
  481. data/lib/studium/gui/gtk3/curriculum_viewer/curriculum_viewer.rb +510 -0
  482. data/lib/studium/gui/gtk3/ects_per_university/ects_per_university.rb +217 -0
  483. data/lib/studium/gui/gtk3/exam_question_widget/exam_question_widget.rb +1887 -0
  484. data/lib/studium/gui/gtk3/expand_time_range/expand_time_range.rb +34 -0
  485. data/lib/studium/gui/gtk3/information_about_a_lecture/information_about_a_lecture.rb +34 -0
  486. data/lib/studium/gui/gtk3/lecture_information/lecture_information.rb +200 -0
  487. data/lib/studium/gui/gtk3/show_upcoming_exams/show_upcoming_exams.rb +34 -0
  488. data/lib/studium/gui/java/exam_question/ExamQuestion$1.class +0 -0
  489. data/lib/studium/gui/java/exam_question/ExamQuestion.class +0 -0
  490. data/lib/studium/gui/java/exam_question/ExamQuestion.java +215 -0
  491. data/lib/studium/gui/javafx/exam_question_widget/exam_question_widget.rb +58 -0
  492. data/lib/studium/gui/jruby/exam_question_widget/exam_question_widget.rb +317 -0
  493. data/lib/studium/gui/libui/ask_exam_question/ask_exam_question.rb +349 -0
  494. data/lib/studium/gui/shared_code/control_panel/control_panel_module.rb +314 -0
  495. data/lib/studium/gui/shared_code/exam_question_widget/exam_question_widget_module.rb +39 -0
  496. data/lib/studium/gui/shared_code/expand_time_range/expand_time_range.css +0 -0
  497. data/lib/studium/gui/shared_code/expand_time_range/expand_time_range_module.rb +190 -0
  498. data/lib/studium/gui/shared_code/information_about_a_lecture/information_about_a_lecture_module.rb +180 -0
  499. data/lib/studium/gui/shared_code/show_upcoming_exams/show_upcoming_exams_module.rb +206 -0
  500. data/lib/studium/images/libui_ask_exam_question.png +0 -0
  501. data/lib/studium/images/small_logos/DNA.png +0 -0
  502. data/lib/studium/images/small_logos/README.md +2 -0
  503. data/lib/studium/images/studies_favicon.png +0 -0
  504. data/lib/studium/java/Mkdir.java +15 -0
  505. data/lib/studium/java/README.md +2 -0
  506. data/lib/studium/java/ask_exam_question/AskExamQuestion.java +477 -0
  507. data/lib/studium/java/solved/Solved.class +0 -0
  508. data/lib/studium/java/solved/Solved.java +110 -0
  509. data/lib/studium/java/utility_scripts/OpenLastExamQuestionurlLinkViaTheBrowser.class +0 -0
  510. data/lib/studium/java/utility_scripts/OpenLastExamQuestionurlLinkViaTheBrowser.java +80 -0
  511. data/lib/studium/logging/README.md +2 -0
  512. data/lib/studium/logging/ensure_that_the_log_directory_exists.rb +47 -0
  513. data/lib/studium/logging/html_log_directory.rb +41 -0
  514. data/lib/studium/logging/log_directory.rb +112 -0
  515. data/lib/studium/logging/store_last_question_asked_into_file.rb +137 -0
  516. data/lib/studium/parsers/README.md +2 -0
  517. data/lib/studium/parsers/custom_exam_results_parser.rb +206 -0
  518. data/lib/studium/parsers/parse_lva_dates.rb +190 -0
  519. data/lib/studium/parsers/parse_remote_lecture.rb +325 -0
  520. data/lib/studium/project/project.rb +76 -0
  521. data/lib/studium/requires/common_popular_requires.rb +37 -0
  522. data/lib/studium/requires/commonly_used_requires.rb +14 -0
  523. data/lib/studium/requires/require_class_exams_solved.rb +7 -0
  524. data/lib/studium/requires/require_ects_scripts.rb +27 -0
  525. data/lib/studium/requires/require_encoding.rb +7 -0
  526. data/lib/studium/requires/require_the_check_and_sanitize_files.rb +31 -0
  527. data/lib/studium/requires/require_the_curricula_files.rb +28 -0
  528. data/lib/studium/requires/require_the_exam_question_class.rb +7 -0
  529. data/lib/studium/requires/require_the_exams_files.rb +45 -0
  530. data/lib/studium/requires/require_the_logging_files.rb +23 -0
  531. data/lib/studium/requires/require_the_parsers.rb +28 -0
  532. data/lib/studium/requires/require_the_studium_constants.rb +10 -0
  533. data/lib/studium/requires/require_the_studium_project.rb +54 -0
  534. data/lib/studium/requires/require_the_toplevel_methods.rb +27 -0
  535. data/lib/studium/requires/require_the_utility_scripts.rb +49 -0
  536. data/lib/studium/requires/require_upcoming_exams.rb +7 -0
  537. data/lib/studium/requires/require_yaml.rb +7 -0
  538. data/lib/studium/requires/return_remote_homepage_of_this_lecture.rb +7 -0
  539. data/lib/studium/requires/with_GUI.rb +13 -0
  540. data/lib/studium/requires/www_mode.rb +17 -0
  541. data/lib/studium/statistics/README.md +4 -0
  542. data/lib/studium/statistics/best_exam_months.rb +92 -0
  543. data/lib/studium/statistics/curriculum_comparer.rb +336 -0
  544. data/lib/studium/statistics/determine_exam_statistics_from_this_file.rb +142 -0
  545. data/lib/studium/statistics/exam_topics_that_are_about_to_be_completed.rb +119 -0
  546. data/lib/studium/statistics/max_stats.rb +170 -0
  547. data/lib/studium/statistics/new_questions_per_year.rb +147 -0
  548. data/lib/studium/statistics/report_how_many_ects_points_per_curriculum_were_completed.rb +167 -0
  549. data/lib/studium/statistics/report_how_many_exam_questions_were_answered.rb +473 -0
  550. data/lib/studium/statistics/show_exam_statistics.rb +60 -0
  551. data/lib/studium/statistics/show_which_courses_are_in_a_bachelor_or_master_curriculum_respectively.rb +104 -0
  552. data/lib/studium/statistics/top_stats.rb +127 -0
  553. data/lib/studium/toplevel_methods/all_passed_exams.rb +37 -0
  554. data/lib/studium/toplevel_methods/already_solved_this_lecture.rb +100 -0
  555. data/lib/studium/toplevel_methods/available_topics.rb +156 -0
  556. data/lib/studium/toplevel_methods/average_grade.rb +141 -0
  557. data/lib/studium/toplevel_methods/calculate_pr/303/274fungsimmanente_lectures_from_this_file.rb +55 -0
  558. data/lib/studium/toplevel_methods/copy_the_last_backup_of_file_lecture_information.rb +34 -0
  559. data/lib/studium/toplevel_methods/curriculum_related_code.rb +999 -0
  560. data/lib/studium/toplevel_methods/determine_local_directory_of_this_lecture.rb +72 -0
  561. data/lib/studium/toplevel_methods/does_this_course_require_mandatory_presence.rb +51 -0
  562. data/lib/studium/toplevel_methods/download.rb +163 -0
  563. data/lib/studium/toplevel_methods/e.rb +16 -0
  564. data/lib/studium/toplevel_methods/ects_from_lectures.rb +250 -0
  565. data/lib/studium/toplevel_methods/editor.rb +65 -0
  566. data/lib/studium/toplevel_methods/esystem.rb +22 -0
  567. data/lib/studium/toplevel_methods/filter_away_invalid_questions.rb +77 -0
  568. data/lib/studium/toplevel_methods/find_exam_topic_and_exam_title.rb +3442 -0
  569. data/lib/studium/toplevel_methods/handle_archive_of_the_exam_questions.rb +136 -0
  570. data/lib/studium/toplevel_methods/has_this_lecture_been_already_passed_but_the_id_was_changed_lateron.rb +42 -0
  571. data/lib/studium/toplevel_methods/has_this_module_been_completed.rb +206 -0
  572. data/lib/studium/toplevel_methods/install_the_project_on_the_given_hostsystem.rb +32 -0
  573. data/lib/studium/toplevel_methods/is_on_roebe.rb +26 -0
  574. data/lib/studium/toplevel_methods/is_this_exam_topic_included.rb +46 -0
  575. data/lib/studium/toplevel_methods/is_this_homepage_registered.rb +31 -0
  576. data/lib/studium/toplevel_methods/is_this_lecture_a_practical_course.rb +100 -0
  577. data/lib/studium/toplevel_methods/is_this_lecture_registered_in_upcoming_exams.rb +42 -0
  578. data/lib/studium/toplevel_methods/java.rb +32 -0
  579. data/lib/studium/toplevel_methods/lecture_information.rb +106 -0
  580. data/lib/studium/toplevel_methods/lva_numbers.rb +355 -0
  581. data/lib/studium/toplevel_methods/main_dataset.rb +73 -0
  582. data/lib/studium/toplevel_methods/methods_related_to_directories.rb +225 -0
  583. data/lib/studium/toplevel_methods/methods_related_to_files.rb +205 -0
  584. data/lib/studium/toplevel_methods/misc.rb +169 -0
  585. data/lib/studium/toplevel_methods/n_questions_available.rb +137 -0
  586. data/lib/studium/toplevel_methods/n_topics_available.rb +63 -0
  587. data/lib/studium/toplevel_methods/names_of_all_solved_exams.rb +71 -0
  588. data/lib/studium/toplevel_methods/note_down_the_start_time_and_how_many_exams_have_been_already_solved.rb +69 -0
  589. data/lib/studium/toplevel_methods/opnn.rb +25 -0
  590. data/lib/studium/toplevel_methods/passed_this_exam_on.rb +105 -0
  591. data/lib/studium/toplevel_methods/pristine.rb +69 -0
  592. data/lib/studium/toplevel_methods/read_delay_between_questions_from_file.rb +34 -0
  593. data/lib/studium/toplevel_methods/regexes.rb +90 -0
  594. data/lib/studium/toplevel_methods/registered_for_this_exam.rb +62 -0
  595. data/lib/studium/toplevel_methods/remove_comments.rb +26 -0
  596. data/lib/studium/toplevel_methods/remove_exam_topics_that_were_already_answered.rb +27 -0
  597. data/lib/studium/toplevel_methods/remove_tags.rb +32 -0
  598. data/lib/studium/toplevel_methods/report.rb +419 -0
  599. data/lib/studium/toplevel_methods/return_all_exams_on_this_day.rb +66 -0
  600. data/lib/studium/toplevel_methods/return_dataset_for_this_exam_topic.rb +41 -0
  601. data/lib/studium/toplevel_methods/return_div_timetable_of_upcoming_exams.rb +498 -0
  602. data/lib/studium/toplevel_methods/return_ects_from_this_lecture_stored_in_the_file_lecture_information.rb +194 -0
  603. data/lib/studium/toplevel_methods/return_hash_of_already_solved_lectures.rb +46 -0
  604. data/lib/studium/toplevel_methods/return_last_exam_question.rb +34 -0
  605. data/lib/studium/toplevel_methods/return_local_path_of_this_pwdstud.rb +60 -0
  606. data/lib/studium/toplevel_methods/return_lva_number_of_this_lecture.rb +72 -0
  607. data/lib/studium/toplevel_methods/return_n_percent_solved_from_this_topic.rb +90 -0
  608. data/lib/studium/toplevel_methods/return_n_questions_were_answered_for_this_topic.rb +60 -0
  609. data/lib/studium/toplevel_methods/return_proper_university_image.rb +86 -0
  610. data/lib/studium/toplevel_methods/return_question_answer_string_from_this_topic.rb +63 -0
  611. data/lib/studium/toplevel_methods/return_remote_homepage_of_this_lecture.rb +9400 -0
  612. data/lib/studium/toplevel_methods/return_remote_moodle_link_of_this_lecture.rb +1661 -0
  613. data/lib/studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb +110 -0
  614. data/lib/studium/toplevel_methods/return_theme_of_the_next_upcoming_exam.rb +38 -0
  615. data/lib/studium/toplevel_methods/rinstall2.rb +34 -0
  616. data/lib/studium/toplevel_methods/rti_conflict.rb +35 -0
  617. data/lib/studium/toplevel_methods/runmode.rb +87 -0
  618. data/lib/studium/toplevel_methods/sanitized_dataset_from_file_passed_exams_per_month.rb +52 -0
  619. data/lib/studium/toplevel_methods/set_last_file_for_exam_questions.rb +64 -0
  620. data/lib/studium/toplevel_methods/set_this_cd_alias_to.rb +86 -0
  621. data/lib/studium/toplevel_methods/show_passed_exams_having_this_grade.rb +34 -0
  622. data/lib/studium/toplevel_methods/spacer.rb +18 -0
  623. data/lib/studium/toplevel_methods/time.rb +239 -0
  624. data/lib/studium/toplevel_methods/total_ects_points_passed.rb +72 -0
  625. data/lib/studium/toplevel_methods/try_to_guess_the_most_likely_lva_id.rb +57 -0
  626. data/lib/studium/toplevel_methods/try_to_return_the_expanded_name_of_this_lecture.rb +63 -0
  627. data/lib/studium/toplevel_methods/unfinished.rb +51 -0
  628. data/lib/studium/toplevel_methods/url.rb +100 -0
  629. data/lib/studium/toplevel_methods/verbose_truth.rb +36 -0
  630. data/lib/studium/toplevel_methods/when_was_this_lecture_passed.rb +54 -0
  631. data/lib/studium/toplevel_methods/word_wrap.rb +56 -0
  632. data/lib/studium/toplevel_methods/write_into_file_related_functionality.rb +189 -0
  633. data/lib/studium/toplevel_methods/yes_or_no_ja_oder_nein.rb +33 -0
  634. data/lib/studium/universities_in_austria/README.md +2 -0
  635. data/lib/studium/universities_in_austria/boku/README.md +4 -0
  636. data/lib/studium/universities_in_austria/boku/boku_/303/266ffnungszeiten.rb +28 -0
  637. data/lib/studium/universities_in_austria/boku/show_three_pillars_of_these_lectures.rb +110 -0
  638. data/lib/studium/universities_in_austria/boku/three_pillars.rb +237 -0
  639. data/lib/studium/universities_in_austria/tu_vienna/README.md +6 -0
  640. data/lib/studium/universities_in_austria/tu_vienna/tu_ferien.rb +42 -0
  641. data/lib/studium/universities_in_austria/tu_vienna/tu_/303/266ffnungszeiten.rb +34 -0
  642. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_boku_lecture_to_curriculum.rb +384 -0
  643. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_lecture_to_curriculum.rb +238 -0
  644. data/lib/studium/utility_scripts/attribute_lectures_to_university/attribute_lectures_to_university.rb +375 -0
  645. data/lib/studium/utility_scripts/audio_stats.rb +171 -0
  646. data/lib/studium/utility_scripts/auto_stud/auto_stud.rb +252 -0
  647. data/lib/studium/utility_scripts/auto_stud/constants.rb +18 -0
  648. data/lib/studium/utility_scripts/auto_stud/initialize.rb +23 -0
  649. data/lib/studium/utility_scripts/auto_stud/misc.rb +18 -0
  650. data/lib/studium/utility_scripts/autopurge_this_lecture_date.rb +93 -0
  651. data/lib/studium/utility_scripts/average_grade_of_this_curriculum.rb +101 -0
  652. data/lib/studium/utility_scripts/calendar/README.md +2 -0
  653. data/lib/studium/utility_scripts/calendar/calendar.rb +251 -0
  654. data/lib/studium/utility_scripts/calendar/misc.rb +35 -0
  655. data/lib/studium/utility_scripts/check_description_of_these_lectures.rb +221 -0
  656. data/lib/studium/utility_scripts/create_database/create_database.rb +106 -0
  657. data/lib/studium/utility_scripts/current_lectures_belonging_to_both_bachelor_and_master_curriculum.rb +113 -0
  658. data/lib/studium/utility_scripts/currently_participating_in_these_lectures/currently_participating_in_these_lectures.rb +104 -0
  659. data/lib/studium/utility_scripts/display_lecture_url.rb +160 -0
  660. data/lib/studium/utility_scripts/expand_time_range/expand_time_range.rb +414 -0
  661. data/lib/studium/utility_scripts/finished_exams_at_this_university.rb +94 -0
  662. data/lib/studium/utility_scripts/foreign_language_percentage/constants.rb +23 -0
  663. data/lib/studium/utility_scripts/foreign_language_percentage/foreign_language_percentage.rb +149 -0
  664. data/lib/studium/utility_scripts/foreign_language_percentage/help.rb +31 -0
  665. data/lib/studium/utility_scripts/foreign_language_percentage/initialize.rb +25 -0
  666. data/lib/studium/utility_scripts/foreign_language_percentage/menu.rb +158 -0
  667. data/lib/studium/utility_scripts/foreign_language_percentage/report.rb +62 -0
  668. data/lib/studium/utility_scripts/foreign_language_percentage/reset.rb +50 -0
  669. data/lib/studium/utility_scripts/foreign_language_percentage/run.rb +19 -0
  670. data/lib/studium/utility_scripts/generate_spreadsheet/generate_spreadsheet.rb +354 -0
  671. data/lib/studium/utility_scripts/generate_spreadsheet/misc.rb +144 -0
  672. data/lib/studium/utility_scripts/holidays/holidays.rb +150 -0
  673. data/lib/studium/utility_scripts/homepage_of_these_courses.rb +118 -0
  674. data/lib/studium/utility_scripts/lecture_downloader.rb +107 -0
  675. data/lib/studium/utility_scripts/lectures_attributed_to_universities.rb +336 -0
  676. data/lib/studium/utility_scripts/lva_dates_of_the_important_courses.rb +111 -0
  677. data/lib/studium/utility_scripts/lva_nummer.rb +431 -0
  678. data/lib/studium/utility_scripts/mandatory_lectures_in_this_month/mandatory_lectures_in_this_month.rb +316 -0
  679. data/lib/studium/utility_scripts/name_of_this_lva_id.rb +110 -0
  680. data/lib/studium/utility_scripts/new_stud.rb +324 -0
  681. data/lib/studium/utility_scripts/next_week.rb +103 -0
  682. data/lib/studium/utility_scripts/open_last_exam_question_url_link_via_the_browser.rb +76 -0
  683. data/lib/studium/utility_scripts/passed_ects_per_year/passed_ects_per_year.rb +177 -0
  684. data/lib/studium/utility_scripts/passed_pr/303/274fungsimmanente_courses/passed_pr/303/274fungsimmanente_courses.rb +181 -0
  685. data/lib/studium/utility_scripts/pdf/README.md +2 -0
  686. data/lib/studium/utility_scripts/pdf/create_pdf_file_for_this_exam_topic.rb +355 -0
  687. data/lib/studium/utility_scripts/pdf/hexapdf_support.rb +50 -0
  688. data/lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb +312 -0
  689. data/lib/studium/utility_scripts/priority.rb +164 -0
  690. data/lib/studium/utility_scripts/priority_points/priority_points.rb +263 -0
  691. data/lib/studium/utility_scripts/publish_my_exams.rb +174 -0
  692. data/lib/studium/utility_scripts/regexes/README.md +1 -0
  693. data/lib/studium/utility_scripts/regexes/generate_regex.rb +300 -0
  694. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_available_moodle_links.rb +55 -0
  695. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_registered_lectures.rb +48 -0
  696. data/lib/studium/utility_scripts/report_outdated_timetable_entries/report_outdated_timetable_entries.rb +142 -0
  697. data/lib/studium/utility_scripts/report_total_amount_of_questions_and_answers_for.rb +116 -0
  698. data/lib/studium/utility_scripts/report_whether_this_lecture_is_registered_in_the_file_lecture_information.rb +128 -0
  699. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/individual_resolve_practical_courses_date_conflicts.rb +254 -0
  700. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/resolve_practical_courses_date_conflicts.rb +265 -0
  701. data/lib/studium/utility_scripts/scrape_remote_university_url.rb +138 -0
  702. data/lib/studium/utility_scripts/semester_schedule_creator/semester_container.rb +144 -0
  703. data/lib/studium/utility_scripts/semester_schedule_creator/semester_schedule_creator.rb +374 -0
  704. data/lib/studium/utility_scripts/semesterplaner.rb +289 -0
  705. data/lib/studium/utility_scripts/set_aliases_based_on_this_file.rb +95 -0
  706. data/lib/studium/utility_scripts/show_all_passed_master_lectures.rb +119 -0
  707. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/show_conflicting_lva_lectures.rb +1238 -0
  708. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/constants.rb +23 -0
  709. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/menu.rb +63 -0
  710. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/reset.rb +33 -0
  711. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/run.rb +50 -0
  712. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/show_descriptions_of_lectures_belonging_to_this_module.rb +145 -0
  713. data/lib/studium/utility_scripts/show_lecturers/show_lecturers.rb +147 -0
  714. data/lib/studium/utility_scripts/show_lectures/constants.rb +11 -0
  715. data/lib/studium/utility_scripts/show_lectures/help.rb +34 -0
  716. data/lib/studium/utility_scripts/show_lectures/initialize.rb +23 -0
  717. data/lib/studium/utility_scripts/show_lectures/menu.rb +127 -0
  718. data/lib/studium/utility_scripts/show_lectures/misc.rb +584 -0
  719. data/lib/studium/utility_scripts/show_lectures/reset.rb +89 -0
  720. data/lib/studium/utility_scripts/show_lectures/run.rb +27 -0
  721. data/lib/studium/utility_scripts/show_lectures/show_lectures.rb +48 -0
  722. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_language/show_lectures_fitting_to_this_language.rb +121 -0
  723. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_theme/show_lectures_fitting_to_this_theme.rb +105 -0
  724. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/constants.rb +17 -0
  725. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/determine.rb +673 -0
  726. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/help.rb +44 -0
  727. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/html.rb +605 -0
  728. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/initialize.rb +56 -0
  729. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/konsole.rb +32 -0
  730. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/menu.rb +472 -0
  731. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/misc.rb +837 -0
  732. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/reset.rb +121 -0
  733. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/run.rb +44 -0
  734. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/show.rb +106 -0
  735. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb +261 -0
  736. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/sorted_individual_curricula.rb +121 -0
  737. data/lib/studium/utility_scripts/show_lectures_on_this_day.rb +149 -0
  738. data/lib/studium/utility_scripts/show_lva_dates_of_this_lecture.rb +169 -0
  739. data/lib/studium/utility_scripts/show_mixed_bachelor_master_courses/show_mixed_bachelor_master_courses.rb +91 -0
  740. data/lib/studium/utility_scripts/show_outdated_lva_dates/show_outdated_lva_dates.rb +210 -0
  741. data/lib/studium/utility_scripts/show_solved_english_lectures/show_solved_english_lectures.rb +139 -0
  742. data/lib/studium/utility_scripts/steop/README.md +4 -0
  743. data/lib/studium/utility_scripts/steop/show_all_steop_lectures.rb +93 -0
  744. data/lib/studium/utility_scripts/steop/steop_lectures_in_this_curriculum.rb +284 -0
  745. data/lib/studium/utility_scripts/steop/steop_lva_dates.rb +119 -0
  746. data/lib/studium/utility_scripts/studienkennzahl.rb +116 -0
  747. data/lib/studium/utility_scripts/studium_skeleton/studium_skeleton.rb +227 -0
  748. data/lib/studium/utility_scripts/stundenplan.rb +595 -0
  749. data/lib/studium/utility_scripts/sync_studium_relevant_entries_one_level_downwards.rb +217 -0
  750. data/lib/studium/utility_scripts/ufind/ufind.rb +98 -0
  751. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/constants.rb +26 -0
  752. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/run.rb +20 -0
  753. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/upcoming_mandatory_presence_courses.rb +181 -0
  754. data/lib/studium/utility_scripts/week_parser/constants.rb +23 -0
  755. data/lib/studium/utility_scripts/week_parser/help.rb +32 -0
  756. data/lib/studium/utility_scripts/week_parser/menu.rb +59 -0
  757. data/lib/studium/utility_scripts/week_parser/misc.rb +373 -0
  758. data/lib/studium/utility_scripts/week_parser/reset.rb +65 -0
  759. data/lib/studium/utility_scripts/week_parser/run.rb +18 -0
  760. data/lib/studium/utility_scripts/week_parser/show.rb +236 -0
  761. data/lib/studium/utility_scripts/week_parser/week_parser.rb +49 -0
  762. data/lib/studium/utility_scripts/weekday_parser.rb +155 -0
  763. data/lib/studium/utility_scripts/weekly_schedule.rb +198 -0
  764. data/lib/studium/utility_scripts/wochenplanung.rb +261 -0
  765. data/lib/studium/version/version.rb +46 -0
  766. data/lib/studium/www/curricula_displayer.cgi +197 -0
  767. data/lib/studium/www/curriculum_displayer.rb +162 -0
  768. data/lib/studium/www/exams.cgi +53 -0
  769. data/lib/studium/www/fast_ask_exam_question.cgi +155 -0
  770. data/lib/studium/www/sinatra/app.rb +231 -0
  771. data/lib/studium/www/sinatra/misc.rb +115 -0
  772. data/lib/studium/www/statistics/statistics.cgi +59 -0
  773. data/lib/studium/yaml/ad_hoc_trainer/README.md +2 -0
  774. data/lib/studium/yaml/ad_hoc_trainer/exam_topics.md +15 -0
  775. data/lib/studium/yaml/allowed_themes_for_exams.yml +344 -0
  776. data/lib/studium/yaml/array_allowed_entries_for_the_file_lecture_information.yml +70 -0
  777. data/lib/studium/yaml/available_exam_topics/available_exam_topics.yml +234 -0
  778. data/lib/studium/yaml/backlog_of_exams.yml +37 -0
  779. data/lib/studium/yaml/colours/custom_colours.yml +28 -0
  780. data/lib/studium/yaml/colours/use_colours.yml +1 -0
  781. data/lib/studium/yaml/current_exams.yml +19 -0
  782. data/lib/studium/yaml/curricula/README.md +9 -0
  783. data/lib/studium/yaml/curricula/bachelor/bachelor_agrarwissenschaften_033255.yml +142 -0
  784. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_basisblock_033630.yml +65 -0
  785. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_botanik_033630.yml +84 -0
  786. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_ecology_033630.yml +74 -0
  787. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_mikrobiologie_und_genetik_033630.yml +120 -0
  788. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_molekulare_biologie_033630.yml +104 -0
  789. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_zoologie_033630.yml +87 -0
  790. data/lib/studium/yaml/curricula/bachelor/bachelor_chemie_033662.yml +165 -0
  791. data/lib/studium/yaml/curricula/bachelor/bachelor_dummy_curriculum.yml +183 -0
  792. data/lib/studium/yaml/curricula/bachelor/bachelor_elektrotechnik_und_informationstechnik_033235.yml +13 -0
  793. data/lib/studium/yaml/curricula/bachelor/bachelor_forstwirtschaft_033225.yml +115 -0
  794. data/lib/studium/yaml/curricula/bachelor/bachelor_informatik_033521.yml +130 -0
  795. data/lib/studium/yaml/curricula/bachelor/bachelor_ktww_033231.yml +84 -0
  796. data/lib/studium/yaml/curricula/bachelor/bachelor_lmbt_033217.yml +118 -0
  797. data/lib/studium/yaml/curricula/bachelor/bachelor_medizinische_informatik_033533.yml +203 -0
  798. data/lib/studium/yaml/curricula/bachelor/bachelor_molekularbiologie_033665.yml +95 -0
  799. data/lib/studium/yaml/curricula/bachelor/bachelor_nutrition_science_033638.yml +119 -0
  800. data/lib/studium/yaml/curricula/bachelor/bachelor_pharmazie_033305.yml +170 -0
  801. data/lib/studium/yaml/curricula/bachelor/bachelor_technische_chemie_033290.yml +129 -0
  802. data/lib/studium/yaml/curricula/bachelor/bachelor_technische_informatik_033535.yml +23 -0
  803. data/lib/studium/yaml/curricula/bachelor/bachelor_ubrm_033227.yml +136 -0
  804. data/lib/studium/yaml/curricula/bachelor/bachelor_verfahrenstechnik_033273.yml +167 -0
  805. data/lib/studium/yaml/curricula/bachelor/bachelor_wirtschaftsinformatik_033526.yml +29 -0
  806. data/lib/studium/yaml/curricula/individual/bachelor_informatik_und_molekulare_biologie.yml +1161 -0
  807. data/lib/studium/yaml/curricula/individual/bachelor_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +1157 -0
  808. data/lib/studium/yaml/curricula/individual/master_bioinformatics_and_nanobiotechnology_in_molecular_medicine.yml +306 -0
  809. data/lib/studium/yaml/curricula/individual/master_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +741 -0
  810. data/lib/studium/yaml/curricula/master/master_bioinformatik_066875.yml +76 -0
  811. data/lib/studium/yaml/curricula/master/master_biologie_molekulare_mikrobiologie_mikrobielle_oekologie_und_immunbiologie_066830.yml +78 -0
  812. data/lib/studium/yaml/curricula/master/master_biologische_chemie_066863.yml +61 -0
  813. data/lib/studium/yaml/curricula/master/master_dummy_curriculum.yml +197 -0
  814. data/lib/studium/yaml/curricula/master/master_genetik_und_entwicklungsbiologie_066877.yml +89 -0
  815. data/lib/studium/yaml/curricula/master/master_lmbt_066418.yml +111 -0
  816. data/lib/studium/yaml/curricula/master/master_molekulare_biologie_066834.yml +142 -0
  817. data/lib/studium/yaml/curricula/master/master_pharmazie_066605.yml +170 -0
  818. data/lib/studium/yaml/curricula/master/master_technische_chemie_066490.yml +123 -0
  819. data/lib/studium/yaml/curricula/outdated/master_bioinformatics_and_molecular_biotechnology_including_aspects_from_molecular_medicine.yml +438 -0
  820. data/lib/studium/yaml/curricula/outdated/master_food_science_and_plant_biotechnology.yml +31 -0
  821. data/lib/studium/yaml/curricula.yml +538 -0
  822. data/lib/studium/yaml/daily_questions_solved.yml +1468 -0
  823. data/lib/studium/yaml/default_delay.yml +4 -0
  824. data/lib/studium/yaml/default_encoding.yml +1 -0
  825. data/lib/studium/yaml/directory_to_the_exam_topics.yml +0 -0
  826. data/lib/studium/yaml/editor.yml +1 -0
  827. data/lib/studium/yaml/file_for_exam_questions.yml +1 -0
  828. data/lib/studium/yaml/german/README.md +2 -0
  829. data/lib/studium/yaml/german/german_to_english_month_names.yml +16 -0
  830. data/lib/studium/yaml/grouped_themes.yml +192 -0
  831. data/lib/studium/yaml/holidays.yml +194 -0
  832. data/lib/studium/yaml/important_exams.yml +226 -0
  833. data/lib/studium/yaml/inscription_dates_of_universities.yml +60 -0
  834. data/lib/studium/yaml/lecture_aliases.yml +138 -0
  835. data/lib/studium/yaml/lecture_information/lecture_information.yml +55870 -0
  836. data/lib/studium/yaml/log_dir.yml +1 -0
  837. data/lib/studium/yaml/main_topic.yml +11 -0
  838. data/lib/studium/yaml/max_stats.yml +241 -0
  839. data/lib/studium/yaml/meta_themes/README.md +13 -0
  840. data/lib/studium/yaml/meta_themes/biochemistry.md +6 -0
  841. data/lib/studium/yaml/meta_themes/bioinformatics.md +6 -0
  842. data/lib/studium/yaml/meta_themes/biotechnology.md +9 -0
  843. data/lib/studium/yaml/meta_themes/chemistry.md +9 -0
  844. data/lib/studium/yaml/meta_themes/genetics.md +10 -0
  845. data/lib/studium/yaml/meta_themes/immunology.md +5 -0
  846. data/lib/studium/yaml/meta_themes/metabolic_pathways.md +12 -0
  847. data/lib/studium/yaml/meta_themes/molecular_biology.md +9 -0
  848. data/lib/studium/yaml/meta_themes/protein_engineering.md +10 -0
  849. data/lib/studium/yaml/meta_themes/statistics.md +2 -0
  850. data/lib/studium/yaml/mitbelegung/README.md +4 -0
  851. data/lib/studium/yaml/mitbelegung/mitbelegung.yml +23 -0
  852. data/lib/studium/yaml/mitteilungsbl/303/244tter/mitteilungsbl/303/244tter.yml +363 -0
  853. data/lib/studium/yaml/n_total_questions.yml +1 -0
  854. data/lib/studium/yaml/rename_konsole_tab.yml +1 -0
  855. data/lib/studium/yaml/show_topic.yml +1 -0
  856. data/lib/studium/yaml/statistics/max_stats.yml +239 -0
  857. data/lib/studium/yaml/statistics/statistics.yml +69 -0
  858. data/lib/studium/yaml/week/01_monday.yml +5 -0
  859. data/lib/studium/yaml/week/02_tuesday.yml +75 -0
  860. data/lib/studium/yaml/week/03_wednesday.yml +62 -0
  861. data/lib/studium/yaml/week/04_thursday.yml +14 -0
  862. data/lib/studium/yaml/week/05_friday.yml +31 -0
  863. data/lib/studium/yaml/week/06_saturday.yml +16 -0
  864. data/lib/studium/yaml/week/07_sunday.yml +0 -0
  865. data/lib/studium/yaml/week/README.md +13 -0
  866. data/lib/studium.rb +5 -0
  867. data/studium.gemspec +80 -0
  868. data/test/testing_studium.rb +244 -0
  869. data/test/testing_studium_base_class.rb +17 -0
  870. data/test/testing_time_component.rb +29 -0
  871. metadata +1078 -0
@@ -0,0 +1,1956 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === Studium::Exams::MandatoryContinuousAssessment
6
+ #
7
+ # This class allows us to determine how many exams that are "prüfungsimmanent"
8
+ # were passed already. That word means "mandatory continuous assessment"
9
+ # which usually means a seminar or a practical course that takes e. g.
10
+ # 1-3 weeks of daily participation.
11
+ #
12
+ # Usage example:
13
+ #
14
+ # Studium::Exams::MandatoryContinuousAssessment.new(ARGV)
15
+ #
16
+ # =========================================================================== #
17
+ # require 'studium/exams/mandatory_continuous_assessment/mandatory_continuous_assessment.rb'
18
+ # =========================================================================== #
19
+ require 'studium/base/base.rb'
20
+
21
+ module Studium
22
+
23
+ module Exams
24
+
25
+ class MandatoryContinuousAssessment < Studium::Base
26
+
27
+ require 'studium/toplevel_methods/sanitized_dataset_from_file_passed_exams_per_month.rb'
28
+ require 'studium/curricula/n_percent_solved_in_this_curriculum.rb'
29
+
30
+ # ========================================================================= #
31
+ # === N_TOKENS_FOR_THE_SPRINGREEN_SPACER
32
+ # ========================================================================= #
33
+ N_TOKENS_FOR_THE_SPRINGREEN_SPACER = 132
34
+
35
+ # ========================================================================= #
36
+ # === initialize
37
+ # ========================================================================= #
38
+ def initialize(
39
+ i = nil,
40
+ run_already = true
41
+ )
42
+ reset
43
+ set_original_commandline(i)
44
+ set_input(i)
45
+ case run_already
46
+ when :do_not_run_yet,
47
+ :dont_run_yet
48
+ run_already = false
49
+ end
50
+ if block_given?
51
+ yielded = yield
52
+ case yielded
53
+ # ===================================================================== #
54
+ # === :do_not_report_the_title
55
+ # ===================================================================== #
56
+ when :do_not_report_the_title
57
+ @show_the_title_of_the_curriculum = false
58
+ # ===================================================================== #
59
+ # === :do_not_report_anything
60
+ # ===================================================================== #
61
+ when :do_not_report_anything
62
+ do_not_report_anything
63
+ end
64
+ end
65
+ run if run_already
66
+ end
67
+
68
+ # ========================================================================= #
69
+ # === reset (reset tag)
70
+ # ========================================================================= #
71
+ def reset
72
+ super()
73
+ infer_the_namespace
74
+ # ======================================================================= #
75
+ # === @dataset_from_the_file_lecture_information
76
+ #
77
+ # Obtain the dataset that we have stored in the file called
78
+ # "lecture_information.yml" next.
79
+ # ======================================================================= #
80
+ @dataset_from_the_file_lecture_information =
81
+ Studium.return_sanitized_dataset_from_the_file_lecture_information
82
+ reset_this_instance
83
+ # ======================================================================= #
84
+ # === @use_spacer_to_separate_a_new_year
85
+ # ======================================================================= #
86
+ @use_spacer_to_separate_a_new_year = false
87
+ # ======================================================================= #
88
+ # === @do_report_the_findings
89
+ # ======================================================================= #
90
+ @do_report_the_findings = true
91
+ end
92
+
93
+ # ========================================================================= #
94
+ # === location_of (location_of tag)
95
+ #
96
+ # Return the location of the curriculum locally, based on symbol
97
+ # "shortcuts" such as :bachelor_vektoren.
98
+ # ========================================================================= #
99
+ def location_of(
100
+ i = :bachelor_vektoren,
101
+ also_assign_new_title = true
102
+ )
103
+ i = i.to_sym unless i.is_a?(Symbol)
104
+ case i # case tag
105
+ # ======================================================================= #
106
+ # This is the bachelorcurriculum at the TU Vienna, Medizinische Informatik.
107
+ # ======================================================================= #
108
+ when :bachelor_medizinische_informatik
109
+ set_title(i) if also_assign_new_title
110
+ i = return_file_for_this_curriculum(i)
111
+ # ======================================================================= #
112
+ # The Bachelorcurriculum "Biologische Informatik"
113
+ # ======================================================================= #
114
+ when :bachelor_biologische_informatik,
115
+ :bachelor_informatik_und_molekulare_biologie,
116
+ :indi1
117
+ set_title(i) if also_assign_new_title
118
+ i = return_file_for_this_curriculum(i)
119
+ # ======================================================================= #
120
+ # The Bachelorcurriculum "Bachelorcurriculum (Bio)Informatik und
121
+ # molekulare Biotechnologie, unter
122
+ # Berücksichtigung medizinisch-immunologischer
123
+ # Aspekte"
124
+ # an der BOKU. Wurde im Jahre 2022 umbenannt.
125
+ # ======================================================================= #
126
+ when :bachelor_informatik_und_biotechnologie_unter_berücksichtigung_immunanalytisch_molekularmedizinischer_aspekte,
127
+ :bachelor_bioinformatik_und_molekulare_biotechnologie,
128
+ :indi2
129
+ set_title(i) if also_assign_new_title
130
+ i = return_file_for_this_curriculum(i)
131
+ # ======================================================================= #
132
+ # The Bachelorcurriculum "Ernährungswissenschaften" at the Uni-Vienna.
133
+ # ======================================================================= #
134
+ when :bachelor_nutrition_science
135
+ set_title(i) if also_assign_new_title
136
+ i = return_file_for_this_curriculum(i)
137
+ # ======================================================================= #
138
+ # This is the general dummy curriculum. It can be used to quickly
139
+ # test a new curriculum quickly.
140
+ # ======================================================================= #
141
+ when :bachelor_dummy_curriculum
142
+ set_title(i) if also_assign_new_title
143
+ i = return_file_for_this_curriculum(i)
144
+ # ======================================================================= #
145
+ # The Bachelorcurriculum "Molekularbiologie" at the Uni-Graz.
146
+ # ======================================================================= #
147
+ when :bachelor_molekularbiologie,
148
+ :bachelor_molekularbiologie_curriculum,
149
+ :bachelor_molekularbiologie_graz
150
+ set_title(i) if also_assign_new_title
151
+ i = return_file_for_this_curriculum(i)
152
+ # ======================================================================= #
153
+ # The Bachelorcurriculum "Pharmazie" at the University of Vienna.
154
+ # ======================================================================= #
155
+ when :bachelor_pharmazie
156
+ set_title(i) if also_assign_new_title
157
+ i = return_file_for_this_curriculum(i)
158
+ # ======================================================================= #
159
+ # The Mastercurriculum "Pharmazie" at the University of Vienna.
160
+ # ======================================================================= #
161
+ when :master_pharmazie
162
+ set_title(i) if also_assign_new_title
163
+ i = return_file_for_this_curriculum(i)
164
+ # ======================================================================= #
165
+ # The bachelor curriculum chemistry at the University of Vienna.
166
+ # ======================================================================= #
167
+ when :bachelor_chemistry, # mandatory --bachelor_chemistry
168
+ :bachelor_chemie
169
+ set_title(i) if also_assign_new_title
170
+ i = return_file_for_this_curriculum(i)
171
+ # ======================================================================= #
172
+ # The bachelor-curriculum Technische Chemie
173
+ # ======================================================================= #
174
+ when :bachelor_technische_chemie
175
+ set_title(i) if also_assign_new_title
176
+ i = return_file_for_this_curriculum(i)
177
+ # ======================================================================= #
178
+ # The individual bachelor mikrobiologie curriculum
179
+ # ======================================================================= #
180
+ when :bachelor_mikrobiologie
181
+ set_title(i) if also_assign_new_title
182
+ i = return_file_for_this_curriculum(i)
183
+ # ======================================================================= #
184
+ # The individual master vector curriculum at the University of Vienna.
185
+ # ======================================================================= #
186
+ when :master_vektoren
187
+ set_title(i) if also_assign_new_title
188
+ i = return_file_for_this_curriculum(i)
189
+ # ======================================================================= #
190
+ # The master genetik und entwicklungsbiologie.
191
+ # ======================================================================= #
192
+ when :master_genetik_und_entwicklungsbiologie
193
+ set_title(i) if also_assign_new_title
194
+ i = return_file_for_this_curriculum(i)
195
+ # ======================================================================= #
196
+ # The master biotechnology curriculum at the TU Vienna.
197
+ # ======================================================================= #
198
+ when :master_tuvienna_biotechnology,
199
+ :master_tu_vienna_biotechnology
200
+ set_title(i) if also_assign_new_title
201
+ i = return_file_for_this_curriculum(i)
202
+ # ======================================================================= #
203
+ # This is the bachelor-curriculum molbio at the University of Vienna.
204
+ # ======================================================================= #
205
+ when :bachelor_molekulare_biologie,
206
+ :bachelor_molbio
207
+ set_title(i) if also_assign_new_title
208
+ i = return_file_for_this_curriculum(i)
209
+ # ======================================================================= #
210
+ # This is the BOKU Bachelor Agrarwissenschaften curriculum.
211
+ # ======================================================================= #
212
+ when :bachelor_agrarwissenschaften
213
+ set_title(i) if also_assign_new_title
214
+ i = return_file_for_this_curriculum(i)
215
+ # ======================================================================= #
216
+ # The individual bachelor vector curriculum at the University of Vienna.
217
+ # ======================================================================= #
218
+ when :bachelor_vektoren
219
+ set_title(i) if also_assign_new_title
220
+ i = return_file_for_this_curriculum(i)
221
+ # ======================================================================= #
222
+ # The bachelor LMBT curriculum at the BOKU Vienna.
223
+ # ======================================================================= #
224
+ when :bachelor_lmbt,
225
+ :lmbt
226
+ set_title(i) if also_assign_new_title
227
+ i = return_file_for_this_curriculum(i)
228
+ # ======================================================================= #
229
+ # === :master_lmbt
230
+ # ======================================================================= #
231
+ when :master_lmbt
232
+ set_title(i) if also_assign_new_title
233
+ # ======================================================================= #
234
+ # The master Immunbiology at the University of Vienna.
235
+ # ======================================================================= #
236
+ when :master_immuno
237
+ set_title(i) if also_assign_new_title
238
+ i = return_file_for_this_curriculum(i)
239
+ # ======================================================================= #
240
+ # :master_molbio
241
+ # ======================================================================= #
242
+ when :master_molbio
243
+ set_title(i) if also_assign_new_title
244
+ i = FILE_MASTER_MOLBIO
245
+ # ======================================================================= #
246
+ # :bachelor_biologie_basisblock
247
+ # ======================================================================= #
248
+ when :bachelor_biologie_basisblock
249
+ set_title(i) if also_assign_new_title
250
+ i = FILE_BACHELOR_BIOLOGIE_BASISBLOCK
251
+ # ======================================================================= #
252
+ # :bachelor_genetik
253
+ # ======================================================================= #
254
+ when :bachelor_genetik
255
+ set_title(i) if also_assign_new_title
256
+ i = FILE_BACHELOR_GENETIK
257
+ # ======================================================================= #
258
+ # :bachelor_ernährungswissenschaften
259
+ # ======================================================================= #
260
+ when :bachelor_ernährungswissenschaften
261
+ set_title(i) if also_assign_new_title
262
+ i = FILE_BACHELOR_ERNÄHRUNGSWISSENSCHAFTEN
263
+ end
264
+ return i
265
+ end
266
+
267
+ # ========================================================================= #
268
+ # === display_this_array_including_only_mandatory_continuous_assessment_lectures
269
+ #
270
+ # The input to this method will be an Array of mandatory continuous
271
+ # assessment lectures.
272
+ # ========================================================================= #
273
+ def display_this_array_including_only_mandatory_continuous_assessment_lectures(
274
+ array, be_verbose = be_verbose?
275
+ )
276
+ case be_verbose
277
+ # ======================================================================= #
278
+ # === nil
279
+ # ======================================================================= #
280
+ when nil
281
+ be_verbose = be_verbose?
282
+ # ======================================================================= #
283
+ # === :be_verbose
284
+ # ======================================================================= #
285
+ when :be_verbose
286
+ be_verbose = true
287
+ end
288
+ consider_displaying_the_title_of_the_curriculum
289
+ # ======================================================================= #
290
+ # Sometimes the input may be a String. In this case, split it up.
291
+ # ======================================================================= #
292
+ if array.is_a? String
293
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(
294
+ array.split(N)
295
+ )
296
+ end
297
+ # ======================================================================= #
298
+ # Next we can display the result.
299
+ # ======================================================================= #
300
+ sorted_array = array.map {|line|
301
+ line.delete('"')
302
+ }.sort
303
+ sorted_array.each {|line|
304
+ # ===================================================================== #
305
+ # Up to 05.11.2019 this code used to read in the content of a file,
306
+ # but since that day we will instead obtain the information from
307
+ # the file called "lecture_information.yml" instead. A useful
308
+ # side-effect of this is that this approach should be faster
309
+ # than using regexes.
310
+ # ===================================================================== #
311
+ line.strip!
312
+ if line.include? '#'
313
+ line = line[0 .. (line.index('#')-1)]
314
+ line.strip!
315
+ end
316
+ line.squeeze!(' ')
317
+ if @dataset_from_the_file_lecture_information[line].nil?
318
+ opnn; e 'A nil-value was found, for line '+steelblue(line)+'.'
319
+ opnn; e 'Continuing nonetheless.'
320
+ #exit
321
+ else
322
+ n_ects_points = @dataset_from_the_file_lecture_information[line][:ects]
323
+ type_of_the_lecture = @dataset_from_the_file_lecture_information[line][:type]
324
+ # ===================================================================== #
325
+ # Instantly ensure that we have a valid amount of ECTS points.
326
+ # ===================================================================== #
327
+ if n_ects_points == 0.0
328
+ opnn; e swarn('We encountered a problem, a 0.0 ECTS lecture, at: ')+
329
+ lightgreen(line)
330
+ end
331
+ # ===================================================================== #
332
+ # Left-pad the lecture ID.
333
+ # ===================================================================== #
334
+ if line.include? ' '
335
+ splitted = line.split(' ')
336
+ splitted[0] = splitted[0].ljust(7)
337
+ name = splitted.join(' ')
338
+ end
339
+ @total_amount_of_mandatory_continuous_assessment_ECTS_points_in_this_curriculum += n_ects_points
340
+ if be_verbose and @do_report_the_findings
341
+ e ' '+orange(
342
+ name.ljust(93)
343
+ )+' '+mediumpurple(
344
+ n_ects_points.to_s.rjust(4)
345
+ )+' ECTS points '+
346
+ seagreen(type_of_the_lecture.to_s.rjust(4)) # <- Last part is type of the lecture.
347
+ end
348
+ end
349
+ }
350
+ e if be_verbose and @do_report_the_findings
351
+ do_calculate_the_percentage
352
+ # ======================================================================= #
353
+ # Next, report the total amount of ECTS and some more information.
354
+ # ======================================================================= #
355
+ if be_verbose and @do_report_the_findings
356
+ e 'Total amount of ECTS points: '+
357
+ crimson(@total_amount_of_mandatory_continuous_assessment_ECTS_points_in_this_curriculum.to_s)+
358
+ lightblue(' (== ')+seagreen(n_percent?.round(2).to_s+'%')+
359
+ lightblue(' of '+@internal_hash[:total_amount_of_ECTS_points_in_the_curriculum].to_s+
360
+ ' ECTS points in total)')
361
+ end
362
+ end
363
+
364
+ # ========================================================================= #
365
+ # === set_input
366
+ # ========================================================================= #
367
+ def set_input(
368
+ i = ''
369
+ )
370
+ if i.is_a? Array # Intercept Arrays here.
371
+ if i.empty?
372
+ i << '--all' # This is the default value since as of May 2017.
373
+ end
374
+ end
375
+ if i.is_a? Array
376
+ i = menu(i)
377
+ i = i.join(' ').strip
378
+ end
379
+ i = i.to_s.dup
380
+ @input = i
381
+ end
382
+
383
+ # ========================================================================= #
384
+ # === return_entries_that_are_of_mandatory_continuous_assessment_type
385
+ #
386
+ # The input to this method is assumed to come from a file, but you
387
+ # can also load up a String. In that case, we will split on newlines.
388
+ # ========================================================================= #
389
+ def return_entries_that_are_of_mandatory_continuous_assessment_type(i)
390
+ if i.is_a? String
391
+ i = i.split(N) # Split on newlines.
392
+ end
393
+ i.flatten! if i.is_a? Array
394
+ i.reject! {|line|
395
+ line.strip.start_with?('#') or
396
+ line.strip.empty?
397
+ }
398
+ i.map!(&:strip)
399
+ i.select! {|line|
400
+ line.strip!
401
+ # ===================================================================== #
402
+ # We need to be careful here, because the line may either end with e.
403
+ # g. "VO", or it may end with "VO, BOKU WIEN". The latter would then
404
+ # cause the follow-up code to fail, so we have to filter way such
405
+ # parts first.
406
+ # ===================================================================== #
407
+ if line.end_with? 'BOKU'
408
+ line.sub!(/BOKU$/,'')
409
+ line.strip!
410
+ end
411
+ if line.end_with?('WIEN') or line.end_with?('Wien')
412
+ # =================================================================== #
413
+ # First remove "WIEN" at the end of the line, then strip on the line.
414
+ # =================================================================== #
415
+ line.sub!(/WIEN$/,'')
416
+ line.sub!(/Wien$/,'') if line.end_with? 'Wien'
417
+ line.strip!
418
+ line.sub!(/Uni$/,'') if line.end_with? 'Uni'
419
+ line.strip!
420
+ # =================================================================== #
421
+ # Still have TU, BOKU, VETMED and MEDUNI
422
+ # =================================================================== #
423
+ line.sub!(/BOKU$/,'') if line.end_with? 'BOKU'
424
+ line.sub!(/TU$/,'') if line.end_with? 'TU'
425
+ line.sub!(/VETMED$/,'') if line.end_with? 'VETMED'
426
+ line.sub!(/MEDUNI$/,'') if line.include? 'MEDUNI' # Must come before "UNI".
427
+ line.sub!(/UNI$/,'') if line.end_with? 'UNI'
428
+ line.strip!
429
+ end
430
+ line.chop! if line.end_with? ','
431
+ last_two_characters = line[-2,2]
432
+ ARRAY_LECTURE_TYPES_THAT_ARE_MANDATORY_CONTINUOUS_ASSESSMENT.include? last_two_characters
433
+ }
434
+ return i
435
+ end
436
+
437
+ # ========================================================================= #
438
+ # === original_commandline?
439
+ # ========================================================================= #
440
+ def original_commandline?
441
+ @original_commandline
442
+ end; alias commandline? original_commandline? # === commandline?
443
+ alias commandline_arguments? original_commandline? # === commandline_arguments?
444
+
445
+ # ========================================================================= #
446
+ # === total_amount_of_ects_points_in_the_curriculum
447
+ # ========================================================================= #
448
+ def total_amount_of_ects_points_in_the_curriculum?
449
+ @internal_hash[:total_amount_of_ECTS_points_in_the_curriculum]
450
+ end; alias n_total_ects_points total_amount_of_ects_points_in_the_curriculum? # === n_total_ects_points
451
+
452
+ # ========================================================================= #
453
+ # === input?
454
+ # ========================================================================= #
455
+ def input?
456
+ @input
457
+ end
458
+
459
+ # ========================================================================= #
460
+ # === set_percentage
461
+ # ========================================================================= #
462
+ def set_percentage(i)
463
+ @internal_hash[:percentage] = i.to_f
464
+ end
465
+
466
+ # ========================================================================= #
467
+ # === epowderblue
468
+ # ========================================================================= #
469
+ def epowderblue(i)
470
+ e powderblue(i) if @do_report_the_findings
471
+ end
472
+
473
+ # ========================================================================= #
474
+ # === try_to_find_this_curriculum
475
+ #
476
+ # The second argument to this method will also show the curriculum
477
+ # number (and the name of the curriculum).
478
+ # ========================================================================= #
479
+ def try_to_find_this_curriculum(
480
+ i, optional_index = nil
481
+ )
482
+ if optional_index and @do_report_the_findings
483
+ # ===================================================================== #
484
+ # Report the curriculum number in this case.
485
+ # ===================================================================== #
486
+ e
487
+ e springgreen('Curriculum number: ')+
488
+ slateblue(optional_index.to_s)+
489
+ limegreen(" (#{name_of_the_curriculum?})")
490
+ e
491
+ end
492
+ be_verbose = be_verbose?
493
+ if block_given?
494
+ yielded = yield
495
+ case yielded
496
+ when :be_verbose
497
+ be_verbose = true
498
+ end
499
+ end
500
+ # ======================================================================= #
501
+ # In the following when-entries, it may be better to hardcode the
502
+ # path via a symbol such as :bachelor_mikrobiologie, since the
503
+ # given input may be so disparate.
504
+ # ======================================================================= #
505
+ case i.delete('-') # case tag
506
+ # ======================================================================= #
507
+ # === bachelor_medizinische_informatik
508
+ # ======================================================================= #
509
+ when /^-?-?bachelor(-|_)?medizinische(-|_)?informatik/
510
+ do_assume_180_ects_points
511
+ set_title :bachelor_medizinische_informatik
512
+ array = readlines(location_of(i)).flatten
513
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
514
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
515
+ # ======================================================================= #
516
+ # === bachelor_biologische_informatik
517
+ # ======================================================================= #
518
+ when /^-?-?bachelor(-|_)?biologische(-|_)?informatik$/i,
519
+ /^-?-?bachelor(-|_)?informatik(-|_)?und(-|_)?molekulare(-|_)?biologie$/i,
520
+ /^-?-?indi1$/i
521
+ array = readlines(location_of(:bachelor_informatik_und_molekulare_biologie)).flatten
522
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
523
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
524
+ # ======================================================================= #
525
+ # === bachelor_bioinformatik_und_molekulare_biotechnologie
526
+ # ======================================================================= #
527
+ when /^-?-?bachelor(-|_)?bioinformatik(-|_)?und(-|_)?molekulare(-|_)?biotechnologie$/i
528
+ array = readlines(location_of(:bachelor_bioinformatik_und_molekulare_biotechnologie)).flatten
529
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
530
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
531
+ # ======================================================================= #
532
+ # === bachelor_dummy_curriculum
533
+ # ======================================================================= #
534
+ when /^-?-?bachelor(-|_)?dummy(-|_)?curriculum$/i,
535
+ /^-?-?dummy$/i
536
+ array = readlines(location_of(:bachelor_dummy_curriculum)).flatten
537
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
538
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
539
+ # ======================================================================= #
540
+ # === mandatory vector_bachelor
541
+ #
542
+ # Show only the 180.0 ECTS Bachelor of the vector-curriculum.
543
+ # ======================================================================= #
544
+ when '4',
545
+ /^vector_?bachelor/,
546
+ /bachelor_?vector/,
547
+ /^-?-?bachelor(-|_)?vectorx$/,
548
+ /^-?-?bachelor_?vektor$/i,
549
+ 'bachelorvektorx',
550
+ /^-?-?bachelor$/i, # Default entry point.
551
+ 'vectors',
552
+ 'vectorx',
553
+ 'vektorx',
554
+ 'vektor',
555
+ /^-?-?bvektor$/i,
556
+ /^-?-?indi3$/i
557
+ array = readlines(location_of(:bachelor_vektoren)).flatten
558
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
559
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
560
+ # ======================================================================= #
561
+ # === bachelor_informatik
562
+ # ======================================================================= #
563
+ when /^bachelor(_|-)?informatik$/i
564
+ do_assume_180_ects_points
565
+ array = readlines(location_of(:bachelor_informatik)).flatten
566
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
567
+ set_title :bachelor_informatik
568
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
569
+ # ======================================================================= #
570
+ # === bachelor_technische_chemie
571
+ # ======================================================================= #
572
+ when /^bachelor(_|-)?technische(_|-)?chemie$/i
573
+ do_assume_180_ects_points
574
+ array = readlines(location_of(:bachelor_technische_chemie)).flatten
575
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
576
+ set_title :bachelor_technische_chemie
577
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
578
+ # ======================================================================= #
579
+ # === mandatory master_vectorx
580
+ #
581
+ # This is for the master vector-curriculum, 120.0 ECTS.
582
+ # ======================================================================= #
583
+ when '1','vector','masterindividuell', # This is for 120.0 ECTS points.
584
+ 'vectormaster','mastervector',
585
+ 'mastervektorx','master',
586
+ /^master(_|-)?vectorx$/,
587
+ /^master(_|-)?vektor$/i,
588
+ /^master(_|-)vector$/,
589
+ /^mastervektoren$/
590
+ do_assume_120_ects_points
591
+ array = # readlines(location_of(:bachelor_vektoren))+
592
+ readlines(location_of(:master_vektoren)).flatten
593
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
594
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
595
+ # ======================================================================= #
596
+ # === bachelor_molekularbiologie_curriculum
597
+ # ======================================================================= #
598
+ when /^bachelor(_|-)?molekularbiologie$/i,
599
+ /^bachelor(_|-)?molekularbiologie(_|-)?curriculum$/i,
600
+ /^bachelor(_|-)?molekularbiologie(_|-)?graz$/i
601
+ do_assume_180_ects_points
602
+ array = readlines(location_of(:bachelor_molekularbiologie_curriculum)).flatten
603
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
604
+ set_title :bachelor_molekularbiologie_curriculum
605
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
606
+ # ======================================================================= #
607
+ # === bachelor_nutrition_science
608
+ # ======================================================================= #
609
+ when /^bachelor(_|-)?nutrition(_|-)?science$/i,
610
+ '5','ern','ernährungswissenschaften'
611
+ do_assume_180_ects_points
612
+ array = readlines(location_of(:bachelor_nutrition_science)).flatten
613
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
614
+ set_title :bachelor_nutrition_science
615
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
616
+ # ======================================================================= #
617
+ # === bachelor_pharmazie
618
+ # ======================================================================= #
619
+ when /^bachelor(_|-)?pharmazie$/i
620
+ do_assume_180_ects_points
621
+ array = readlines(location_of(:bachelor_pharmazie)).flatten
622
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
623
+ set_title :bachelor_pharmazie
624
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
625
+ # ======================================================================= #
626
+ # === mandatory master_biologische_chemie
627
+ # ======================================================================= #
628
+ when /^master(_|-)?pharmazie(_|-)?curriculum$/i,
629
+ /^master(_|-)?pharmazie$/i,
630
+ /^mpharmazie$/
631
+ do_assume_120_ects_points
632
+ array = readlines(location_of(:master_pharmazie)).flatten
633
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
634
+ set_title :master_pharmazie
635
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
636
+ # ======================================================================= #
637
+ # === mandatory bachelor_chemie
638
+ # ======================================================================= #
639
+ when '7','chemie',
640
+ /^bachelor_?chemie/,
641
+ /^bachelor_?chemistry/
642
+ do_assume_180_ects_points
643
+ array = readlines(location_of(:bachelor_chemistry)).flatten
644
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
645
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
646
+ # ======================================================================= #
647
+ # === mandatory master_biologische_chemie
648
+ # ======================================================================= #
649
+ when /^master(_|-)?biologische(_|-)?chemie$/i,
650
+ /^biologische(_|-)?chemie$/i
651
+ do_assume_120_ects_points
652
+ array = readlines(location_of(:master_biologische_chemie)).flatten
653
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
654
+ set_title :master_biologische_chemie
655
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
656
+ # ======================================================================= #
657
+ # === master_genetik_und_entwicklungsbiologie
658
+ # ======================================================================= #
659
+ when /^master(-|_)?genetik(-|_)?und(-|_)?entwicklungsbiologie$/
660
+ do_assume_120_ects_points
661
+ array = readlines(location_of(:master_genetik_und_entwicklungsbiologie)).flatten
662
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
663
+ set_title :master_genetik_und_entwicklungsbiologie
664
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
665
+ # ======================================================================= #
666
+ # === mandatory bachelor_mikrobiologie
667
+ # ======================================================================= #
668
+ when /^bachelor(_|-)?mikrobiologie$/i,
669
+ /^bachelor(_|-)?microbiology$/i
670
+ do_assume_180_ects_points
671
+ array = readlines(location_of(:bachelor_mikrobiologie)).flatten
672
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
673
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
674
+ # ======================================================================= #
675
+ # === mandatory master_bioinformatik
676
+ # ======================================================================= #
677
+ when /^master(-|_)?bioinformatik$/,
678
+ /^master(-|_)?bioinformatics$/
679
+ do_assume_120_ects_points
680
+ array = readlines(location_of(:master_bioinformatik)).flatten
681
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
682
+ set_title :master_bioinformatik
683
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
684
+ # ======================================================================= #
685
+ # === mandatory master_biotech
686
+ # ======================================================================= #
687
+ when /^master(-|_)?biotech$/,
688
+ /^master(-|_)?lmbt$/
689
+ do_assume_120_ects_points
690
+ array = readlines(location_of(:master_lmbt)).flatten
691
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
692
+ set_title :master_biotech
693
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
694
+ # ======================================================================= #
695
+ # === bachelor_botanik
696
+ # ======================================================================= #
697
+ when /^bachelor(_|-)?botanik$/i
698
+ do_assume_180_ects_points
699
+ set_title :bachelor_botanik
700
+ array = readlines(location_of(i.to_sym)).flatten
701
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
702
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
703
+ # ======================================================================= #
704
+ # === bachelor_molekulare_biologie
705
+ # ======================================================================= #
706
+ when /^bachelor(_|-)?molekulare(_|-)?biologie$/i,
707
+ /^bachelor(_|-)?molbio$/i
708
+ do_assume_180_ects_points
709
+ array = readlines(location_of(:bachelor_molbio)).flatten
710
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
711
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
712
+ # ======================================================================= #
713
+ # === bachelor_agrarwissenschaften
714
+ # ======================================================================= #
715
+ when /^bachelor(_|-)?agrarwissenschaften$/i
716
+ do_assume_180_ects_points
717
+ array = readlines(location_of(i.to_sym)).flatten
718
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
719
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
720
+ # ======================================================================= #
721
+ # === master_tu_vienna_biotechnology
722
+ # ======================================================================= #
723
+ when /^master(-|_)?tu(-|_)?vienna(-|_)?biotechnology$/
724
+ do_assume_120_ects_points
725
+ array = readlines(location_of(i.to_sym)).flatten
726
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
727
+ set_title :master_tu_vienna_biotechnology
728
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
729
+ # ======================================================================= #
730
+ # === mandatory bachelor_lmbt
731
+ # ======================================================================= #
732
+ when '11',
733
+ /^bachelor(_|-)?lmbt/,
734
+ 'lmbt',
735
+ 'lbt'
736
+ do_assume_180_ects_points
737
+ array = readlines(location_of(:bachelor_lmbt)).flatten
738
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
739
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
740
+ # ======================================================================= #
741
+ # === mandatory bachelor_genetics
742
+ # ======================================================================= #
743
+ when '6','genetics','genetik',/bachelor_?genetics?/,'genetic',
744
+ /^bachelor(-|_)?genetics$/,
745
+ /bachelor_?genetik/
746
+ array = readlines(
747
+ return_file_for_this_curriculum(
748
+ :bachelor_biologie_mikrobiologie_und_genetik
749
+ )
750
+ )+readlines(location_of(:bachelor_biologie_basisblock)).flatten
751
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
752
+ set_title 'Bachelorcurriculum Genetik'
753
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
754
+ # ======================================================================= #
755
+ # === mandatory bachelor_master_vektoren
756
+ #
757
+ # This is only the full 300.0 ECTS curriculum.
758
+ # ======================================================================= #
759
+ when /bachelor_?master_?vektoren/i,
760
+ /bachelor_?master_?vectorx/i,
761
+ /bachelor_?master_?vector/i
762
+ do_assume_300_points
763
+ array = (readlines(location_of(:bachelor_vektoren)).flatten+
764
+ readlines(location_of(:master_vektoren)).flatten).flatten
765
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
766
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
767
+ # ======================================================================= #
768
+ # === mandatory master_molbio
769
+ #
770
+ # The molbio master at the university of vienna, for 120.0 ECTS points.
771
+ # ======================================================================= #
772
+ when '2',
773
+ /^-?-?master(_|-)?molbio/,
774
+ /^-?-?molbio(_|-)?master/,
775
+ 'molbio' # mandatory --molbio_master
776
+ do_assume_120_ects_points
777
+ array = readlines(location_of(:master_molbio)).flatten
778
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
779
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
780
+ # ======================================================================= #
781
+ # === mandatory bachelormasterimmuno
782
+ #
783
+ # This is the combination of the Biology basis building block, then
784
+ # the genetic building block, and then the master immuno.
785
+ # ======================================================================= #
786
+ when /bachelor_?master_?immuno/
787
+ do_assume_300_ects_points
788
+ array = readlines(location_of(:bachelor_biologie_basisblock))+
789
+ readlines(location_of(:bachelor_genetik))+
790
+ readlines(location_of(:master_immuno)).flatten
791
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
792
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
793
+ # ======================================================================= #
794
+ # === mandatory master_immuno
795
+ # ======================================================================= #
796
+ when '3',
797
+ /-?-?master_?immuno/,
798
+ /-?-?immuno_?master/, # mandatory --immuno_master
799
+ 'immuno'
800
+ do_assume_120_ects_points
801
+ array = readlines(location_of(:master_immuno)).flatten
802
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
803
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
804
+ # ======================================================================= #
805
+ # === mandatory tuvienna_biotechmaster
806
+ # ======================================================================= #
807
+ when '10',/tu_?vienna_?biotech_?master/
808
+ do_assume_120_ects_points
809
+ array = readlines(location_of(:master_tuvienna_biotechnology)).flatten
810
+ array = return_entries_that_are_of_mandatory_continuous_assessment_type(array)
811
+ padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(array, be_verbose)
812
+ else
813
+ unless i.include? '--'
814
+ opnn; e 'Unregistered input in the file '\
815
+ 'mandatory_continuous_assessment.rb: '+
816
+ sfancy(i)+' (class: '+i.class.to_s+')'
817
+ end
818
+ end
819
+ end
820
+
821
+ # ========================================================================= #
822
+ # === bachelor_or_master
823
+ #
824
+ # This method will return a String, either "Bachelor" or "Master" or
825
+ # "Bachelor/Master".
826
+ # ========================================================================= #
827
+ def bachelor_or_master(i)
828
+ result = ''.dup
829
+ if is_a_bachelor_lecture?(i)
830
+ result << 'Bachelor'
831
+ end
832
+ if is_a_master_lecture?(i)
833
+ unless result.empty?
834
+ result << '/'
835
+ end
836
+ result << 'Master'
837
+ end
838
+ return result
839
+ end
840
+
841
+ # ========================================================================= #
842
+ # === available_curricula?
843
+ # ========================================================================= #
844
+ def available_curricula?
845
+ ARRAY_REGISTERED_CURRICULA
846
+ end
847
+
848
+ # ========================================================================= #
849
+ # === do_calculate_the_percentage
850
+ #
851
+ # This method will calculate the percentage of ects points in
852
+ # courses with mandatory-attendance.
853
+ # ========================================================================= #
854
+ def do_calculate_the_percentage(
855
+ n_ects_in_mandatory_courses = @total_amount_of_mandatory_continuous_assessment_ECTS_points_in_this_curriculum,
856
+ n_total_ects_points_in_the_curriculum = total_amount_of_ECTS_points_in_the_curriculum?
857
+ )
858
+ n_percent = (
859
+ n_ects_in_mandatory_courses.to_f * 100
860
+ ) / n_total_ects_points_in_the_curriculum
861
+ # ======================================================================= #
862
+ # Note that this method will also set the percentage.
863
+ # ======================================================================= #
864
+ set_percentage(n_percent) # Set the percentage here as well.
865
+ end
866
+
867
+ # ========================================================================= #
868
+ # === show_all_available_curricula
869
+ #
870
+ # This is a powerhorse method - it will simply show all curricula and
871
+ # the respective "prüfungsimmanente Lehrveranstaltungen" in these
872
+ # curricula.
873
+ #
874
+ # Invocation example:
875
+ #
876
+ # mandatory --all_curricula
877
+ #
878
+ # ========================================================================= #
879
+ def show_all_available_curricula
880
+ do_not_be_verbose
881
+ _ = available_curricula?
882
+ _.each_with_index {|curriculum, index| index += 1
883
+ reset_this_instance
884
+ set_input(curriculum)
885
+ set_title(curriculum.to_sym)
886
+ try_to_find_this_curriculum(curriculum, index) { :be_verbose }
887
+ }
888
+ end
889
+
890
+ # ========================================================================= #
891
+ # === do_not_report_any_findings
892
+ # ========================================================================= #
893
+ def do_not_report_any_findings
894
+ @do_report_the_findings = false
895
+ end; alias do_not_report_anything do_not_report_any_findings # === do_not_report_anything
896
+
897
+ # ========================================================================= #
898
+ # === percentage?
899
+ # ========================================================================= #
900
+ def percentage?
901
+ @internal_hash[:percentage]
902
+ end; alias n_percent? percentage? # === n_percent?
903
+
904
+ # ========================================================================= #
905
+ # === consider_displaying_the_title_of_the_curriculum
906
+ # ========================================================================= #
907
+ def consider_displaying_the_title_of_the_curriculum
908
+ if @show_the_title_of_the_curriculum
909
+ if @do_report_the_findings
910
+ _ = title?
911
+ if _
912
+ e sfancy(_)
913
+ e
914
+ end if be_verbose?
915
+ end
916
+ end
917
+ end
918
+
919
+ # ========================================================================= #
920
+ # === do_assume_180_ects_points
921
+ # ========================================================================= #
922
+ def do_assume_180_ects_points
923
+ @internal_hash[:total_amount_of_ECTS_points_in_the_curriculum] = 180
924
+ end
925
+
926
+ # ========================================================================= #
927
+ # === do_assume_300_ects_points
928
+ # ========================================================================= #
929
+ def do_assume_300_ects_points
930
+ @internal_hash[:total_amount_of_ECTS_points_in_the_curriculum] = 300
931
+ end; alias do_assume_300_points do_assume_300_ects_points # === do_assume_300_points
932
+
933
+ # ========================================================================= #
934
+ # === do_assume_120_ects_points
935
+ # ========================================================================= #
936
+ def do_assume_120_ects_points
937
+ @internal_hash[:total_amount_of_ECTS_points_in_the_curriculum] = 120
938
+ end
939
+
940
+ # ========================================================================= #
941
+ # === n_ects_points
942
+ #
943
+ # This method can be used to directly set the amount of
944
+ # ECTS points in the given curriculum.
945
+ # ========================================================================= #
946
+ def n_ects_points(i = 120)
947
+ @internal_hash[:total_amount_of_ECTS_points_in_the_curriculum] = i.to_i
948
+ end
949
+
950
+ # ========================================================================= #
951
+ # === set_original_commandline
952
+ # ========================================================================= #
953
+ def set_original_commandline(i)
954
+ @original_commandline = [i].flatten.compact
955
+ end
956
+
957
+ # ========================================================================= #
958
+ # === do_show_all_passed_mandatory_continuous_assessments_from_this_year
959
+ #
960
+ # The input argument denotes the year. If the exam was passed in that
961
+ # year, then it will be shown.
962
+ #
963
+ # Invocation example:
964
+ #
965
+ # mandatory --2017
966
+ #
967
+ # ========================================================================= #
968
+ def do_show_all_passed_mandatory_continuous_assessments_from_this_year(the_year)
969
+ obtain_default_dataset
970
+ @result = @dataset.select {|line|
971
+ splitted = line.split('|').map(&:strip)
972
+ year = splitted.first.strip.split('.').last
973
+ lecture_type = splitted[6] # <- This is the right entry.
974
+ ARRAY_LECTURE_TYPES_THAT_ARE_MANDATORY_CONTINUOUS_ASSESSMENT.include?(lecture_type) &&
975
+ (the_year == year) # Make the year-check here.
976
+ }
977
+ report_result # Report it as we assigned the result above.
978
+ end
979
+
980
+ # ========================================================================= #
981
+ # === readlines
982
+ #
983
+ # Just a shorter method towards File.readlines().
984
+ # ========================================================================= #
985
+ def readlines(i)
986
+ result = []
987
+ if i.is_a? Symbol
988
+ i = return_file_for_this_curriculum(i)
989
+ end
990
+ unless i.is_a? Array
991
+ i = [i]
992
+ end
993
+ i.each {|entry|
994
+ if File.exist? entry.to_s
995
+ result << File.readlines(entry)
996
+ else
997
+ opnn; e 'No file exists at `'+
998
+ sfile(entry.to_s)+
999
+ '`. (in the method readlines())' # This line shall always be output.
1000
+ exit
1001
+ end
1002
+ }
1003
+ result.flatten!
1004
+ return result
1005
+ end
1006
+
1007
+ # ========================================================================= #
1008
+ # === do_show_all_passed_mandatory_continuous_assessments
1009
+ #
1010
+ # This method will show all "prüfungsimmanente" Lehrveranstaltungen.
1011
+ # ========================================================================= #
1012
+ def do_show_all_passed_mandatory_continuous_assessments
1013
+ obtain_default_dataset
1014
+ # ======================================================================= #
1015
+ # Next, grab all entries that are "prüfungsimmanent". These are those
1016
+ # types that are part of the array-constant, so, UE, PS, SE, LU and
1017
+ # so forth. These all have mandatory continuous assessment parts.
1018
+ # ======================================================================= #
1019
+ @result = @dataset.select {|line|
1020
+ splitted = line.split('|').map(&:strip)
1021
+ lecture_type = splitted[6] # <- This is the right entry.
1022
+ is_included = ARRAY_LECTURE_TYPES_THAT_ARE_MANDATORY_CONTINUOUS_ASSESSMENT.include? lecture_type
1023
+ is_included
1024
+ }
1025
+ report_result # Report it as we assigned the result above.
1026
+ end
1027
+
1028
+ # ========================================================================= #
1029
+ # === padded_display_this_array_including_only_mandatory_continuous_assessment_lectures
1030
+ # ========================================================================= #
1031
+ def padded_display_this_array_including_only_mandatory_continuous_assessment_lectures(
1032
+ array, be_verbose_in_the_subsequent_method_call = nil
1033
+ )
1034
+ e if be_verbose? and @do_report_the_findings
1035
+ display_this_array_including_only_mandatory_continuous_assessment_lectures(
1036
+ array, be_verbose_in_the_subsequent_method_call
1037
+ )
1038
+ e if be_verbose? and @do_report_the_findings
1039
+ end
1040
+
1041
+ # ========================================================================= #
1042
+ # === total_amount_of_mandatory_continuous_assessment_ects_points_in_this_curriculum?
1043
+ # ========================================================================= #
1044
+ def total_amount_of_mandatory_continuous_assessment_ects_points_in_this_curriculum?
1045
+ @total_amount_of_mandatory_continuous_assessment_ECTS_points_in_this_curriculum
1046
+ end; alias n_mandatory_ects_points_in_this_curriculum? total_amount_of_mandatory_continuous_assessment_ects_points_in_this_curriculum? # === n_mandatory_ects_points_in_this_curriculum?
1047
+ alias n_mandatory_ects_points_in_this_curriculum total_amount_of_mandatory_continuous_assessment_ects_points_in_this_curriculum? # === n_mandatory_ects_points_in_this_curriculum?
1048
+
1049
+ # ========================================================================= #
1050
+ # === title_of_the_curriculum?
1051
+ # ========================================================================= #
1052
+ def title_of_the_curriculum?
1053
+ @internal_hash[:title_of_the_curriculum]
1054
+ end; alias title? title_of_the_curriculum? # === title?
1055
+ alias name_of_the_curriculum? title_of_the_curriculum? # === name_of_the_curriculum?
1056
+
1057
+ # ========================================================================= #
1058
+ # === display_these_lectures_sorted_by_priority
1059
+ #
1060
+ # Do note that we will actually sort in two ways in this method:
1061
+ #
1062
+ # - First, by priority, which can have values from 1 up to 5
1063
+ # - Second, by the amount of ECTS points. Lectures that have
1064
+ # more ECTS points will be displayed first.
1065
+ #
1066
+ # ========================================================================= #
1067
+ def display_these_lectures_sorted_by_priority(
1068
+ i, priority_to_use = [5,4,3,2,1]
1069
+ )
1070
+ if priority_to_use.is_a? Array
1071
+ priority_to_use.each {|entry|
1072
+ # =================================================================== #
1073
+ # Call this method recursively.
1074
+ # =================================================================== #
1075
+ display_these_lectures_sorted_by_priority(i, entry)
1076
+ }
1077
+ else
1078
+ if @do_report_the_findings
1079
+ # =================================================================== #
1080
+ # Show a little header, to notify the user which Priority-setting
1081
+ # is currently shown.
1082
+ # =================================================================== #
1083
+ smiley_face = ''
1084
+ if use_unicode_symbols? and Object.const_defined?(:Roebe)
1085
+ smiley_face = lightseagreen(Roebe.smiley_face)
1086
+ end
1087
+ e sfancy("Priority #{priority_to_use.to_s}: #{smiley_face}")
1088
+ e
1089
+ end
1090
+ matching_priority = i.select {|a, b| b[:priority] == priority_to_use }
1091
+ counter = 0
1092
+ sorted_by_n_ECTS_points_of_matching_priority = matching_priority.sort_by {|a, b|
1093
+ b[:ects]
1094
+ }.reverse
1095
+ sorted_by_n_ECTS_points_of_matching_priority.each {|name, inner_hash| counter += 1
1096
+ name = name.first if name.is_a? Array
1097
+ n_ects_points = inner_hash[:ects]
1098
+ university = inner_hash[:university]
1099
+ lecture_type = inner_hash[:type]
1100
+ summer_or_winter = inner_hash[:semester]
1101
+ outdated_lecture = inner_hash[:outdated_lecture]
1102
+ next if outdated_lecture == true
1103
+ curricula_entries = obtain(:curricula_entries, inner_hash)
1104
+ currently_participating_in_this_course = inner_hash[:currently_participating_in_this_course]
1105
+ if currently_participating_in_this_course
1106
+ # ================================================================= #
1107
+ # Lectures that we are presently doing in the current semester
1108
+ # will be shown in skyblue rather than slateblue.
1109
+ # ================================================================= #
1110
+ colourized_name_of_the_lecture = skyblue(name)
1111
+ else
1112
+ colourized_name_of_the_lecture = slateblue(name)
1113
+ end
1114
+ # =================================================================== #
1115
+ # Colourize the ECTS points, in seagreen and lightseeagreen.
1116
+ # Also show the lecture type and the university.
1117
+ # =================================================================== #
1118
+ colourized_n_ects_points = seagreen('(n ECTS: '+n_ects_points.to_s+', ')+
1119
+ lightseagreen(lecture_type)+ # <- Display the lecture type here.
1120
+ seagreen(', ')
1121
+ unless summer_or_winter.nil?
1122
+ colourized_summer_or_winter = mediumseagreen(summer_or_winter.to_s)
1123
+ colourized_n_ects_points << colourized_summer_or_winter+
1124
+ seagreen(', ')
1125
+ end
1126
+ colourized_n_ects_points << olivedrab(university)
1127
+ colourized_n_ects_points << seagreen(', ')
1128
+ colourized_n_ects_points << crimson(bachelor_or_master(curricula_entries))
1129
+ # =================================================================== #
1130
+ # Add the closing ')' next.
1131
+ # =================================================================== #
1132
+ colourized_n_ects_points << seagreen(')')
1133
+ if @do_report_the_findings
1134
+ e slategray(counter.to_s.rjust(2))+' '+
1135
+ colourized_name_of_the_lecture+' '+
1136
+ colourized_n_ects_points
1137
+ end
1138
+ }
1139
+ e if @do_report_the_findings
1140
+ end
1141
+ end
1142
+
1143
+ # ========================================================================= #
1144
+ # === obtain_default_dataset
1145
+ #
1146
+ # Simply assign the default dataset, from the file with the passed
1147
+ # exams, to the instance variable @dataset.
1148
+ # ========================================================================= #
1149
+ def obtain_default_dataset
1150
+ @dataset = ::Studium.sanitized_dataset_from_file_passed_exams_per_month
1151
+ end
1152
+
1153
+ # ========================================================================= #
1154
+ # === reset_this_instance
1155
+ # ========================================================================= #
1156
+ def reset_this_instance
1157
+ # ======================================================================= #
1158
+ # === @internal_hash
1159
+ # ======================================================================= #
1160
+ @internal_hash = {}
1161
+ # ======================================================================= #
1162
+ # === :total_amount_of_ECTS_points_in_the_curriculum
1163
+ # ======================================================================= #
1164
+ @internal_hash[:total_amount_of_ECTS_points_in_the_curriculum] = 180
1165
+ # ======================================================================= #
1166
+ # === :percentage
1167
+ #
1168
+ # This variable stores how much percentage from the ECTS was passed.
1169
+ # ======================================================================= #
1170
+ @internal_hash[:percentage] = 0.0
1171
+ # ======================================================================= #
1172
+ # === @result
1173
+ #
1174
+ # Store the result of this class in this instance variable.
1175
+ # ======================================================================= #
1176
+ @result = nil
1177
+ # ======================================================================= #
1178
+ # === :title_of_the_curriculum
1179
+ # ======================================================================= #
1180
+ @internal_hash[:title_of_the_curriculum] = nil
1181
+ # ======================================================================= #
1182
+ # === @show_the_title_of_the_curriculum
1183
+ # ======================================================================= #
1184
+ @show_the_title_of_the_curriculum = true
1185
+ # ======================================================================= #
1186
+ # === @total_amount_of_mandatory_continuous_assessment_ECTS_points_in_this_curriculum
1187
+ #
1188
+ # The following ivar keeps track of how many ECTS points
1189
+ # are "prüfungsimmanent" in that curriculum.
1190
+ # ======================================================================= #
1191
+ @total_amount_of_mandatory_continuous_assessment_ECTS_points_in_this_curriculum = 0
1192
+ # ======================================================================= #
1193
+ # === @display_split_line
1194
+ #
1195
+ # The next instance variable may display a colourized line, if set to
1196
+ # true, which will make it easier to visually distinguish between
1197
+ # Bachelor and Master-curricula. I like this so I have set it to
1198
+ # true, but others may want to not use it, hence why I made it a flag.
1199
+ # ======================================================================= #
1200
+ @display_split_line = true
1201
+ end
1202
+
1203
+ # ========================================================================= #
1204
+ # === total_amount_of_ECTS_points_in_the_curriculum?
1205
+ # ========================================================================= #
1206
+ def total_amount_of_ECTS_points_in_the_curriculum?
1207
+ @internal_hash[:total_amount_of_ECTS_points_in_the_curriculum]
1208
+ end
1209
+
1210
+ # ========================================================================= #
1211
+ # === report_result
1212
+ #
1213
+ # Note that by default, this works on the variable @result. So if you
1214
+ # modify that variable, you are already half-way done. Otherwise, if
1215
+ # you need another dataset, you can pass in another dataset as an
1216
+ # argument to this method.
1217
+ # ========================================================================= #
1218
+ def report_result(
1219
+ _ = @result
1220
+ )
1221
+ if @do_report_the_findings
1222
+ if _
1223
+ total_ects = 0
1224
+ n_ects_in_this_year = 0
1225
+ last_year = Time.now.year
1226
+ e; _.each_with_index {|line, index|
1227
+ # =================================================================== #
1228
+ # A line may look like this:
1229
+ # 21.04.2015 | 2.0 | 2.0 | 1 | UniWien | B | UE | 300632 | 2016S | Übungen zu Grundlagen in der Bioinformatik\n
1230
+ # =================================================================== #
1231
+ index += 1
1232
+ splitted = line.split('|').map(&:strip)
1233
+ name = splitted.last # The name of the lecture.
1234
+ exam_date = splitted.first
1235
+ the_year = exam_date.split('.').last.to_i
1236
+ lecture_type = splitted[6]
1237
+ n_ects = splitted[2].to_f # Amount of ECTS points.
1238
+ n_ects_in_this_year += n_ects
1239
+ total_ects += n_ects
1240
+ padded_name = name.ljust(90)
1241
+ if @use_spacer_to_separate_a_new_year and
1242
+ !(the_year == last_year)
1243
+ # =============================================================== #
1244
+ # Show a little coloured spacer next:
1245
+ # =============================================================== #
1246
+ show_coloured_spacer {{ n_ects: n_ects_in_this_year }}
1247
+ n_ects_in_this_year = 0 # And reset it again.
1248
+ last_year = the_year
1249
+ end
1250
+ # ================================================================= #
1251
+ # Report our findings finally. This begins with a leading
1252
+ # index in orange colour.
1253
+ # ================================================================= #
1254
+ e orange((index.to_s+')').rjust(4))+' '+
1255
+ padded_name+
1256
+ turquoise(' ('+exam_date.to_s+')')+' '+
1257
+ crimson(lecture_type.center(5))+' '+
1258
+ royalblue(n_ects.to_s.rjust(4)+' ECTS')
1259
+ }; e
1260
+ e "In total we completed #{violet(total_ects.to_s)} ECTS "\
1261
+ "points in #{orange(_.size.to_s)} different courses."
1262
+ e
1263
+ end
1264
+ end
1265
+ end; alias report report_result # === report
1266
+
1267
+ # ========================================================================= #
1268
+ # === show_upcoming_mandatory_continuous_assessments
1269
+ #
1270
+ # This method will show upcoming courses that have a mandatory
1271
+ # assessment/attendance component ("prüfungsimmanente Lehrveranstaltungen").
1272
+ #
1273
+ # To invoke this method from the commandline, do:
1274
+ #
1275
+ # mandatory --upcoming
1276
+ #
1277
+ # ========================================================================= #
1278
+ def show_upcoming_mandatory_continuous_assessments(
1279
+ use_this_dataset = @dataset_from_the_file_lecture_information
1280
+ )
1281
+ _ = use_this_dataset
1282
+ # ======================================================================= #
1283
+ # First check if the commandline includes "master".
1284
+ # ======================================================================= #
1285
+ joined = commandline?.join(' ')
1286
+ if joined.include?('master') and joined.include?('only')
1287
+ _.select! {|name_of_the_lecture, inner_hash|
1288
+ curricula = obtain(:curricula, inner_hash)
1289
+ has_a_master_lecture?(curricula)
1290
+ }
1291
+ end
1292
+ # ======================================================================= #
1293
+ # Next, select only "prüfungsimmanente" courses:
1294
+ # ======================================================================= #
1295
+ _.select! {|name_of_the_lecture, inner_hash|
1296
+ lecture_type = inner_hash[:type]
1297
+ already_solved = inner_hash[:already_solved]
1298
+ case lecture_type
1299
+ when *ARRAY_LECTURE_TYPES_THAT_ARE_MANDATORY_CONTINUOUS_ASSESSMENT
1300
+ keep_or_discard = true
1301
+ else
1302
+ keep_or_discard = false
1303
+ end
1304
+ # ======================================================================= #
1305
+ # Next, ignore the lectures that were already solved.
1306
+ # ======================================================================= #
1307
+ if already_solved
1308
+ keep_or_discard = false
1309
+ end
1310
+ keep_or_discard
1311
+ }
1312
+ # ======================================================================= #
1313
+ # Next, scan for filters. This is a bit hack-ish but for now it works.
1314
+ # ======================================================================= #
1315
+ if block_given?
1316
+ yielded = yield
1317
+ if yielded.is_a? Array
1318
+ joined = yielded.join(' ').strip
1319
+ # =================================================================== #
1320
+ # === übungen --summer
1321
+ # =================================================================== #
1322
+ if joined.include? '--summer'
1323
+ _.select! {|name_of_the_lecture, inner_hash|
1324
+ inner_hash[:semester] == 'summer'
1325
+ }
1326
+ end
1327
+ # =================================================================== #
1328
+ # === übungen --winter
1329
+ # =================================================================== #
1330
+ if joined.include? '--winter'
1331
+ _.select! {|name_of_the_lecture, inner_hash|
1332
+ inner_hash[:semester] == 'winter'
1333
+ }
1334
+ end
1335
+ end
1336
+ end
1337
+ # ======================================================================= #
1338
+ # Ok, we now have the courses that are "prüfungsimmanent" and NOT yet
1339
+ # solved.
1340
+ # ======================================================================= #
1341
+ display_these_lectures_sorted_by_priority(_)
1342
+ end
1343
+
1344
+ # ========================================================================= #
1345
+ # === do_compare_the_registered_curricula
1346
+ #
1347
+ # This method can be used to compare different curricula for their
1348
+ # mandatory ECTS points, in a batch-processive manner.
1349
+ #
1350
+ # To invoke this method from the commandline, do:
1351
+ #
1352
+ # mandatory --compare
1353
+ #
1354
+ # ========================================================================= #
1355
+ def do_compare_the_registered_curricula(
1356
+ show_details = false
1357
+ )
1358
+ do_not_report_any_findings
1359
+ # ======================================================================= #
1360
+ # Do not use the combined bachelor-master vector curriculum though.
1361
+ # The following method-call ensures that.
1362
+ # ======================================================================= #
1363
+ report_these_curricula = ::Studium.return_registered_standalone_curricula
1364
+ report_these_curricula << :indi1
1365
+ report_these_curricula << :indi2
1366
+ report_these_curricula << :indi3
1367
+ report_these_curricula << :indi4
1368
+ e
1369
+ e "#{rev} Comparing the number of ECTS points assigned to "\
1370
+ "mandatory-presence"
1371
+ e ' courses in different curricula:'
1372
+ e
1373
+ # ======================================================================= #
1374
+ # Iterate over these curricula next:
1375
+ # ======================================================================= #
1376
+ report_these_curricula.each_with_index {|this_curriculum, index| index += 1
1377
+ # ===================================================================== #
1378
+ # We will next delegate towards class MandatoryContinuousAssessment,
1379
+ # which will tell us how many ECTS points are mandatory.
1380
+ #
1381
+ # bl MandatoryContinuousAssessment
1382
+ #
1383
+ # ===================================================================== #
1384
+ _ = Studium::Exams::MandatoryContinuousAssessment.new(this_curriculum) { :do_not_report_anything }
1385
+ n_ects_points_that_are_mandatory = _.n_mandatory_ects_points_in_this_curriculum?.to_s.rjust(5)
1386
+ n_ects_points_in_total_in_this_curriculum = _.n_total_ects_points
1387
+ title_of_the_curriculum = _.title?
1388
+ if title_of_the_curriculum.nil?
1389
+ # =================================================================== #
1390
+ # Report missing title next:
1391
+ # =================================================================== #
1392
+ e "This curriculum (#{sfancy(this_curriculum)}) has no title."
1393
+ e 'This is currently not allowed. Please correct this error.'
1394
+ e 'The method that has to be modified is: '+
1395
+ steelblue('set_title_of_the_curriculum()')+' and '+
1396
+ steelblue('location_of()')
1397
+ exit
1398
+ end
1399
+ if title_of_the_curriculum and title_of_the_curriculum.is_a?(String)
1400
+ title_of_the_curriculum = title_of_the_curriculum.dup if title_of_the_curriculum.frozen?
1401
+ title_of_the_curriculum.strip!
1402
+ end
1403
+ # ===================================================================== #
1404
+ # If the title of the curriculum is too long, chop it down.
1405
+ # ===================================================================== #
1406
+ threshold_value = 55
1407
+ title_of_the_curriculum = ''.dup if title_of_the_curriculum.nil?
1408
+ if title_of_the_curriculum.size > threshold_value
1409
+ title_of_the_curriculum = "#{title_of_the_curriculum[0 .. threshold_value]} [...]"
1410
+ end
1411
+ if title_of_the_curriculum.include? 'Master'
1412
+ if @display_split_line
1413
+ # ================================================================= #
1414
+ # Display a horizontal-line next, coloured in springgreen, as
1415
+ # visual separator:
1416
+ # ================================================================= #
1417
+ e springgreen(
1418
+ ' '+('-' * N_TOKENS_FOR_THE_SPRINGREEN_SPACER)
1419
+ )
1420
+ @display_split_line = false # We already displayed it once.
1421
+ end
1422
+ end
1423
+ padded_index = " (#{index}".rjust(4)+') '
1424
+ colourized_and_padded_index = mediumpurple(padded_index)
1425
+ formatted_percentage_value = _.percentage?.round(2).to_s.ljust(5,'0')
1426
+ # ===================================================================== #
1427
+ # Pad the title of the curriculum a little next:
1428
+ # ===================================================================== #
1429
+ padded_title_of_the_curriculum = title_of_the_curriculum.ljust(threshold_value+7)
1430
+ n_percent_solved = Studium.n_percent_solved_in_this_curriculum(this_curriculum)
1431
+ # ===================================================================== #
1432
+ # We will display the two major individual curricula, about "Vektorsysteme",
1433
+ # in a slightly brighter colour:
1434
+ # ===================================================================== #
1435
+ if padded_title_of_the_curriculum.include? 'Vektor'
1436
+ colourized_and_padded_title_of_the_curriculum = mediumturquoise(padded_title_of_the_curriculum)
1437
+ else
1438
+ colourized_and_padded_title_of_the_curriculum = sfancy(padded_title_of_the_curriculum)
1439
+ end
1440
+ # ===================================================================== #
1441
+ # First comes the index, then the title of the curriculum at hand.
1442
+ # The index is presently colourized in 'mediumpurple'.
1443
+ # ===================================================================== #
1444
+ e colourized_and_padded_index+ # <- First show the colourized and padded index.
1445
+ colourized_and_padded_title_of_the_curriculum+
1446
+ powderblue(n_ects_points_that_are_mandatory)+' ECTS in '+
1447
+ seagreen('mandatory-courses')+' (total ECTS: '+
1448
+ powderblue(n_ects_points_in_total_in_this_curriculum.to_s)+
1449
+ ', '+slateblue(formatted_percentage_value+'%')+' share'+
1450
+ ', '+seagreen(n_percent_solved.round(1).to_s.rjust(4)+'%')+' solved'+
1451
+ ')'
1452
+ # ===================================================================== #
1453
+ # Enter this clause if the user wants to show some more details.
1454
+ # ===================================================================== #
1455
+ case show_details
1456
+ # ===================================================================== #
1457
+ # === :show_more_details_but_without_the_title
1458
+ #
1459
+ # This variant will show more details, that is, every course will be
1460
+ # shown on a new line each.
1461
+ # ===================================================================== #
1462
+ when :show_more_details_but_without_the_title
1463
+ Studium::Exams::MandatoryContinuousAssessment.new(this_curriculum) { :do_not_report_the_title }
1464
+ # ===================================================================== #
1465
+ # === :show_details
1466
+ # ===================================================================== #
1467
+ when :show_details,
1468
+ :show_more_details
1469
+ Studium::Exams::MandatoryContinuousAssessment.new(this_curriculum)
1470
+ end
1471
+ }; e
1472
+ end
1473
+
1474
+ # ========================================================================= #
1475
+ # === show_help (help tag)
1476
+ #
1477
+ # Display the following help-instructions like so from the commandline:
1478
+ #
1479
+ # mandatory --help
1480
+ #
1481
+ # ========================================================================= #
1482
+ def show_help
1483
+ e
1484
+ e "These options are available for "\
1485
+ "#{orange('class Studium::Exams::MandatoryContinuousAssessment')}:"
1486
+ e
1487
+ eparse ' --all # show all mandatory continuous assessment '\
1488
+ 'lectures that were already completed successfully'
1489
+ eparse ' --available # show the available curricula for '\
1490
+ 'use with this class'
1491
+ e
1492
+ e "The other way to use this class is to pass in the "\
1493
+ "#{powderblue('name of a specific curriculum')}."
1494
+ e
1495
+ e 'The class will then figure out how much, in percent and '\
1496
+ 'amount of ECTS numbers,'
1497
+ e 'that particular curriculum will have "prüfungsimmanente '\
1498
+ 'Lehrveranstaltungen".'
1499
+ e
1500
+ e 'Usage examples:'
1501
+ e
1502
+ e lightseagreen(' mandatory vectorx')+' '\
1503
+ '# vectorx ist Bachelor und Master kombiniert.'
1504
+ e "#{lightseagreen(' mandatory master-vectorx')} "\
1505
+ "# Only show the master-lectures here"
1506
+ e lightseagreen(' mandatory --bachelor-genetics')+' '\
1507
+ '# the genetics curriculum at '\
1508
+ 'the university of vienna'
1509
+ e
1510
+ e 'To show all curricula, do:'
1511
+ e
1512
+ epowderblue(' --all_curricula')
1513
+ e
1514
+ e 'To show passed exams per (specific) year, do:'
1515
+ e
1516
+ epowderblue(' --2017')
1517
+ epowderblue(' --2016')
1518
+ e
1519
+ e 'To show which mandatory lectures may be upcoming, you '\
1520
+ 'can use any of the following:'
1521
+ e
1522
+ e ' mandatory --upcoming'
1523
+ e ' mandatory --todo'
1524
+ e ' mandatory --next'
1525
+ e
1526
+ e 'These will be sorted based on priority; higher priority '\
1527
+ 'comes first'
1528
+ e
1529
+ e 'If you want to compare all registered (thus, available) '\
1530
+ 'curricula, then use the following command:'
1531
+ e
1532
+ epowderblue(' mandatory --compare')
1533
+ e
1534
+ e 'And if you want more details:'
1535
+ e
1536
+ epowderblue(' mandatory --compare-detail')
1537
+ e
1538
+ e 'To only show master-lectures, try:'
1539
+ e
1540
+ epowderblue(' mandatory --only-master')
1541
+ e
1542
+ e 'If you only want lectures in the winter-semester, use this:'
1543
+ e
1544
+ epowderblue(' mandatory --wintersemester')
1545
+ e
1546
+ e 'To select only courses for summer or winter term, use either of the following:'
1547
+ e
1548
+ epowderblue(' mandatory --summer')
1549
+ epowderblue(' mandatory --winter')
1550
+ e
1551
+ end
1552
+
1553
+ # ========================================================================= #
1554
+ # === menu (menu tag)
1555
+ # ========================================================================= #
1556
+ def menu(
1557
+ i = nil
1558
+ )
1559
+ if i.is_a? Array
1560
+ i.each {|entry| menu(entry) }
1561
+ else
1562
+ case i # case tag
1563
+ # ===================================================================== #
1564
+ # === mandatory --boku --summer
1565
+ # ===================================================================== #
1566
+ when /^-?-?BOKU$/i,
1567
+ filter_for_lectures_at_the_BOKU
1568
+ # ===================================================================== #
1569
+ # === mandatory --tuwien --summer
1570
+ # ===================================================================== #
1571
+ when /^-?-?tuwien$/i,
1572
+ /^-?-?tuvienna$/i
1573
+ filter_for_lectures_at_the_TU_Vienna
1574
+ # ===================================================================== #
1575
+ # === mandatory --summer
1576
+ # ===================================================================== #
1577
+ when /^-?-?summer$/i
1578
+ filter_for_lectures_during_the_summer
1579
+ # ===================================================================== #
1580
+ # === mandatory --winter
1581
+ # ===================================================================== #
1582
+ when /^-?-?winter$/i
1583
+ filter_for_lectures_during_the_winter
1584
+ # ===================================================================== #
1585
+ # === mandatory --compare-details
1586
+ #
1587
+ # This variant is different to --compare in that we will get a good
1588
+ # overview of the individual lectures as well.
1589
+ # ===================================================================== #
1590
+ when /^-?-?compare(-|_)?details?$/i,
1591
+ /^-?-?compare(-|_)?stats$/i,
1592
+ /^-?-?details$/i
1593
+ do_compare_the_registered_curricula(
1594
+ :show_more_details_but_without_the_title
1595
+ )
1596
+ exit
1597
+ # ===================================================================== #
1598
+ # === mandatory --compare
1599
+ # ===================================================================== #
1600
+ when /^-?-?compare$/i
1601
+ do_compare_the_registered_curricula
1602
+ exit
1603
+ # ===================================================================== #
1604
+ # === mandatory_assessment --all
1605
+ #
1606
+ # Show all the mandatory continuous assessment lectures that were
1607
+ # passed so far.
1608
+ # ===================================================================== #
1609
+ when /-?-?all$/i,
1610
+ /-?-?everything$/i,
1611
+ /-?-?default$/i
1612
+ @use_spacer_to_separate_a_new_year = true
1613
+ :show_all_passed_mandatory_continuous_assessments
1614
+ # ===================================================================== #
1615
+ # === mandatory --upcoming
1616
+ # ===================================================================== #
1617
+ when /^-?-?upcoming$/i,
1618
+ /^-?-?todo$/i,
1619
+ /^-?-?next$/i,
1620
+ /^-?-?show(-|_)?all$/i
1621
+ show_upcoming_mandatory_continuous_assessments { commandline_arguments? }
1622
+ exit
1623
+ # ===================================================================== #
1624
+ # === mandatory --only-wintersemester
1625
+ # ===================================================================== #
1626
+ when /^-?-?only(-|_)?wintersemester$/i,
1627
+ /^-?-?wintersemester$/i
1628
+ @dataset_from_the_file_lecture_information.select! {|a,b|
1629
+ semester = obtain(:semester, b, :be_quiet)
1630
+ semester == 'winter'
1631
+ }
1632
+ show_upcoming_mandatory_continuous_assessments(
1633
+ @dataset_from_the_file_lecture_information
1634
+ )
1635
+ # ===================================================================== #
1636
+ # === mandatory_assessment --all_curricula
1637
+ #
1638
+ # Show all the different curricula - at the least those that were
1639
+ # registered in the main Array.
1640
+ # ===================================================================== #
1641
+ when /-?-?all(_|-)?curricula$/i
1642
+ show_all_available_curricula
1643
+ # ===================================================================== #
1644
+ # === mandatory_assignment --2018
1645
+ # ===================================================================== #
1646
+ when /^-?-?(\d{4})$/
1647
+ the_year = $1.to_s.dup
1648
+ do_show_all_passed_mandatory_continuous_assessments_from_this_year(the_year)
1649
+ exit
1650
+ # ===================================================================== #
1651
+ # === mandatory_assessment --available
1652
+ # ===================================================================== #
1653
+ when /-?-?available/
1654
+ e; available_curricula?.each {|entry| e " - #{sfancy(entry)}" }; e
1655
+ # ===================================================================== #
1656
+ # === mandatory_assessment --help
1657
+ # ===================================================================== #
1658
+ when /help/
1659
+ show_help
1660
+ exit
1661
+ end
1662
+ end
1663
+ end
1664
+ # ========================================================================= #
1665
+ # === filter_for_lectures_at_the_BOKU
1666
+ # ========================================================================= #
1667
+ def filter_for_lectures_at_the_BOKU
1668
+ @dataset_from_the_file_lecture_information.select! {|name_of_the_lecture, hash_inner_dataset|
1669
+ hash_inner_dataset[:university] == 'BOKU'
1670
+ }
1671
+ end
1672
+
1673
+ # ========================================================================= #
1674
+ # === filter_for_lectures_at_the_TU_Vienna
1675
+ # ========================================================================= #
1676
+ def filter_for_lectures_at_the_TU_Vienna
1677
+ @dataset_from_the_file_lecture_information.select! {|name_of_the_lecture, hash_inner_dataset|
1678
+ hash_inner_dataset[:university] == 'TU Vienna'
1679
+ }
1680
+ end
1681
+
1682
+ # ========================================================================= #
1683
+ # === filter_for_lectures_during_the_summer
1684
+ #
1685
+ # This method will filter for lectures during summer - in other words,
1686
+ # lectures that are during winter, will specifically be excluded.
1687
+ # ========================================================================= #
1688
+ def filter_for_lectures_during_the_summer(
1689
+ this_semester = 'summer'
1690
+ )
1691
+ @dataset_from_the_file_lecture_information.select! {|name_of_the_lecture, hash_inner_dataset|
1692
+ hash_inner_dataset[:semester] == this_semester
1693
+ }
1694
+ end
1695
+
1696
+ # ========================================================================= #
1697
+ # === filter_for_lectures_during_the_winter
1698
+ #
1699
+ # This method will filter for lectures during winter - in other words,
1700
+ # lectures that are during summer, will specifically be excluded.
1701
+ # ========================================================================= #
1702
+ def filter_for_lectures_during_the_winter(
1703
+ this_semester = 'winter'
1704
+ )
1705
+ @dataset_from_the_file_lecture_information.select! {|name_of_the_lecture, hash_inner_dataset|
1706
+ hash_inner_dataset[:semester] == this_semester
1707
+ }
1708
+ end
1709
+
1710
+ # ========================================================================= #
1711
+ # === show_coloured_spacer
1712
+ # ========================================================================= #
1713
+ def show_coloured_spacer(
1714
+ n_times = 112
1715
+ )
1716
+ if @do_report_the_findings
1717
+ result = steelblue('-' * n_times)
1718
+ if block_given?
1719
+ yielded = yield
1720
+ if yielded.is_a? Hash
1721
+ if yielded.has_key? :n_ects
1722
+ n_ects = yielded.delete(:n_ects)
1723
+ result = result.dup if result.frozen?
1724
+ result << slateblue(
1725
+ (n_ects.to_s+' ECTS').rjust(12)
1726
+ )
1727
+ end
1728
+ end
1729
+ end
1730
+ e result
1731
+ end
1732
+ end
1733
+
1734
+ # ========================================================================= #
1735
+ # === set_title_of_the_curriculum (set title tag)
1736
+ # ========================================================================= #
1737
+ def set_title_of_the_curriculum(i)
1738
+ case i # case tag
1739
+ # ======================================================================= #
1740
+ # === bachelor_biologische_informatik
1741
+ # ======================================================================= #
1742
+ when :bachelor_biologische_informatik,
1743
+ :indi3
1744
+ i = 'Biologische Informatik'
1745
+ # ======================================================================= #
1746
+ # === bachelor_bioinformatik_und_molekulare_biotechnologie
1747
+ # ======================================================================= #
1748
+ when :bachelor_bioinformatik_und_molekulare_biotechnologie
1749
+ i = '(Bio)Informatik und molekulare Biotechnologie, unter Berücksichtigung medizinisch-immunologischer Aspekte'
1750
+ # ======================================================================= #
1751
+ # === :bachelor_dummy_curriculum
1752
+ # ======================================================================= #
1753
+ when :bachelor_dummy_curriculum
1754
+ i = 'Generic Dummy Curriculum'
1755
+ # ======================================================================= #
1756
+ # === :bachelor_vektoren
1757
+ # ======================================================================= #
1758
+ when :bachelor_vektoren,
1759
+ :bachelor_vector
1760
+ i = 'Bachelorcurriculum Vector-based strategies in Life Sciences, Molecular Medicine and Biotechnology'
1761
+ if File.exist? studium_directory_at_home?+'UNI_WIEN/Individuelles_Studium_an_der_Uni_Wien/Titel.md'
1762
+ # =================================================================== #
1763
+ # In this case use the main title stored in that file.
1764
+ # =================================================================== #
1765
+ i = 'Bachelorcurriculum '+File.readlines(
1766
+ "#{studium_directory_at_home?}UNI_WIEN/Individuelles_Studium_an_der_Uni_Wien/Titel.md"
1767
+ ).first.chomp
1768
+ end
1769
+ # ======================================================================= #
1770
+ # === :bachelor_master_vektoren
1771
+ # ======================================================================= #
1772
+ when :bachelor_master_vektoren
1773
+ _ = studium_directory_at_home?+'UNI_WIEN/Individuelles_Studium_an_der_Uni_Wien/Titel.md'
1774
+ i = 'Bachelor-Mastercurriculum '+File.readlines(_).first.strip
1775
+ # ======================================================================= #
1776
+ # === :bachelor_informatik
1777
+ # ======================================================================= #
1778
+ when :bachelor_informatik,
1779
+ :informatik
1780
+ i = 'Bachelorcurriculum Informatik'
1781
+ # ======================================================================= #
1782
+ # === :bachelor_genetics
1783
+ # ======================================================================= #
1784
+ when :bachelor_genetics,
1785
+ :bachelor_genetik,
1786
+ :genetics
1787
+ i = 'Bachelorcurriculum Mikrobiologie und Genetik'
1788
+ # ======================================================================= #
1789
+ # === :master_vektoren
1790
+ # ======================================================================= #
1791
+ when :master_vektoren,
1792
+ :master_vector
1793
+ i = 'Mastercurriculum Vector-based strategies in Life Sciences, Molecular Medicine and Biotechnology'
1794
+ # ======================================================================= #
1795
+ # === :bachelor_pharmazie
1796
+ # ======================================================================= #
1797
+ when :bachelor_pharmazie,
1798
+ :bachelor_pharmazie_curriculum
1799
+ i = 'Bachelorcurriculum Pharmazie'
1800
+ # ======================================================================= #
1801
+ # === :master_pharmazie
1802
+ # ======================================================================= #
1803
+ when :master_pharmazie,
1804
+ :master_pharmazie_curriculum
1805
+ i = 'Mastercurriculum Pharmazie'
1806
+ # ======================================================================= #
1807
+ # === :bachelor_chemistry
1808
+ # ======================================================================= #
1809
+ when :bachelor_chemistry,
1810
+ :bachelor_chemie
1811
+ i = 'Bachelorcurriculum Chemie'
1812
+ # ======================================================================= #
1813
+ # === :master_immuno
1814
+ # ======================================================================= #
1815
+ when :master_immuno
1816
+ i = 'Mastercurriculum Molekulare Mikrobiologie, mikrobielle Ökologie und Immunbiologie'
1817
+ # ======================================================================= #
1818
+ # === :master_biologische_chemie
1819
+ # ======================================================================= #
1820
+ when :master_biologische_chemie,
1821
+ :master_biologische_chemie_curriculum
1822
+ i = 'Mastercurriculum Biologische Chemie'
1823
+ # ======================================================================= #
1824
+ # === :bachelor_mikrobiologie
1825
+ # ======================================================================= #
1826
+ when :bachelor_mikrobiologie
1827
+ i = 'Bachelorcurriculum Mikrobiologie, Biotechnologie und Bioinformatik'
1828
+ # ======================================================================= #
1829
+ # === :bachelor_technische_chemie
1830
+ # ======================================================================= #
1831
+ when :bachelor_technische_chemie
1832
+ i = 'Bachelorcurriculum Technische Chemie'
1833
+ # ======================================================================= #
1834
+ # === :bachelor_botanik
1835
+ # ======================================================================= #
1836
+ when :bachelor_botanik
1837
+ i = 'Bachelorcurriculum Botanik'
1838
+ # ======================================================================= #
1839
+ # === :master_genetik_und_entwicklungsbiologie
1840
+ # ======================================================================= #
1841
+ when :master_genetik_und_entwicklungsbiologie
1842
+ i = 'Mastercurriculum Genetik und Entwicklungsbiologie'
1843
+ # ======================================================================= #
1844
+ # === :bachelor_medizinische_informatik
1845
+ # ======================================================================= #
1846
+ when :bachelor_medizinische_informatik
1847
+ i = 'Bachelorcurriculum Medizinische Informatik (033533)'
1848
+ # ======================================================================= #
1849
+ # === :master_bioinformatik
1850
+ # ======================================================================= #
1851
+ when :master_bioinformatik,
1852
+ :master_bioinformatics
1853
+ i = 'Mastercurriculum Bioinformatik'
1854
+ # ======================================================================= #
1855
+ # === :master_molbio
1856
+ # ======================================================================= #
1857
+ when :bachelor_molekulare_biologie,
1858
+ :bachelor_molbio
1859
+ i = 'Bachelorcurriculum Molekulare Biologie'
1860
+ # ======================================================================= #
1861
+ # === :bachelor_agrarwissenschaften
1862
+ # ======================================================================= #
1863
+ when :bachelor_agrarwissenschaften,
1864
+ :bachelor_agrar
1865
+ i = 'Bachelorcurriculum Agrarwissenschaften'
1866
+ # ======================================================================= #
1867
+ # === :master_tuvienna_biotechnology
1868
+ # ======================================================================= #
1869
+ when :master_tuvienna_biotechnology,
1870
+ :master_tu_vienna_biotechnology
1871
+ i = 'Mastercurriculum TU Vienna Biotechnology'
1872
+ # ======================================================================= #
1873
+ # === :master_lmbt
1874
+ # ======================================================================= #
1875
+ when :master_lmbt,
1876
+ :master_biotech
1877
+ i = 'Mastercurriculum Biotechnology'
1878
+ # ======================================================================= #
1879
+ # === :bachelor_lmbt
1880
+ # ======================================================================= #
1881
+ when :bachelor_lmbt,
1882
+ :lmbt
1883
+ i = 'Bachelorcurriculum Lebensmittel- und Biotechnologie'
1884
+ # ======================================================================= #
1885
+ # === :master_molbio
1886
+ # ======================================================================= #
1887
+ when :master_molbio,
1888
+ :master_molekular_biologie
1889
+ i = 'Mastercurriculum Molekulare Biologie'
1890
+ # ======================================================================= #
1891
+ # === :bachelor_ernährungswissenschaften
1892
+ # ======================================================================= #
1893
+ when :bachelor_ernährungswissenschaften,
1894
+ :bachelor_nutrition_science
1895
+ i = 'Bachelorcurriculum Ernährungswissenschaften'
1896
+ else # We could report if we did not find something, but this can be spammy.
1897
+ # opnn; e 'No title found for the given input `'+sfancy(i.to_s)+'`.'
1898
+ end
1899
+ @internal_hash[:title_of_the_curriculum] = i.to_s
1900
+ end; alias set_title set_title_of_the_curriculum # === set_title
1901
+
1902
+ # ========================================================================= #
1903
+ # === run (run tag)
1904
+ # ========================================================================= #
1905
+ def run
1906
+ _ = input?
1907
+ case _ # case tag
1908
+ when :show_all_passed_mandatory_continuous_assessments,
1909
+ /^-?-?all$/i
1910
+ do_show_all_passed_mandatory_continuous_assessments
1911
+ else # else this is the default "modus operandi" here.
1912
+ if _.include? '# ' # Assume that the user passed in a String with all the lectures here.
1913
+ e if be_verbose?
1914
+ display_this_array_including_only_mandatory_continuous_assessment_lectures(_)
1915
+ e if be_verbose?
1916
+ else
1917
+ # =================================================================== #
1918
+ # Else we will try to find that particular curriculum at hand.
1919
+ # =================================================================== #
1920
+ try_to_find_this_curriculum(_)
1921
+ end
1922
+ end
1923
+ end
1924
+
1925
+ # ========================================================================= #
1926
+ # === Studium::Exams::MandatoryContinuousAssessment[]
1927
+ # ========================================================================= #
1928
+ def self.[](i = '')
1929
+ new(i)
1930
+ end
1931
+
1932
+ end; end
1933
+
1934
+ # =========================================================================== #
1935
+ # === Studium.percentage_mandatory_continues_assessment
1936
+ #
1937
+ # This method will simply return the percentage of the mandatory,
1938
+ # continuous assessment practical courses, as a Float.
1939
+ #
1940
+ # In german: "Diese Methode gibt einem den prozentualen Anteil
1941
+ # an prüfungsimmanenten Lehrveranstaltungen aus."
1942
+ #
1943
+ # Invocation examples:
1944
+ #
1945
+ # percentage = Studium.percentage_mandatory_continues_assessment('bachelor-genetic') # => 36.666666666666664
1946
+ # percentage = Studium.percentage_mandatory_continues_assessment('bachelor-vektor') # => 37.22222222222222
1947
+ #
1948
+ # =========================================================================== #
1949
+ def self.percentage_mandatory_continues_assessment(in_this_curriculum)
1950
+ _ = Studium::Exams::MandatoryContinuousAssessment.new(in_this_curriculum, :do_not_run_yet)
1951
+ _.be_quiet
1952
+ _.run
1953
+ _.percentage?
1954
+ end
1955
+
1956
+ end