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,999 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/toplevel_methods/curriculum_related_code.rb'
6
+ # =========================================================================== #
7
+ module Studium
8
+
9
+ require 'studium/requires/require_encoding.rb'
10
+ require 'studium/constants/constants.rb'
11
+ require 'studium/colours/colours.rb'
12
+ require 'studium/toplevel_methods/e.rb'
13
+ require 'studium/toplevel_methods/main_dataset.rb'
14
+ require 'studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb'
15
+
16
+ # ========================================================================= #
17
+ # === ARRAY_ALL_AVAILABLE_CURRICULA
18
+ #
19
+ # The following Array has to be populated manually for now.
20
+ #
21
+ # In theory we could perhaps move this into its own file and its own
22
+ # sub-namespace, but for now, let's do the manual thing.
23
+ # ========================================================================= #
24
+ ARRAY_ALL_AVAILABLE_CURRICULA = %i(
25
+ bachelor_informatik_curriculum
26
+ bachelor_medizinische_informatik
27
+ bachelor_botanik_curriculum
28
+ bachelor_biologie_mikrobiologie_und_genetik
29
+ bachelor_molekulare_biologie_curriculum
30
+ bachelor_basisblock_biologie
31
+ bachelor_vektor_curriculum
32
+ bachelor_chemie_curriculum
33
+ bachelor_boku_individuell
34
+ bachelor_agrarwissenschaften_curriculum
35
+ bachelor_ökologie_curriculum
36
+ bachelor_lmbt_curriculum
37
+ bachelor_ernährung_curriculum
38
+ bachelor_pharmazie_curriculum
39
+ bachelor_boku_ubrm_curriculum
40
+
41
+ master_tu_vienna_biotechnology_curriculum
42
+ master_bioinformatik_curriculum
43
+ master_molbio_curriculum
44
+ master_lmbt_curriculum
45
+ master_boku_individuell
46
+ master_immuno
47
+ bachelor_master_tu_wien
48
+ bachelor_master_vektoren
49
+ bachelor_dummy
50
+
51
+ individual_curriculum_indi1
52
+ individual_curriculum_indi2
53
+ individual_curriculum_indi3
54
+ ).map {|line|
55
+ Studium.return_file_for_this_curriculum(line)
56
+ }
57
+
58
+ # ========================================================================= #
59
+ # === Studium.return_title_from_this_curriculum_file
60
+ #
61
+ # Do note that for this method to work, the curriculum-file at hand
62
+ # has to exist locally.
63
+ #
64
+ # The special entries called :indi1, :indi2, :indi3 and at the least
65
+ # also :indi4 should remain single, individual entries in the following
66
+ # case/when menu. The reason for this is so that we can always pinpoint
67
+ # to the individual curriculum number 1, number 2, number 3 and so
68
+ # forth.
69
+ #
70
+ # Usage examples:
71
+ #
72
+ # Studium.return_title_from_this_curriculum_file(:bachelor_vektor) # => "Bachelorcurriculum Vector-based strategies in Life Sciences, (Bio)Informatics, Molecular Medicine and Biotechnology"
73
+ # Studium.return_title_from_this_curriculum_file(:indi2) # => "Bachelorcurriculum Vector-based strategies in Life Sciences, (Bio)Informatics, Molecular Medicine and Biotechnology"
74
+ #
75
+ # ========================================================================= #
76
+ def self.return_title_from_this_curriculum_file(
77
+ i = :default_input_file,
78
+ also_remove_the_bachelor_master_attribution_at_the_start = false
79
+ )
80
+ if i.is_a? Array
81
+ i = i.first
82
+ end
83
+ case also_remove_the_bachelor_master_attribution_at_the_start
84
+ # ======================================================================= #
85
+ # === :shorter
86
+ # ======================================================================= #
87
+ when :shorter
88
+ also_remove_the_bachelor_master_attribution_at_the_start = true
89
+ end
90
+ # ======================================================================= #
91
+ # Handle nil-values given as input next.
92
+ # ======================================================================= #
93
+ i = :default_input_file if i.nil?
94
+ unless i.is_a?(String) and File.exist?(i)
95
+ i = ::Studium.return_file_for_this_curriculum(i.to_sym)
96
+ end
97
+ if File.exist? i
98
+ # ===================================================================== #
99
+ # If the file exists, we can read it in.
100
+ # ===================================================================== #
101
+ dataset = File.readlines(i, encoding: ::Studium.main_encoding?)
102
+ if dataset[1].start_with? '# === '
103
+ title = dataset[1].strip.delete('#=').strip
104
+ if also_remove_the_bachelor_master_attribution_at_the_start
105
+ title.sub!(/^Bachelorcurriculum/,'')
106
+ title.sub!(/^Mastercurriculum/,'')
107
+ title.strip!
108
+ end
109
+ return title # We assume this to be the title, and hence return it.
110
+ end
111
+ else
112
+ e 'No file exists at `'+i+'`.'
113
+ end
114
+ nil # Default return-value.
115
+ end
116
+
117
+ # ========================================================================= #
118
+ # === Studium.array_available_curricula
119
+ # ========================================================================= #
120
+ def self.array_available_curricula
121
+ ARRAY_ALL_AVAILABLE_CURRICULA.flatten.map {|entry|
122
+ result = File.basename(entry).sub(/\.yml$/,'')
123
+ if result =~ /_\d{6}$/
124
+ result[-7, 7] = ''
125
+ end
126
+ result
127
+ }
128
+ end
129
+
130
+ # ========================================================================= #
131
+ # === Studium.return_array_location_of_all_registered_curricula
132
+ #
133
+ # This method will return the location to the (local) curricula. On
134
+ # my home system, this means at the least 20 entries (Apr 2018).
135
+ #
136
+ # An Array will be returned.
137
+ # ========================================================================= #
138
+ def self.return_array_location_of_all_registered_curricula
139
+ ARRAY_ALL_AVAILABLE_CURRICULA
140
+ end; self.instance_eval { alias array_location_of_all_registered_curricula return_array_location_of_all_registered_curricula }
141
+
142
+ # ========================================================================= #
143
+ # === Studium.has_a_bachelor_curriculum?
144
+ #
145
+ # A bachelor curriculum most commonly starts with the three numbers
146
+ # '033'.
147
+ # ========================================================================= #
148
+ def self.has_a_bachelor_curriculum?(array)
149
+ array.any? {|line|
150
+ line.to_s.start_with?('033') or
151
+ line.to_s.start_with?('196') # or # For diploma-curricula.
152
+ #line.to_s.start_with?('199') # This is incorrect, though. See: Master Lehramt UF Chemie (199 504)
153
+ }
154
+ end; self.instance_eval { alias is_a_bachelor_lecture? has_a_bachelor_curriculum? } # === Studium.is_a_bachelor_curriculum?
155
+ self.instance_eval { alias has_a_bachelor_curriculum_entry? has_a_bachelor_curriculum? } # === Studium.has_a_bachelor_curriculum_entry?
156
+
157
+ # ========================================================================= #
158
+ # === Studium.has_a_master_curriculum?
159
+ #
160
+ # This method expects the input-argument to be an Array.
161
+ #
162
+ # Since April 2020, if the input is a String then it will be converted
163
+ # into an Array.
164
+ # ========================================================================= #
165
+ def self.has_a_master_curriculum?(array)
166
+ if array.is_a? String
167
+ array = [array]
168
+ end
169
+ array.any? {|line|
170
+ line.to_s.start_with?('066') or
171
+ line.to_s.start_with?('196') or # For diploma-curricula.
172
+ line.to_s.start_with?('199')
173
+ }
174
+ end; self.instance_eval { alias is_a_master_curriculum? has_a_master_curriculum? } # === Studium.is_a_master_curriculum?
175
+ self.instance_eval { alias has_a_master_lecture? has_a_master_curriculum? } # === Studium.has_a_master_lecture?
176
+ self.instance_eval { alias has_a_master_curriculum_entry? has_a_master_curriculum? } # === Studium.has_a_master_curriculum_entry?
177
+ self.instance_eval { alias is_this_lecture_registered_in_a_master_curriculum? has_a_master_curriculum? } # === Studium.is_this_lecture_registered_in_a_master_curriculum?
178
+ self.instance_eval { alias is_this_a_master_curriculum? has_a_master_curriculum? } # === Studium.is_this_a_master_curriculum?
179
+
180
+ # ========================================================================= #
181
+ # === Studium.is_a_master_lecture?
182
+ # ========================================================================= #
183
+ def self.is_a_master_lecture?(this_lecture)
184
+ if ::Studium.main_dataset?
185
+ dataset_to_use = Studium.main_dataset?
186
+ else
187
+ dataset_to_use = Studium.return_sanitized_dataset_from_the_file_lecture_information
188
+ Studium.main_dataset = dataset_to_use
189
+ end
190
+ if dataset_to_use.has_key?(this_lecture)
191
+ # ===================================================================== #
192
+ # Ok we have found this lecture registered. Now we grab the entry
193
+ # and pass it into has_a_master_curriculum?().
194
+ # ===================================================================== #
195
+ pointer = dataset_to_use[this_lecture]
196
+ these_curricula = pointer['curricula']
197
+ has_a_master_curriculum?(these_curricula)
198
+ else
199
+ false
200
+ end
201
+ end
202
+
203
+ # ========================================================================= #
204
+ # === Studium.lectures_without_attribution_to_any_curriculum
205
+ #
206
+ # This method will return all entries in the file lecture_information.yml
207
+ # that have no attribution to any official curriculum.
208
+ # ========================================================================= #
209
+ def self.lectures_without_attribution_to_any_curriculum
210
+ dataset = Studium.return_sanitized_dataset_from_the_file_lecture_information
211
+ dataset.select! {|a, inner_hash|
212
+ curricula = inner_hash['curricula']
213
+ # ===================================================================== #
214
+ # Find empty curricula next:
215
+ # ===================================================================== #
216
+ curricula.any? {|entry|
217
+ entry.is_a?(String) and entry.empty?
218
+ }
219
+ }
220
+ end
221
+
222
+ # ========================================================================= #
223
+ # === Studium.map_curriculum_number_to_curriculum_name
224
+ #
225
+ # This method will take a curriculum number and convert it into
226
+ # the long name of the curriculum at hand.
227
+ #
228
+ # This method will return a String.
229
+ #
230
+ # Usage example:
231
+ #
232
+ # Studium.map_curriculum_number_to_curriculum_name('033255') # => "Bachelorcurriculum Agrarwissenschaften"
233
+ #
234
+ # ========================================================================= #
235
+ def self.map_curriculum_number_to_curriculum_name(
236
+ this_curriculum_number,
237
+ reverse_order = false
238
+ )
239
+ # ======================================================================= #
240
+ # We need the proper encoding for the dataset from the
241
+ # curricula-yaml file. This is no longer necessary since
242
+ # as of June 2021. The old code was:
243
+ #
244
+ # _ = ensure_main_encoding(YAML.load_file(Studium.file_curricula))
245
+ #
246
+ # In the future this comment will probably be removed.
247
+ # ======================================================================= #
248
+ _ = YAML.load_file(Studium.file_curricula)
249
+ this_curriculum_number = this_curriculum_number.to_s
250
+ # ======================================================================= #
251
+ # Perform the conversion next:
252
+ # ======================================================================= #
253
+ this_curriculum = _[this_curriculum_number]
254
+ # ======================================================================= #
255
+ # We must ensure that the main encoding is used. This is no longer
256
+ # as important.
257
+ # ======================================================================= #
258
+ # this_curriculum = ensure_main_encoding(this_curriculum)
259
+ if this_curriculum.is_a? Array
260
+ this_curriculum = this_curriculum.first
261
+ end
262
+ return this_curriculum
263
+ end; self.instance_eval { alias return_name_of_this_curriculum map_curriculum_number_to_curriculum_name } # === Studium.return_name_of_this_curriculum
264
+ self.instance_eval { alias curriculum_id_to_curriculum_name map_curriculum_number_to_curriculum_name } # === Studium.curriculum_id_to_curriculum_name
265
+
266
+ # ========================================================================= #
267
+ # === Studium.map_partial_input_to_full_curriculum_name
268
+ #
269
+ # Note that this method will, if more than one match is found, always
270
+ # return the very first entry of an Array.
271
+ #
272
+ # Usage example:
273
+ #
274
+ # Studium.map_partial_input_to_full_curriculum_name('master_biotech') # => "Mastercurriculum Biotechnology"
275
+ #
276
+ # ========================================================================= #
277
+ def self.map_partial_input_to_full_curriculum_name(
278
+ i = 'master_biotech'
279
+ )
280
+ i = i.dup if i.is_a? Array
281
+ copy = i.dup
282
+ _ = YAML.load_file(Studium.file_curricula)
283
+ inverted_dataset = _.invert.map {|key, value|
284
+ key.first # The first entry is e. g. "Bachelorcurriculum Geodäsie und Geoinformation".
285
+ }
286
+ if copy.include? 'master_'
287
+ copy.sub!(/master_/,'Mastercurriculum ')
288
+ end
289
+ selection = inverted_dataset.select {|entry|
290
+ entry.downcase.start_with?(copy.downcase) or
291
+ entry.downcase.include?(copy.downcase)
292
+ }
293
+ if selection
294
+ if selection.size > 1
295
+ selection = selection.first # Obtain the first entry.
296
+ end
297
+ return selection
298
+ else
299
+ return i # else return the original input unmodified.
300
+ end
301
+ end
302
+
303
+ # ========================================================================= #
304
+ # === Studium.map_curriculum_name_to_curriculum_number
305
+ #
306
+ # This method will map from a curriculum name to the corresponding
307
+ # curriculum number.
308
+ #
309
+ # This method will return a String such as "033630".
310
+ #
311
+ # You can also provide a partial input such as:
312
+ #
313
+ # Studium.map_curriculum_name_to_curriculum_number('master_biotech')
314
+ #
315
+ # ========================================================================= #
316
+ def self.map_curriculum_name_to_curriculum_number(
317
+ this_curriculum_name
318
+ )
319
+ this_curriculum_name = this_curriculum_name.to_s
320
+ _ = YAML.load_file(Studium.file_curricula)
321
+ inverted_dataset = _.invert
322
+ # ======================================================================= #
323
+ # The entries to the above dataset may be like this:
324
+ #
325
+ # ["Mastercurriculum Lehramt UF Biologie und Umweltkunde", "Uni Wien"]=>
326
+ # "199502"
327
+ # ======================================================================= #
328
+ # We will build a new Hash, using only the first element of the above
329
+ # key.
330
+ # ======================================================================= #
331
+ new_hash = Hash[inverted_dataset.map {|array, curriculum_number|
332
+ [array.first, curriculum_number]
333
+ }]
334
+ this_curriculum = new_hash[this_curriculum_name]
335
+ unless this_curriculum
336
+ e "No result for `#{this_curriculum_name}`." # Notify the user in this case.
337
+ end
338
+ # ======================================================================= #
339
+ # We must ensure that the main encoding is used.
340
+ # ======================================================================= #
341
+ #this_curriculum = ensure_main_encoding(this_curriculum)
342
+ return this_curriculum
343
+ end
344
+
345
+ # ========================================================================= #
346
+ # === Studium.return_lectures_belonging_to_this_curriculum
347
+ #
348
+ # Usage example:
349
+ #
350
+ # i = Studium.return_lectures_belonging_to_this_curriculum(:bachelor_vector)
351
+ #
352
+ # ========================================================================= #
353
+ def self.return_lectures_belonging_to_this_curriculum(
354
+ i = :bachelor_vector
355
+ )
356
+ if i.is_a? Array
357
+ i = i.first
358
+ end
359
+ if i.is_a? String
360
+ i = i.tr(' ','_').to_sym # We do not allow ' ' characters right now.
361
+ end
362
+ dataset = return_dataset_from_this_curriculum_file(i)
363
+ result = dataset.keys
364
+ return result
365
+ end
366
+
367
+ # ========================================================================= #
368
+ # === Studium.return_random_curriculum
369
+ #
370
+ # This method will return a random curriculum.
371
+ # ========================================================================= #
372
+ def self.return_random_curriculum
373
+ ARRAY_REGISTERED_CURRICULA_FILES.sample
374
+ end
375
+
376
+ # ========================================================================= #
377
+ # === Studium.return_this_curriculum_as_a_string
378
+ # ========================================================================= #
379
+ def self.return_this_curriculum_as_a_string(i)
380
+ require 'studium/utility_scripts/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb'
381
+ i = i.join(' ').strip if i.is_a? Array
382
+ i = i.to_s.downcase.tr(' ','_')
383
+ _ = Studium::ShowLecturesOnTheCommandline.new(i) { :www }
384
+ string = _.html_string?
385
+ string
386
+ end
387
+
388
+ # ========================================================================= #
389
+ # === Studium.sanitize_dataset_derived_from_a_curriculum_file
390
+ #
391
+ # This method will sanitize the default dataset registered in a
392
+ # curriculum file. In particular, '#' comments will be removed.
393
+ #
394
+ # You should ideally use this method if you need to load up
395
+ # the dataset from a curriculum file.
396
+ # ========================================================================= #
397
+ def self.sanitize_dataset_derived_from_a_curriculum_file(dataset)
398
+ dataset.reject {|entry|
399
+ entry.strip.empty? or entry.strip.start_with?('#') # Remove comments as well.
400
+ }.map {|inner_entry|
401
+ if inner_entry.include? '#'
402
+ inner_entry = inner_entry[0 .. (inner_entry.index('#') - 1)].strip
403
+ end
404
+ inner_entry.strip.squeeze(' ')
405
+ }
406
+ end
407
+
408
+ # ========================================================================= #
409
+ # === Studium.return_dataset_from_this_curriculum_file
410
+ #
411
+ # This method will return the dataset of a curriculum file. This means
412
+ # that it will have all registered lectures already as-is, and return
413
+ # that complete dataset.
414
+ #
415
+ # The input should be the path to an existing file. Alternatively we
416
+ # will also sanitize a few special symbols given here, such as
417
+ # :default.
418
+ # ========================================================================= #
419
+ def self.return_dataset_from_this_curriculum_file(
420
+ i = :default_path
421
+ )
422
+ dataset_from_the_file_lecture_information =
423
+ return_sanitized_dataset_from_the_file_lecture_information
424
+ full_dataset = {}
425
+ if i.is_a? Array
426
+ i = i.first
427
+ end
428
+ case i
429
+ # ======================================================================= #
430
+ # === :indi2
431
+ #
432
+ # This refers to the second individual curriculum, bachelor.
433
+ # ======================================================================= #
434
+ when :indi2
435
+ i = return_file_for_this_curriculum(i)
436
+ # ======================================================================= #
437
+ # === :master_informatik_und_molekulare_biologie
438
+ # ======================================================================= #
439
+ when :master_bioinformatics_and_molecular_biotechnology,
440
+ :indi4
441
+ i = return_file_for_this_curriculum(i)
442
+ # ======================================================================= #
443
+ # === :indi3
444
+ #
445
+ # This refers to the third individual curriculum, bachelor.
446
+ # ======================================================================= #
447
+ when :indi3,
448
+ /^Mastercurriculum(-| )?Bioinformatics(-| )?and(-| )?\(?nano\)?biotechnology(-| )?in(-| )?molecular(-| )?medicine$/i
449
+ i = return_file_for_this_curriculum(i)
450
+ # ======================================================================= #
451
+ # === Bachelrcurriculum Dummy
452
+ #
453
+ # This is for the test-curriculum at the Bachelor-level..
454
+ # ======================================================================= #
455
+ when /^Bachelorcurriculum(-| )?Dummy$/i,
456
+ /^-?-?dummy$/i
457
+ i = return_file_for_this_curriculum(:bachelor_dummy_curriculum)
458
+ # ======================================================================= #
459
+ # === Mastercurriculum Dummy
460
+ #
461
+ # This is just for the test-curriculum.
462
+ # ======================================================================= #
463
+ when /^Mastercurriculum(-| )?Dummy$/i
464
+ i = return_file_for_this_curriculum(:master_dummy_curriculum)
465
+ # ======================================================================= #
466
+ # === default_path
467
+ #
468
+ # This is the default entry point.
469
+ # ======================================================================= #
470
+ when :default_path,
471
+ :default,
472
+ :bachelor_vektorx,
473
+ :bvek,
474
+ :bvec,
475
+ :indi1
476
+ i = FILE_BACHELOR_VEKTORX
477
+ # ======================================================================= #
478
+ # === :master_vektorx
479
+ #
480
+ # This refers to the individual vector-curriculum, master-part.
481
+ # ======================================================================= #
482
+ when :master_vektorx
483
+ i = return_file_for_this_curriculum(i)
484
+ # ======================================================================= #
485
+ # === bachelor_master_vektorx
486
+ # ======================================================================= #
487
+ when :bachelor_master_vektorx,
488
+ :top,
489
+ :main
490
+ i = [return_file_for_this_curriculum(:bachelor_vektoren)]+
491
+ [return_file_for_this_curriculum(:master_vektoren)]
492
+ else
493
+ if i and i.is_a?(String) and File.exist?(i)
494
+ # In this case simply use that file as-is.
495
+ else
496
+ i = return_file_for_this_curriculum(i)
497
+ end
498
+ end
499
+ unless i.is_a? Array
500
+ i = [i].flatten.compact
501
+ end
502
+ i.each {|file|
503
+ if file and File.exist?(file)
504
+ dataset = File.readlines(file, encoding: ::Studium.encoding?)
505
+ dataset = sanitize_dataset_derived_from_a_curriculum_file(dataset)
506
+ # =================================================================== #
507
+ # Next we'll have to obtain the proper dataset from the main Hash.
508
+ # This may fail, though, so we need to check for that and notify
509
+ # the user as well, in the event that failure will occur.
510
+ # =================================================================== #
511
+ dataset.each {|entry|
512
+ if dataset_from_the_file_lecture_information.has_key? entry
513
+ pointer = dataset_from_the_file_lecture_information[entry]
514
+ full_dataset[entry] = pointer
515
+ else
516
+ # e 'In line '+__LINE__.to_s+' of the file '+__FILE__.to_s
517
+ # e "No entry was found for #{::Colours.steelblue(entry)}."
518
+ # e 'Please correct this '+::Colours.tomato('error')+'.'
519
+ if is_on_roebe?
520
+ # e 'The caller() trace was:'
521
+ # pp caller()
522
+ end
523
+ # exit
524
+ end
525
+ }
526
+ else
527
+ e "No file exists at `#{i}`."
528
+ end
529
+ }
530
+ return full_dataset
531
+ end
532
+
533
+ # ========================================================================= #
534
+ # === Studium.is_this_lecture_part_of_the_vector_curriculum
535
+ #
536
+ # This method will return true or false, depending on whether the
537
+ # lecture at hand is part of the Vector curriculum or whether it
538
+ # is not.
539
+ #
540
+ # The second argument determines whether this method will be strict,
541
+ # and return only true if the input-name (first argument) is exactly
542
+ # as registered; or whether it may :be_lenient, which means that
543
+ # it will try to find a similarly-named lecture. In the latter case,
544
+ # tokens such as ',' will be ignored.
545
+ #
546
+ # Presently leading numbers are ignored.
547
+ # ========================================================================= #
548
+ def self.is_this_lecture_part_of_the_vector_curriculum(
549
+ this_lecture = ARGV,
550
+ modus_operandi = :be_strict # The modus can be strict or lenient.
551
+ )
552
+ this_lecture = this_lecture.first if this_lecture.is_a? Array
553
+ this_lecture = this_lecture.to_s.rstrip # Don't want any ' ' characters on the right hand side.
554
+ # unless this_lecture.encoding.to_s.include? ::Studium.main_encoding?
555
+ # this_lecture = ensure_main_encoding(this_lecture)
556
+ # end
557
+ this_lecture.delete!('()')
558
+ # ======================================================================= #
559
+ # If the input starts with a number and has at the least one ' ', we chop
560
+ # the number part away.
561
+ # ======================================================================= #
562
+ if this_lecture.start_with?(/\d+/) and this_lecture.include?(' ')
563
+ this_lecture = this_lecture.split(' ')[1 .. -1].join(' ')
564
+ end
565
+ # ======================================================================= #
566
+ # First, load up the two .yml files of the individual curriculum.
567
+ # ======================================================================= #
568
+ dataset = Studium.read_dataset_from_a_curriculum_file(
569
+ :bachelor_vektor, :remove_comments_and_title
570
+ )+
571
+ Studium.read_dataset_from_a_curriculum_file(
572
+ :master_vektor, :remove_comments_and_title
573
+ )
574
+ dataset.flatten!
575
+ # ======================================================================= #
576
+ # Sanitize all lectures there. To simplify, we will also get rid of all
577
+ # '(' and ')' tokens.
578
+ # ======================================================================= #
579
+ dataset = dataset.map {|entry|
580
+ entry = entry.to_s
581
+ # unless entry.encoding.to_s.include? ::Studium.main_encoding?
582
+ # entry = ensure_main_encoding(entry)
583
+ # end
584
+ entry = entry.dup if entry.frozen?
585
+ entry.delete!('()') # Remove both '(' and ')' tokens.
586
+ case modus_operandi
587
+ when :be_lenient
588
+ entry.delete!(',:') # We get rid of ',' and ':' tokens.
589
+ end
590
+ entry.chop! if entry.end_with? '.' # Get rid of trailing '.'
591
+ if (entry =~ /^\d{1}/) and
592
+ entry.include?(' ')
593
+ entry = entry.split(' ')[1..-1].join(' ')
594
+ end
595
+ entry
596
+ }
597
+ # ======================================================================= #
598
+ # By default we do a "hard" check, without any lenience.
599
+ # ======================================================================= #
600
+ is_included_or_is_not_included = dataset.include? this_lecture
601
+ case modus_operandi
602
+ when :be_lenient
603
+ # ===================================================================== #
604
+ # In this case we will be more tolerant.
605
+ # ===================================================================== #
606
+ is_included_or_is_not_included = dataset.any? {|line|
607
+ line.start_with?(this_lecture) or (line =~ /#{this_lecture}$/)
608
+ }
609
+ end
610
+ return is_included_or_is_not_included
611
+ end; self.instance_eval { alias is_this_lecture_part_of_the_vektor_curriculum? is_this_lecture_part_of_the_vector_curriculum } # === Studium.is_this_lecture_part_of_the_vektor_curriculum?
612
+ self.instance_eval { alias is_part_of_the_vektor_curriculum? is_this_lecture_part_of_the_vector_curriculum } # === Studium.is_part_of_the_vektor_curriculum?
613
+
614
+ # ========================================================================= #
615
+ # === Studium.return_curriculum_of_this_lva_number
616
+ #
617
+ # This method will return the LVA number of a particular curriculum.
618
+ #
619
+ # Pass in the name of the curriculum.
620
+ #
621
+ # Invocation example:
622
+ #
623
+ # Studium.return_curriculum_of_this_lva_number '033521'
624
+ #
625
+ # ========================================================================= #
626
+ def self.return_curriculum_of_this_lva_number(i)
627
+ # ======================================================================= #
628
+ # First, sanitize strings if they include at the least two newlines:
629
+ # ======================================================================= #
630
+ if i.is_a?(String) and i.count("\n") > 1
631
+ i = i.split("\n").flatten
632
+ end
633
+ dataset = YAML.load_file(Studium.file_curricula)
634
+ _ = {}
635
+ dataset.each_pair {|key, value|
636
+ # key = Studium.ensure_main_encoding(key)
637
+ # value = Studium.ensure_main_encoding(value)
638
+ # ===================================================================== #
639
+ # Get rid of two words from the key.
640
+ # ===================================================================== #
641
+ _[key.sub(/Bachelorcurriculum /,'').sub(/Mastercurriculum /,'')] = value
642
+ }
643
+ dataset = _ # Re-assign it to our dataset.
644
+ if i.is_a? Array
645
+ i.each {|entry| return_curriculum_of_this_lva_number(entry) }
646
+ else
647
+ # ===================================================================== #
648
+ # Next, we must find the corresponding entries in the curriculum.yml
649
+ # file.
650
+ #
651
+ # The dataset from the curricula.yml file is a hash having
652
+ # key-value entries, with the value being an Array:
653
+ #
654
+ # (1) first comes the number of the curriculum, as key
655
+ # (2) the full and complete name of the curriculum, at
656
+ # hand comes as the first element of the Array
657
+ # (3) the university at which the lecture is held, comes
658
+ # as last element of the Array.
659
+ #
660
+ # ===================================================================== #
661
+ if dataset.has_key? i
662
+ name_of_the_curriculum = dataset[i]
663
+ if name_of_the_curriculum.is_a? Array
664
+ name_of_the_curriculum = name_of_the_curriculum.first
665
+ end
666
+ e ::Colours.rev+
667
+ 'The name of the curriculum associated with the LVA '\
668
+ 'ID '+Studium::Colours.simp(i)+' is '\
669
+ '`'+Studium::Colours.sfancy(name_of_the_curriculum)+'`.'
670
+ else
671
+ e 'The curriculum for '+Studium::Colours.sfancy(i)+' does not '\
672
+ 'appear to be registered.'
673
+ e ' '+Studium::Colours.sfile(Studium.file_curricula)
674
+ end
675
+ end
676
+ end
677
+
678
+ # ========================================================================= #
679
+ # === Studium.from_curriculum_id_to_university
680
+ #
681
+ # This method will translate from the curriculum-id to the corresponding
682
+ # university.
683
+ # ========================================================================= #
684
+ def self.from_curriculum_id_to_university(
685
+ i, report_unregistered_keys = true
686
+ )
687
+ if i.is_a? Array
688
+ i = i.flatten.join(' ').strip
689
+ end
690
+ result = nil
691
+ dataset_from_the_yaml_file = YAML.load_file(Studium.file_curricula)
692
+ i = i.to_s.dup
693
+ # i = ensure_main_encoding(i.to_s.dup)
694
+ if dataset_from_the_yaml_file.has_key? i
695
+ array_pointer = dataset_from_the_yaml_file[i]
696
+ # ===================================================================== #
697
+ # The name of the university is presently hardcoded at the second
698
+ # position. In the past the following code used .last, but since
699
+ # as of October 2019, the particular .yml file format was changed.
700
+ # ===================================================================== #
701
+ name_of_the_university = array_pointer[1]
702
+ result = name_of_the_university
703
+ else # Else report that the key is not registered.
704
+ if report_unregistered_keys
705
+ e "Key `#{i}` is not registered."
706
+ end
707
+ end
708
+ result
709
+ end; self.instance_eval { alias curriculum_id_to_university from_curriculum_id_to_university } # === Studium.curriculum_id_to_university
710
+
711
+ # ========================================================================= #
712
+ # === Studium.name_of_this_curriculum
713
+ #
714
+ # Note that we will assume that the curricula-files, which are yaml
715
+ # files, will have the name of the curriculum at hand on the first
716
+ # line.
717
+ # ========================================================================= #
718
+ def self.name_of_this_curriculum(i)
719
+ i = i.first if i.is_a? Array
720
+ i = Studium.return_file_for_this_curriculum(i)
721
+ if File.exist? i
722
+ dataset = File.readlines(i, encoding: ::Studium.encoding?)
723
+ first_line = dataset.select {|line| line.start_with? '# === ' }.first.strip
724
+ i = first_line.sub(/^# === /,'').
725
+ sub(/Bachelorcurriculum /,'').
726
+ sub(/Mastercurriculum /,'')
727
+ end
728
+ return i.strip
729
+ end
730
+
731
+ # ========================================================================= #
732
+ # === Studium.show_passed_ects_in_the_individual_bachelor_and_master_curricula
733
+ # ========================================================================= #
734
+ def self.show_passed_ects_in_the_individual_bachelor_and_master_curricula
735
+ hash = {}
736
+ hash.default = 0
737
+ dataset = return_dataset_from_file_lecture_information
738
+ dataset.select! {|name_of_the_lecture, inner_dataset|
739
+ inner_dataset.has_key?(:already_solved) and
740
+ (inner_dataset[:already_solved] == true)
741
+ }
742
+ # ======================================================================= #
743
+ # Next we can build up a Hash storing the n_ects.
744
+ # ======================================================================= #
745
+ dataset.each_pair {|name, inner_dataset|
746
+ n_ects = inner_dataset[:ects]
747
+ curricula = inner_dataset['curricula']
748
+ if has_a_master_curriculum?(curricula)
749
+ bachelor_or_master = :master
750
+ elsif has_a_bachelor_curriculum?(curricula)
751
+ bachelor_or_master = :bachelor
752
+ elsif has_a_bachelor_curriculum?(curricula) and
753
+ has_a_master_curriculum?(curricula)
754
+ bachelor_or_master = :bachelor
755
+ hash[bachelor_or_master] += n_ects
756
+ bachelor_or_master = :master # <- Will be set lateron.
757
+ else
758
+ bachelor_or_master = :bachelor
759
+ end
760
+ hash[bachelor_or_master] += n_ects
761
+ }
762
+ n_ects_in_total = hash.values.sum
763
+ sorted = hash.sort_by {|name, inner_dataset| name }
764
+ e
765
+ e ::Studium::Colours.lightgreen(
766
+ 'We passed this amount of ECTS in bachelor/master lectures:'
767
+ )
768
+ e; sorted.each {|bachelor_or_master, n_ects_points|
769
+ # ===================================================================== #
770
+ # Determine the percentage value as %.
771
+ # ===================================================================== #
772
+ percentage_value = (
773
+ (n_ects_points * 100) / n_ects_in_total
774
+ ).round(2).to_s+'%'
775
+ e ' '+
776
+ ::Studium::Colours.royalblue(
777
+ (bachelor_or_master.to_s+': ').ljust(12)
778
+ )+
779
+ ::Studium::Colours.slateblue(
780
+ n_ects_points.to_s+' ECTS points'
781
+ )+' '+::Studium::Colours.crimson(percentage_value)
782
+ }
783
+ e
784
+ e ::Studium::Colours.gold(
785
+ ' (Note that this will include lectures that are dual-registered'
786
+ )
787
+ e ::Studium::Colours.gold(
788
+ ' in both a bachelor and a master curriculum.)'
789
+ )
790
+ e
791
+ end
792
+
793
+ # ========================================================================= #
794
+ # === Studium.read_dataset_from_a_curriculum_file
795
+ #
796
+ # This method will read in a dataset from a curriculum file, without
797
+ # depending on YAML.load_file().
798
+ #
799
+ # It had to be added in February 2018 because I transitioned away from
800
+ # using YAML, into my own custom format, which is not only simpler but
801
+ # also more fault-tolerant - in the sense that fewers mistakes will
802
+ # happen. Plus - I get to easily control the Encoding in use as well.
803
+ #
804
+ # A symbol can also be passed into this method. This will then be
805
+ # expanded to the corresponding curriculum-file.
806
+ #
807
+ # Examples for this:
808
+ #
809
+ # Studium.read_dataset_from_a_curriculum_file(:bachelor_vektorx)
810
+ # Studium.read_dataset_from_a_curriculum_file(:bachelor_vektorx, :remove_comments)
811
+ #
812
+ # More usage examples:
813
+ #
814
+ # dataset = Studium.read_dataset_from_a_curriculum_file(:bachelor_genetik)
815
+ #
816
+ # ========================================================================= #
817
+ def self.read_dataset_from_a_curriculum_file(
818
+ i,
819
+ optional_commands = nil,
820
+ do_flatten_the_dataset = true
821
+ )
822
+ if block_given?
823
+ yielded = yield
824
+ case yielded
825
+ when :remove_comments
826
+ optional_commands = :remove_comments # <- Sync towards this variable.
827
+ end
828
+ end
829
+ dataset = [i].flatten.compact
830
+ dataset.map! {|entry|
831
+ if entry.is_a?(Symbol) or
832
+ (entry.is_a?(String) and entry.start_with?('--'))
833
+ # =================================================================== #
834
+ # Next we will try to find the proper name, if a Symbol is used here.
835
+ # =================================================================== #
836
+ entry = ::Studium.return_file_for_this_curriculum(entry)
837
+ end
838
+ if entry.is_a? Array
839
+ entry = entry.map {|inner_line|
840
+ File.readlines(
841
+ inner_line, encoding: ::Studium.main_encoding?
842
+ )
843
+ }
844
+ else
845
+ if File.exist? entry.to_s
846
+ entry = File.readlines(
847
+ entry, encoding: ::Studium.main_encoding?
848
+ )
849
+ else
850
+ e 'From the '+
851
+ Colours.steelblue('file')+
852
+ ': '+
853
+ sfile('studium/toplevel_methods/curriculum_related_code.rb')
854
+ e "No file could be found at #{entry}."
855
+ e
856
+ e 'The caller() backtrace was:'
857
+ e
858
+ pp caller()
859
+ e
860
+ end
861
+ end
862
+ # ===================================================================== #
863
+ # The .flatten operation has to be optional, since we may also have
864
+ # two different curricula combined, in a bachelor-master setup.
865
+ # ===================================================================== #
866
+ if entry.is_a? Array
867
+ entry.flatten! if do_flatten_the_dataset
868
+ entry.reject! {|line|
869
+ if line.is_a? String
870
+ line.strip.empty?
871
+ elsif line.is_a? Array
872
+ line.select {|inner_line| inner_line.strip.empty? }
873
+ end
874
+ }
875
+ unless optional_commands == :retain_comments
876
+ entry.reject! {|line|
877
+ line.strip.start_with?('#')
878
+ }
879
+ end
880
+ else
881
+ e 'The input is not an Array - this may indicate an error. '\
882
+ '(reported from the file '+__FILE__+')'
883
+ end
884
+ entry
885
+ }
886
+ dataset.flatten!
887
+ if optional_commands
888
+ case optional_commands
889
+ # ===================================================================== #
890
+ # === :remove_comments_and_title
891
+ #
892
+ # This entry point chops away any comments and also entries with
893
+ # @title.
894
+ # ===================================================================== #
895
+ when :remove_comments_and_title
896
+ dataset.map! {|line|
897
+ if line and line.include?('#')
898
+ line = line[0 .. (line.index('#') - 1)]
899
+ line.strip!
900
+ end
901
+ line = nil if line and line.include?('@title ') # Remove it here then.
902
+ line
903
+ }
904
+ dataset.compact!
905
+ # ===================================================================== #
906
+ # This entry point chops away any comments.
907
+ # ===================================================================== #
908
+ when :remove_comments
909
+ dataset.map! {|line|
910
+ if line.include? '#'
911
+ line = line[0 .. (line.index('#') - 1)]
912
+ line.strip!
913
+ end
914
+ line
915
+ }
916
+ end
917
+ end
918
+ return dataset # And return the dataset here finally.
919
+ end
920
+
921
+ end
922
+
923
+ if __FILE__ == $PROGRAM_NAME
924
+ require 'colours/colours_e_autoinclude.rb'
925
+ require 'verbose_truth'
926
+ _ = '300019 Computational methods in microbial ecology'
927
+ e Colours.rev
928
+ unless ARGV.empty?
929
+ _ = ARGV.join(' ').strip
930
+ end
931
+ e 'Is '+_+' a master lecture? '+
932
+ VerboseTruth[Studium.is_a_master_lecture?(_).to_s]
933
+ Studium.return_array_location_of_all_registered_curricula.each {|entry|
934
+ if entry.is_a? String
935
+ e entry
936
+ else
937
+ pp entry
938
+ end
939
+ }
940
+ # ========================================================================= #
941
+ # === From curriculum-ID to university:
942
+ # ========================================================================= #
943
+ e Studium.from_curriculum_id_to_university(ARGV)
944
+ e
945
+ pp Studium.read_dataset_from_a_curriculum_file
946
+ e
947
+ e Studium.map_curriculum_number_to_curriculum_name('033602')
948
+ e Studium.map_curriculum_name_to_curriculum_number('Bachelorcurriculum Pferdewissenschaften')
949
+ e Studium.map_curriculum_name_to_curriculum_number('Bachelorcurriculum Biologie')
950
+ e
951
+ pp Studium.return_lectures_belonging_to_this_curriculum
952
+ e
953
+ pp Studium.return_this_curriculum_as_a_string(ARGV)
954
+ e
955
+ pp Studium.return_dataset_from_this_curriculum_file # (ARGV)
956
+ e '(1) First showing the result of Studium.return_title_from_this_curriculum_file(ARGV)'
957
+ e
958
+ e steelblue(Studium.return_title_from_this_curriculum_file(ARGV))
959
+ e
960
+ e '(2) Next showing the result of Studium.return_title_from_this_curriculum_file(ARGV, true)'
961
+ e ' which will be shorter.'
962
+ e
963
+ e steelblue(Studium.return_title_from_this_curriculum_file(ARGV, :shorter))
964
+ e
965
+ e Studium.return_curriculum_of_this_lva_number(ARGV)
966
+ e
967
+ if ARGV.empty?
968
+ Studium.is_this_lecture_part_of_the_vector_curriculum(ARGV, :be_lenient)
969
+ else
970
+ puts Studium.is_this_lecture_part_of_the_vector_curriculum(ARGV, :be_lenient)
971
+ end
972
+
973
+ result = Studium.lectures_without_attribution_to_any_curriculum
974
+ e
975
+ result.each {|name, hash|
976
+ remote_url = hash[:homepage].to_s
977
+ e ' '+slateblue(name.ljust(25))+
978
+ ' '+lightblue(remote_url)
979
+ }
980
+ e
981
+ Studium.show_passed_ects_in_the_individual_bachelor_and_master_curricula
982
+ e
983
+ e Studium.name_of_this_curriculum(ARGV)
984
+ end # no_attribution
985
+ # hasamastercurriculum 301284 Biochemie
986
+ # rb return_this_curriculum_as_a_string.rb Bachelor genetik
987
+ # rb return_dataset_from_this_curriculum_file
988
+ # returntitlefromthiscurriculumfile mvec
989
+ # returncurriculumofthislvanumber 033521
990
+ # isthislecturepartofthevectorcurriculum "Molekulare Medizin 2"
991
+ # isthislecturepartofthevectorcurriculum "Molekulare Medizin 1"
992
+ # isthislecturepartofthevectorcurriculum "Biochemie für Biologen"
993
+ # isthislecturepartofthevectorcurriculum "Methods in ultrastructure research in Eng"
994
+ # isthislecturepartofthevectorcurriculum "153.075 Chemie für TPH"
995
+ # isthislecturepartofthevectorcurriculum "362.111 Biophysik"
996
+ # isthislecturepartofthevectorcurriculum "Laboratory course in molecular biology II (in Eng.)"
997
+ # isthislecturepartofthevectorcurriculum "Ausgewählte Kapitel aus der KTWW"
998
+ # showpassedectsintheindividualbachelorandmastercurricula
999
+ # nameofthiscurriculum indi2