studium 0.16.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (887) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +3211 -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 +10 -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/return_n_questions_solved_in_total +7 -0
  38. data/bin/rti_conflict +7 -0
  39. data/bin/search_for_n_ects +7 -0
  40. data/bin/show_lectures_on_the_commandline +7 -0
  41. data/bin/show_passed_exams_having_this_grade +7 -0
  42. data/bin/show_themes +7 -0
  43. data/bin/solved +9 -0
  44. data/bin/solved_ects +7 -0
  45. data/bin/studienkennzahl +7 -0
  46. data/bin/studium +7 -0
  47. data/bin/studium_skeleton +7 -0
  48. data/bin/ufind +7 -0
  49. data/bin/upcoming_exams +7 -0
  50. data/bin/week_parser +7 -0
  51. data/doc/ECTS_CONSIDERATIONS/ECTS_CONSIDERATIONS.md +82 -0
  52. data/doc/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER.md +44 -0
  53. data/doc/README.gen +3164 -0
  54. data/doc/SQL_database_specification/SQL_database_specification.md +46 -0
  55. data/doc/deprecated_components/deprecated_components.md +46 -0
  56. data/doc/documentation_for_the_file_lecture_information/documentation_for_the_file_lecture_information.md +311 -0
  57. data/doc/elegant_colours/elegant_colours.md +21 -0
  58. data/doc/statistics/yearly_statistics.md +8 -0
  59. data/doc/todo/todo_for_the_graphical_parts_of_the_studium_gem_including_www_related_aspects.md +92 -0
  60. data/doc/todo/todo_for_the_studium_gem.md +55 -0
  61. data/img/STUDIES.png +0 -0
  62. data/lib/studium/autoinclude.rb +7 -0
  63. data/lib/studium/base/base.rb +3229 -0
  64. data/lib/studium/base/colours.rb +246 -0
  65. data/lib/studium/base/commandline_arguments_module/commandline_arguments_module.rb +115 -0
  66. data/lib/studium/base/prototype/prototype.rb +230 -0
  67. data/lib/studium/base/runmode_module/runmode_module.rb +103 -0
  68. data/lib/studium/c/README.md +2 -0
  69. data/lib/studium/c/a.out +0 -0
  70. data/lib/studium/c/obtain_random_entry.c +11 -0
  71. data/lib/studium/check_and_sanitize/README.md +15 -0
  72. data/lib/studium/check_and_sanitize/check_curriculum_for_correct_separation_of_bachelor_and_master.rb +141 -0
  73. data/lib/studium/check_and_sanitize/check_for_all_exam_topics_being_registered.rb +118 -0
  74. data/lib/studium/check_and_sanitize/check_for_correct_themes_of_each_course.rb +100 -0
  75. data/lib/studium/check_and_sanitize/check_for_existing_description_of_this_lecture.rb +194 -0
  76. data/lib/studium/check_and_sanitize/check_important_exams.rb +132 -0
  77. data/lib/studium/check_and_sanitize/check_the_lecture_information_file.rb +166 -0
  78. data/lib/studium/check_and_sanitize/find_duplicate_lectures.rb +124 -0
  79. data/lib/studium/check_and_sanitize/missing_priority_entry.rb +44 -0
  80. data/lib/studium/check_and_sanitize/sanitize_lecture_information.rb +427 -0
  81. data/lib/studium/check_and_sanitize/sanitize_this_string_containing_the_lva_dates.rb +79 -0
  82. data/lib/studium/colours/colours.rb +587 -0
  83. data/lib/studium/colours/sfancy.rb +49 -0
  84. data/lib/studium/colours/sfile.rb +39 -0
  85. data/lib/studium/colours/simp.rb +40 -0
  86. data/lib/studium/colours/use_colours.rb +39 -0
  87. data/lib/studium/colours/use_this_colour_for_exam_questions_and_exam_answers.rb +80 -0
  88. data/lib/studium/commandline/commandline.rb +1839 -0
  89. data/lib/studium/constants/colours.rb +16 -0
  90. data/lib/studium/constants/constants.rb +533 -0
  91. data/lib/studium/constants/curricula_related_constants.rb +504 -0
  92. data/lib/studium/constants/exam_topics.rb +156 -0
  93. data/lib/studium/constants/file_lecture_information.rb +55 -0
  94. data/lib/studium/constants/image_constants.rb +272 -0
  95. data/lib/studium/constants/regexes.rb +58 -0
  96. data/lib/studium/constants/roebe_specific_constants.rb +216 -0
  97. data/lib/studium/constants/standalone_constants.rb +372 -0
  98. data/lib/studium/constants/web_constants.rb +28 -0
  99. data/lib/studium/css/project.css +267 -0
  100. data/lib/studium/curricula/attribute_lecture_to_curriculum/attribute_boku_lecture_to_curriculum.rb +384 -0
  101. data/lib/studium/curricula/attribute_lecture_to_curriculum/attribute_lecture_to_curriculum.rb +238 -0
  102. data/lib/studium/curricula/curricula_from_this_website/curricula_from_this_website.rb +141 -0
  103. data/lib/studium/curricula/curriculum.rb +213 -0
  104. data/lib/studium/curricula/curriculum_as_string.rb +280 -0
  105. data/lib/studium/curricula/curriculum_module_displayer/constants.rb +33 -0
  106. data/lib/studium/curricula/curriculum_module_displayer/curriculum_module_displayer.rb +417 -0
  107. data/lib/studium/curricula/curriculum_module_displayer/initialize.rb +25 -0
  108. data/lib/studium/curricula/curriculum_module_displayer/menu.rb +45 -0
  109. data/lib/studium/curricula/curriculum_module_displayer/reset.rb +74 -0
  110. data/lib/studium/curricula/curriculum_module_displayer/run.rb +20 -0
  111. data/lib/studium/curricula/curriculum_module_displayer/set_use_this_curriculum.rb +93 -0
  112. data/lib/studium/curricula/curriculum_module_displayer/show_and_report.rb +190 -0
  113. data/lib/studium/curricula/determine_curricula/constants.rb +11 -0
  114. data/lib/studium/curricula/determine_curricula/determine_curricula.rb +36 -0
  115. data/lib/studium/curricula/determine_curricula/help.rb +39 -0
  116. data/lib/studium/curricula/determine_curricula/initialize.rb +48 -0
  117. data/lib/studium/curricula/determine_curricula/menu.rb +151 -0
  118. data/lib/studium/curricula/determine_curricula/misc.rb +403 -0
  119. data/lib/studium/curricula/determine_curricula/report.rb +143 -0
  120. data/lib/studium/curricula/determine_curricula/reset.rb +59 -0
  121. data/lib/studium/curricula/determine_curricula/run.rb +19 -0
  122. data/lib/studium/curricula/determine_elective_courses_in_this_curriculum.rb +112 -0
  123. data/lib/studium/curricula/display_bachelor_curricula.rb +90 -0
  124. data/lib/studium/curricula/handle_curricula/README.md +9 -0
  125. data/lib/studium/curricula/handle_curricula/handle_curricula.rb +100 -0
  126. data/lib/studium/curricula/handle_curricula/misc.rb +798 -0
  127. data/lib/studium/curricula/mitteilungsbl/303/244tter/mitteilungsbl/303/244tter.rb +323 -0
  128. data/lib/studium/curricula/modules/display_on_the_commandline.rb +319 -0
  129. data/lib/studium/curricula/modules/return_n_ects_in_this_module.rb +75 -0
  130. data/lib/studium/curricula/n_percent_solved_in_this_curriculum.rb +75 -0
  131. data/lib/studium/curricula/prepare_individual_curriculum.rb +304 -0
  132. data/lib/studium/curricula/random_curriculum_creator/random_curriculum_creator.rb +164 -0
  133. data/lib/studium/curricula/show_all_unfinished_courses_of_this_curriculum/show_all_unfinished_courses_of_this_curriculum.rb +116 -0
  134. data/lib/studium/curricula/show_lectures_of_this_curriculum.rb +114 -0
  135. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/show_lectures_of_this_curriculum_id.rb +554 -0
  136. data/lib/studium/curricula/show_solved_percentage_among_the_registered_curricula.rb +87 -0
  137. data/lib/studium/curricula/sorted_individual_curricula.rb +121 -0
  138. data/lib/studium/ects/boku_ects_splitter.rb +128 -0
  139. data/lib/studium/ects/ects_per_university/ects_per_university.rb +179 -0
  140. data/lib/studium/ects/ects_scanner.rb +141 -0
  141. data/lib/studium/ects/ects_to_university_parser.rb +142 -0
  142. data/lib/studium/ects/last_entry_is_curriculum.rb +150 -0
  143. data/lib/studium/ects/n_ects_in_these_lectures.rb +196 -0
  144. data/lib/studium/ects/n_ects_points_in_mandatory_presence_courses.rb +50 -0
  145. data/lib/studium/ects/return_n_ects_from_this_file.rb +59 -0
  146. data/lib/studium/ects/return_n_ects_from_this_url.rb +197 -0
  147. data/lib/studium/ects/search_for_n_ects/OLD_search_for_n_ects.rb +0 -0
  148. data/lib/studium/ects/search_for_n_ects/search_for_n_ects.rb +719 -0
  149. data/lib/studium/ects/show_completed_ects_in_all_curricula.rb +232 -0
  150. data/lib/studium/ects/show_passed_credits_per_curriculum.rb +276 -0
  151. data/lib/studium/ects/simple_total_ects_points.rb +135 -0
  152. data/lib/studium/ects/solved_ects/constants.rb +19 -0
  153. data/lib/studium/ects/solved_ects/reset.rb +51 -0
  154. data/lib/studium/ects/solved_ects/solved_ects.rb +325 -0
  155. data/lib/studium/ects/solved_ects_per_university/reset.rb +25 -0
  156. data/lib/studium/ects/solved_ects_per_university/solved_ects_per_university.rb +106 -0
  157. data/lib/studium/ects/still_missing.rb +129 -0
  158. data/lib/studium/ects/sum_of_ects.rb +144 -0
  159. data/lib/studium/encoding/encoding.rb +109 -0
  160. data/lib/studium/exam_topics/RNAi_siRNA_and_miRNA +100 -0
  161. data/lib/studium/exam_topics/abfall_als_ressource +86 -0
  162. data/lib/studium/exam_topics/advanced_biochemistry +927 -0
  163. data/lib/studium/exam_topics/advanced_biotechnology +234 -0
  164. data/lib/studium/exam_topics/advanced_cellbiology +219 -0
  165. data/lib/studium/exam_topics/advanced_chemistry +527 -0
  166. data/lib/studium/exam_topics/advanced_immunology +152 -0
  167. data/lib/studium/exam_topics/advanced_microbiology +44 -0
  168. data/lib/studium/exam_topics/advanced_topics_in_plant_sciences +109 -0
  169. data/lib/studium/exam_topics/advanced_virology +245 -0
  170. data/lib/studium/exam_topics/ageing +153 -0
  171. data/lib/studium/exam_topics/agrar_ecology +67 -0
  172. data/lib/studium/exam_topics/agrarmarkt +73 -0
  173. data/lib/studium/exam_topics/agrarphysik +35 -0
  174. data/lib/studium/exam_topics/alcohols +31 -0
  175. data/lib/studium/exam_topics/algorithms +77 -0
  176. data/lib/studium/exam_topics/allergie +76 -0
  177. data/lib/studium/exam_topics/allgemeine_genetik +1006 -0
  178. data/lib/studium/exam_topics/allgemeine_mikrobiologie +1008 -0
  179. data/lib/studium/exam_topics/aminoacids +464 -0
  180. data/lib/studium/exam_topics/analytische_chemie_1 +133 -0
  181. data/lib/studium/exam_topics/analytische_chemie_2 +31 -0
  182. data/lib/studium/exam_topics/anatomie +295 -0
  183. data/lib/studium/exam_topics/anorganische_chemie +350 -0
  184. data/lib/studium/exam_topics/anthropologie +138 -0
  185. data/lib/studium/exam_topics/antibodies_and_antigens +791 -0
  186. data/lib/studium/exam_topics/apoptosis +35 -0
  187. data/lib/studium/exam_topics/archaea +112 -0
  188. data/lib/studium/exam_topics/archaeo_viruses +7 -0
  189. data/lib/studium/exam_topics/architecture +8 -0
  190. data/lib/studium/exam_topics/artificial_intelligence +89 -0
  191. data/lib/studium/exam_topics/atomemissionsspektrometrie +6 -0
  192. data/lib/studium/exam_topics/audio +11 -0
  193. data/lib/studium/exam_topics/bacteriophages +266 -0
  194. data/lib/studium/exam_topics/basic_biochemistry +1008 -0
  195. data/lib/studium/exam_topics/basic_biotechnology +1011 -0
  196. data/lib/studium/exam_topics/basic_chemistry +1007 -0
  197. data/lib/studium/exam_topics/basic_virology +1007 -0
  198. data/lib/studium/exam_topics/bauwesen +6 -0
  199. data/lib/studium/exam_topics/betriebssysteme +128 -0
  200. data/lib/studium/exam_topics/betriebswirtschaftslehre +29 -0
  201. data/lib/studium/exam_topics/bioanalytik_und_biosensoren +391 -0
  202. data/lib/studium/exam_topics/biochips +79 -0
  203. data/lib/studium/exam_topics/bioelektrochemie +57 -0
  204. data/lib/studium/exam_topics/biofilms +54 -0
  205. data/lib/studium/exam_topics/bioinformatics +511 -0
  206. data/lib/studium/exam_topics/biological_therapeutics +156 -0
  207. data/lib/studium/exam_topics/biologie +149 -0
  208. data/lib/studium/exam_topics/biomarkers +137 -0
  209. data/lib/studium/exam_topics/biomaterials +90 -0
  210. data/lib/studium/exam_topics/biomembranes +6 -0
  211. data/lib/studium/exam_topics/bionik +65 -0
  212. data/lib/studium/exam_topics/biophysik +34 -0
  213. data/lib/studium/exam_topics/biopolymers +10 -0
  214. data/lib/studium/exam_topics/bioprozesstechnik +149 -0
  215. data/lib/studium/exam_topics/bioressourcenmanagement +78 -0
  216. data/lib/studium/exam_topics/birds +5 -0
  217. data/lib/studium/exam_topics/bodenkunde +384 -0
  218. data/lib/studium/exam_topics/bodenmikrobiologie +40 -0
  219. data/lib/studium/exam_topics/cancerbiology +484 -0
  220. data/lib/studium/exam_topics/cell_cultures +229 -0
  221. data/lib/studium/exam_topics/cellbiology +1011 -0
  222. data/lib/studium/exam_topics/cellular_transport_and_protein_secretion +27 -0
  223. data/lib/studium/exam_topics/cellular_vesicles +11 -0
  224. data/lib/studium/exam_topics/cellulose +6 -0
  225. data/lib/studium/exam_topics/chemische_technologie_anorganischer_stoffe +209 -0
  226. data/lib/studium/exam_topics/chemische_technologie_organischer_stoffe +25 -0
  227. data/lib/studium/exam_topics/chemisches_labor +60 -0
  228. data/lib/studium/exam_topics/chemokines_and_cytokines +45 -0
  229. data/lib/studium/exam_topics/chemotaxis_quorum_sensing_and_motility_in_prokaryotes +116 -0
  230. data/lib/studium/exam_topics/citric_acid_cycle +84 -0
  231. data/lib/studium/exam_topics/clinical_microbiology +516 -0
  232. data/lib/studium/exam_topics/computer_science +308 -0
  233. data/lib/studium/exam_topics/computer_vision_and_computer_graphics +13 -0
  234. data/lib/studium/exam_topics/crispr +51 -0
  235. data/lib/studium/exam_topics/cyanobacteria +44 -0
  236. data/lib/studium/exam_topics/cytogenetics_and_chromosome_biology +579 -0
  237. data/lib/studium/exam_topics/databases_and_sql +126 -0
  238. data/lib/studium/exam_topics/dna_mutation_and_dna_repair +70 -0
  239. data/lib/studium/exam_topics/dna_replication +67 -0
  240. data/lib/studium/exam_topics/ecogenetics +26 -0
  241. data/lib/studium/exam_topics/ecological_agriculture +12 -0
  242. data/lib/studium/exam_topics/ecology +330 -0
  243. data/lib/studium/exam_topics/economy +218 -0
  244. data/lib/studium/exam_topics/electron_microscopy +7 -0
  245. data/lib/studium/exam_topics/elektronenmikroskopie +356 -0
  246. data/lib/studium/exam_topics/elektrophorese +132 -0
  247. data/lib/studium/exam_topics/elektrotechnik_und_elektrizit/303/244t +42 -0
  248. data/lib/studium/exam_topics/elisa +55 -0
  249. data/lib/studium/exam_topics/embryologie_und_entwicklung +650 -0
  250. data/lib/studium/exam_topics/endospores_and_spores +104 -0
  251. data/lib/studium/exam_topics/enzymes_and_cofactors +393 -0
  252. data/lib/studium/exam_topics/epigenetik +187 -0
  253. data/lib/studium/exam_topics/erste_hilfe +174 -0
  254. data/lib/studium/exam_topics/ethik +143 -0
  255. data/lib/studium/exam_topics/evolution_and_evolutionary_genetics +367 -0
  256. data/lib/studium/exam_topics/excel +7 -0
  257. data/lib/studium/exam_topics/fish +19 -0
  258. data/lib/studium/exam_topics/fluorescence_microscopy +10 -0
  259. data/lib/studium/exam_topics/food_microbiology_and_food_biotechnology +92 -0
  260. data/lib/studium/exam_topics/forensik +11 -0
  261. data/lib/studium/exam_topics/forstwirtschaft +53 -0
  262. data/lib/studium/exam_topics/fortgeschrittene_genetik +643 -0
  263. data/lib/studium/exam_topics/fortgeschrittene_gentechnik +218 -0
  264. data/lib/studium/exam_topics/fortgeschrittene_physik +6 -0
  265. data/lib/studium/exam_topics/fungi +119 -0
  266. data/lib/studium/exam_topics/genetische_krankheiten +198 -0
  267. data/lib/studium/exam_topics/genexpression +1008 -0
  268. data/lib/studium/exam_topics/genomics_and_metagenomics +280 -0
  269. data/lib/studium/exam_topics/gentechnik_und_praktische_biochemie +954 -0
  270. data/lib/studium/exam_topics/geochemistry +67 -0
  271. data/lib/studium/exam_topics/geography +9 -0
  272. data/lib/studium/exam_topics/geologie_und_mineralogie +624 -0
  273. data/lib/studium/exam_topics/geometrie +56 -0
  274. data/lib/studium/exam_topics/geschichte +95 -0
  275. data/lib/studium/exam_topics/gluconeogenesis +72 -0
  276. data/lib/studium/exam_topics/glycogen +45 -0
  277. data/lib/studium/exam_topics/glycolysis +118 -0
  278. data/lib/studium/exam_topics/glykomik +121 -0
  279. data/lib/studium/exam_topics/glyoxylatzyklus +31 -0
  280. data/lib/studium/exam_topics/grassland_cultivation +32 -0
  281. data/lib/studium/exam_topics/hormone +148 -0
  282. data/lib/studium/exam_topics/html +8 -0
  283. data/lib/studium/exam_topics/human_ecology +8 -0
  284. data/lib/studium/exam_topics/hygiene +224 -0
  285. data/lib/studium/exam_topics/imaging_and_microscopy +267 -0
  286. data/lib/studium/exam_topics/immunanalytik +94 -0
  287. data/lib/studium/exam_topics/immunologie +1011 -0
  288. data/lib/studium/exam_topics/informatik +117 -0
  289. data/lib/studium/exam_topics/innate_immunity +42 -0
  290. data/lib/studium/exam_topics/insekten +64 -0
  291. data/lib/studium/exam_topics/insulin_and_diabetes +57 -0
  292. data/lib/studium/exam_topics/java +618 -0
  293. data/lib/studium/exam_topics/javascript +20 -0
  294. data/lib/studium/exam_topics/klima +6 -0
  295. data/lib/studium/exam_topics/kryptographie +9 -0
  296. data/lib/studium/exam_topics/landtechnik +26 -0
  297. data/lib/studium/exam_topics/lebensmittel_und_getr/303/244nke +223 -0
  298. data/lib/studium/exam_topics/lebensmitteltechnologie +16 -0
  299. data/lib/studium/exam_topics/light_microscopy +19 -0
  300. data/lib/studium/exam_topics/linux_and_unix +36 -0
  301. data/lib/studium/exam_topics/lipids +141 -0
  302. data/lib/studium/exam_topics/macroeconomics +39 -0
  303. data/lib/studium/exam_topics/marketing +7 -0
  304. data/lib/studium/exam_topics/mathematics +297 -0
  305. data/lib/studium/exam_topics/medizin_und_biomedizinische_technik +254 -0
  306. data/lib/studium/exam_topics/medizinische_chemie_und_pharmazie +437 -0
  307. data/lib/studium/exam_topics/messtechnik_und_regeltechnik +104 -0
  308. data/lib/studium/exam_topics/metabolismus +478 -0
  309. data/lib/studium/exam_topics/meteorologie_und_atmosph/303/244re +120 -0
  310. data/lib/studium/exam_topics/microbial_ecology +36 -0
  311. data/lib/studium/exam_topics/microcontrollers +11 -0
  312. data/lib/studium/exam_topics/mikrobielle_lebensgemeinschaften +54 -0
  313. data/lib/studium/exam_topics/mikrobielle_physiologie +285 -0
  314. data/lib/studium/exam_topics/mitochondria +40 -0
  315. data/lib/studium/exam_topics/mixed +287 -0
  316. data/lib/studium/exam_topics/molecular_biology_of_plants +272 -0
  317. data/lib/studium/exam_topics/molekulare_medizin +133 -0
  318. data/lib/studium/exam_topics/nanotechnologie +453 -0
  319. data/lib/studium/exam_topics/nature_conservation_and_biodiversity +244 -0
  320. data/lib/studium/exam_topics/naturstoffe +9 -0
  321. data/lib/studium/exam_topics/netzwerke +63 -0
  322. data/lib/studium/exam_topics/neurobiology +307 -0
  323. data/lib/studium/exam_topics/nucleotide_sequencing +41 -0
  324. data/lib/studium/exam_topics/nutztierethologie +11 -0
  325. data/lib/studium/exam_topics/object_oriented_modeling +14 -0
  326. data/lib/studium/exam_topics/obstbau +249 -0
  327. data/lib/studium/exam_topics/organische_chemie +1007 -0
  328. data/lib/studium/exam_topics/organische_chemie_2 +136 -0
  329. data/lib/studium/exam_topics/paleobiology +39 -0
  330. data/lib/studium/exam_topics/parasitic_diseases_and_molecular_infection_biology +336 -0
  331. data/lib/studium/exam_topics/patent_law +55 -0
  332. data/lib/studium/exam_topics/pathologie +731 -0
  333. data/lib/studium/exam_topics/pcr +155 -0
  334. data/lib/studium/exam_topics/pentosephosphatweg +61 -0
  335. data/lib/studium/exam_topics/peroxisomes_glycosomes_and_lysosomes +66 -0
  336. data/lib/studium/exam_topics/pflanzenanatomie +261 -0
  337. data/lib/studium/exam_topics/pflanzenbau +24 -0
  338. data/lib/studium/exam_topics/pflanzenschutz +35 -0
  339. data/lib/studium/exam_topics/pflanzenwissenschaften +1009 -0
  340. data/lib/studium/exam_topics/pharmaceutical_biotechnology +251 -0
  341. data/lib/studium/exam_topics/physik +446 -1
  342. data/lib/studium/exam_topics/physikalische_chemie +79 -0
  343. data/lib/studium/exam_topics/physiology_and_histology +536 -0
  344. data/lib/studium/exam_topics/phytochemie +33 -0
  345. data/lib/studium/exam_topics/plant_biotechnology +131 -0
  346. data/lib/studium/exam_topics/plant_breeding +64 -0
  347. data/lib/studium/exam_topics/plant_development +50 -0
  348. data/lib/studium/exam_topics/populationsgenetik +138 -0
  349. data/lib/studium/exam_topics/posttranslationale_modifikation_von_proteinen +197 -0
  350. data/lib/studium/exam_topics/projektmanagement +220 -0
  351. data/lib/studium/exam_topics/prokaryote_genetics +562 -0
  352. data/lib/studium/exam_topics/protein_engineering +35 -0
  353. data/lib/studium/exam_topics/proteolyse +38 -0
  354. data/lib/studium/exam_topics/proteomik +41 -0
  355. data/lib/studium/exam_topics/protozoans +24 -0
  356. data/lib/studium/exam_topics/prozesstechnik +95 -0
  357. data/lib/studium/exam_topics/psychologie +18 -0
  358. data/lib/studium/exam_topics/python +372 -0
  359. data/lib/studium/exam_topics/quality_management +266 -0
  360. data/lib/studium/exam_topics/rechtsgrundlagen +123 -0
  361. data/lib/studium/exam_topics/research_topics_in_immunobiology +42 -0
  362. data/lib/studium/exam_topics/rna_and_dna +519 -0
  363. data/lib/studium/exam_topics/rna_seq +13 -0
  364. data/lib/studium/exam_topics/robotics +12 -0
  365. data/lib/studium/exam_topics/ruby +238 -0
  366. data/lib/studium/exam_topics/ruby_on_rails +63 -0
  367. data/lib/studium/exam_topics/scientific_writing_and_publishing +38 -0
  368. data/lib/studium/exam_topics/semisynthese_von_proteinen_und_nukleotiden +120 -0
  369. data/lib/studium/exam_topics/sexualbiologie +183 -0
  370. data/lib/studium/exam_topics/signal_transduction_and_laser_systems +212 -0
  371. data/lib/studium/exam_topics/sozialbiologie +9 -0
  372. data/lib/studium/exam_topics/splicing_exons_and_introns +65 -0
  373. data/lib/studium/exam_topics/statistik +268 -0
  374. data/lib/studium/exam_topics/stemcells +181 -0
  375. data/lib/studium/exam_topics/stickstofffixierung +91 -0
  376. data/lib/studium/exam_topics/structural_bioinformatics +54 -0
  377. data/lib/studium/exam_topics/strukturbiologie +423 -0
  378. data/lib/studium/exam_topics/system_biology_and_synthetic_biology +108 -0
  379. data/lib/studium/exam_topics/systematische_zoologie +439 -0
  380. data/lib/studium/exam_topics/technical_ecology +144 -0
  381. data/lib/studium/exam_topics/technische_chemie +208 -0
  382. data/lib/studium/exam_topics/technische_grundlagen_der_informatik +39 -0
  383. data/lib/studium/exam_topics/technische_mikrobiologie +393 -0
  384. data/lib/studium/exam_topics/technisches_zeichnen +5 -0
  385. data/lib/studium/exam_topics/the_bacterial_cell_wall +98 -0
  386. data/lib/studium/exam_topics/the_c_plus_plus_programming_language +531 -0
  387. data/lib/studium/exam_topics/the_c_programming_language +133 -0
  388. data/lib/studium/exam_topics/the_cellcycle +98 -0
  389. data/lib/studium/exam_topics/the_european_union +121 -0
  390. data/lib/studium/exam_topics/the_interferon_system +39 -0
  391. data/lib/studium/exam_topics/the_microbiome +164 -0
  392. data/lib/studium/exam_topics/the_universe +31 -0
  393. data/lib/studium/exam_topics/theoretische_chemie +5 -0
  394. data/lib/studium/exam_topics/theoretische_informatik +161 -0
  395. data/lib/studium/exam_topics/thermodynamics +21 -0
  396. data/lib/studium/exam_topics/tierzucht +139 -0
  397. data/lib/studium/exam_topics/toxikologie +453 -0
  398. data/lib/studium/exam_topics/transcription +185 -0
  399. data/lib/studium/exam_topics/translation_ribosomes_and_translational_control +154 -0
  400. data/lib/studium/exam_topics/umweltbiotechnologie +64 -0
  401. data/lib/studium/exam_topics/umweltchemie +233 -0
  402. data/lib/studium/exam_topics/urbanism_and_traffic +19 -0
  403. data/lib/studium/exam_topics/urea_cycle +56 -0
  404. data/lib/studium/exam_topics/vaccines_and_vaccination +250 -0
  405. data/lib/studium/exam_topics/vectors_and_gene_therapy +247 -0
  406. data/lib/studium/exam_topics/verfahrenstechnik +37 -0
  407. data/lib/studium/exam_topics/verhaltensbiologie +56 -0
  408. data/lib/studium/exam_topics/veterinary_medicine +10 -0
  409. data/lib/studium/exam_topics/vitamine +32 -0
  410. data/lib/studium/exam_topics/wasserkunde +138 -0
  411. data/lib/studium/exam_topics/weinbau +86 -0
  412. data/lib/studium/exam_topics/wissenschaft +20 -0
  413. data/lib/studium/exam_topics/yeast +104 -0
  414. data/lib/studium/exam_topics/zoologie +334 -0
  415. data/lib/studium/exams/afterburn/afterburn.rb +304 -0
  416. data/lib/studium/exams/ask_exam_from_the_upcoming_exams_pool.rb +150 -0
  417. data/lib/studium/exams/ask_exam_question/ask_exam_question.rb +2757 -0
  418. data/lib/studium/exams/ask_exam_topic_question.rb +112 -0
  419. data/lib/studium/exams/ask_question_from_alias.rb +141 -0
  420. data/lib/studium/exams/ask_question_from_any_of_the_still_missing_lectures.rb +130 -0
  421. data/lib/studium/exams/ask_question_from_grouped_themes.rb +141 -0
  422. data/lib/studium/exams/ask_question_from_last_topic.rb +91 -0
  423. data/lib/studium/exams/ask_random_question.rb +195 -0
  424. data/lib/studium/exams/autoinclude.rb +7 -0
  425. data/lib/studium/exams/average_grade/average_grade.rb +402 -0
  426. data/lib/studium/exams/csv/create_csv_passed_exams_file.rb +217 -0
  427. data/lib/studium/exams/cycle.rb +291 -0
  428. data/lib/studium/exams/dataset/dataset.rb +128 -0
  429. data/lib/studium/exams/designate_ten_random_exam_topics/designate_ten_random_exam_topics.rb +88 -0
  430. data/lib/studium/exams/exam/exam.rb +130 -0
  431. data/lib/studium/exams/exam_bubble/exam_bubble.rb +445 -0
  432. data/lib/studium/exams/exam_bubble/menu_for_the_main_loop.rb +111 -0
  433. data/lib/studium/exams/exam_question/README.md +3 -0
  434. data/lib/studium/exams/exam_question/exam_question.rb +427 -0
  435. data/lib/studium/exams/exam_registration_at/constants.rb +49 -0
  436. data/lib/studium/exams/exam_registration_at/exam_registration_at.rb +242 -0
  437. data/lib/studium/exams/exam_registration_at/help.rb +46 -0
  438. data/lib/studium/exams/exam_registration_at/menu.rb +81 -0
  439. data/lib/studium/exams/exam_registration_at/report_and_show.rb +133 -0
  440. data/lib/studium/exams/exam_registration_at/reset.rb +54 -0
  441. data/lib/studium/exams/exam_statistics_from_this_file/exam_statistics_from_this_file.rb +119 -0
  442. data/lib/studium/exams/exam_topics.rb +194 -0
  443. data/lib/studium/exams/exams.rb +20 -0
  444. data/lib/studium/exams/exams_per_month/exams_per_month.rb +2429 -0
  445. data/lib/studium/exams/exams_this_week.rb +182 -0
  446. data/lib/studium/exams/fix_exam_dates.rb +121 -0
  447. data/lib/studium/exams/frozen.rb +36 -0
  448. data/lib/studium/exams/last_exams/last_exams.rb +398 -0
  449. data/lib/studium/exams/lectures_without_exam_entry.rb +137 -0
  450. data/lib/studium/exams/mandatory_continuous_assessment/mandatory_continuous_assessment.rb +1359 -0
  451. data/lib/studium/exams/move_all_unsolved_exam_questions_to_the_top_of_the_file.rb +173 -0
  452. 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
  453. data/lib/studium/exams/n_exams_in_these_topics.rb +477 -0
  454. data/lib/studium/exams/next_exam.rb +107 -0
  455. data/lib/studium/exams/next_exams.rb +378 -0
  456. data/lib/studium/exams/open_exam_associated_url/open_exam_associated_url.rb +154 -0
  457. data/lib/studium/exams/open_last_exam_question_asked_file/constants.rb +15 -0
  458. data/lib/studium/exams/open_last_exam_question_asked_file/initialize.rb +29 -0
  459. data/lib/studium/exams/open_last_exam_question_asked_file/open_last_exam_question_asked_file.rb +110 -0
  460. data/lib/studium/exams/push_solved_questions_on_top.rb +180 -0
  461. data/lib/studium/exams/questions_solved_from_day_to_day/questions_solved_from_day_to_day.rb +374 -0
  462. data/lib/studium/exams/remote_ftp_url.rb +52 -0
  463. data/lib/studium/exams/repeat_last_question.rb +78 -0
  464. data/lib/studium/exams/report_total_amount_of_questions_and_answers_for.rb +116 -0
  465. data/lib/studium/exams/show_all_passed_exams_of_this_university.rb +252 -0
  466. data/lib/studium/exams/show_backlog_of_exams/show_backlog_of_exams.rb +116 -0
  467. data/lib/studium/exams/show_next_exams_for.rb +133 -0
  468. data/lib/studium/exams/show_themes/constants.rb +28 -0
  469. data/lib/studium/exams/show_themes/menu.rb +61 -0
  470. data/lib/studium/exams/show_themes/misc.rb +537 -0
  471. data/lib/studium/exams/show_themes/reset.rb +62 -0
  472. data/lib/studium/exams/show_themes/show_themes.rb +27 -0
  473. data/lib/studium/exams/show_upcoming_exams/show_upcoming_exams.rb +1375 -0
  474. data/lib/studium/exams/solve_all_questions_from_this_topic.rb +114 -0
  475. data/lib/studium/exams/solved/constants.rb +32 -0
  476. data/lib/studium/exams/solved/help.rb +24 -0
  477. data/lib/studium/exams/solved/initialize.rb +55 -0
  478. data/lib/studium/exams/solved/menu.rb +41 -0
  479. data/lib/studium/exams/solved/reset.rb +28 -0
  480. data/lib/studium/exams/solved/solved.rb +326 -0
  481. data/lib/studium/exams/timetable/constants.rb +142 -0
  482. data/lib/studium/exams/timetable/timetable.rb +450 -0
  483. data/lib/studium/exams/unsolve_all_questions_from_this_topic.rb +163 -0
  484. data/lib/studium/exams/upcoming_exams/upcoming_exams.rb +556 -0
  485. data/lib/studium/exams/upcoming_exams_at_the_boku/constants.rb +23 -0
  486. data/lib/studium/exams/upcoming_exams_at_the_boku/html.rb +64 -0
  487. data/lib/studium/exams/upcoming_exams_at_the_boku/upcoming_exams_at_the_boku.rb +194 -0
  488. data/lib/studium/exams/upcoming_exams_dataset.rb +247 -0
  489. data/lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb +257 -0
  490. data/lib/studium/exams/upload_exam_topics.rb +360 -0
  491. data/lib/studium/graphviz/README.md +4 -0
  492. data/lib/studium/graphviz/bachelor_vector_based_strategies.dot +160 -0
  493. data/lib/studium/graphviz/master_vector_based_strategies.dot +46 -0
  494. data/lib/studium/gui/gtk3/README.md +1 -0
  495. data/lib/studium/gui/gtk3/ask_exam_question/ask_exam_question.config +6 -0
  496. data/lib/studium/gui/gtk3/ask_exam_question/ask_exam_question.rb +760 -0
  497. data/lib/studium/gui/gtk3/ask_exam_question/manifest.yml +12 -0
  498. data/lib/studium/gui/gtk3/control_panel/control_panel.rb +39 -0
  499. data/lib/studium/gui/gtk3/curriculum_viewer/curriculum_viewer.rb +513 -0
  500. data/lib/studium/gui/gtk3/ects_per_university/ects_per_university.rb +217 -0
  501. data/lib/studium/gui/gtk3/exam_question_widget/exam_question_widget.rb +1889 -0
  502. data/lib/studium/gui/gtk3/expand_time_range/expand_time_range.rb +34 -0
  503. data/lib/studium/gui/gtk3/information_about_a_lecture/information_about_a_lecture.rb +34 -0
  504. data/lib/studium/gui/gtk3/lecture_information/lecture_information.rb +200 -0
  505. data/lib/studium/gui/gtk3/show_upcoming_exams/show_upcoming_exams.rb +34 -0
  506. data/lib/studium/gui/java/exam_question/ExamQuestion$1.class +0 -0
  507. data/lib/studium/gui/java/exam_question/ExamQuestion.class +0 -0
  508. data/lib/studium/gui/java/exam_question/ExamQuestion.java +215 -0
  509. data/lib/studium/gui/javafx/exam_question_widget/exam_question_widget.rb +58 -0
  510. data/lib/studium/gui/jruby/exam_question_widget/exam_question_widget.rb +317 -0
  511. data/lib/studium/gui/libui/ask_exam_question/ask_exam_question.rb +349 -0
  512. data/lib/studium/gui/shared_code/control_panel/control_panel_module.rb +314 -0
  513. data/lib/studium/gui/shared_code/exam_question_widget/exam_question_widget_module.rb +39 -0
  514. data/lib/studium/gui/shared_code/expand_time_range/expand_time_range.css +0 -0
  515. data/lib/studium/gui/shared_code/expand_time_range/expand_time_range_module.rb +190 -0
  516. data/lib/studium/gui/shared_code/information_about_a_lecture/information_about_a_lecture_module.rb +180 -0
  517. data/lib/studium/gui/shared_code/show_upcoming_exams/show_upcoming_exams_module.rb +206 -0
  518. data/lib/studium/images/libui_ask_exam_question.png +0 -0
  519. data/lib/studium/images/outdated.png +0 -0
  520. data/lib/studium/images/small_logos/DNA.png +0 -0
  521. data/lib/studium/images/small_logos/README.md +2 -0
  522. data/lib/studium/images/small_logos/solved.png +0 -0
  523. data/lib/studium/images/studies_favicon.png +0 -0
  524. data/lib/studium/java/README.md +5 -0
  525. data/lib/studium/java/studium/AskExamQuestion.java +461 -0
  526. data/lib/studium/java/studium/Base.java +123 -0
  527. data/lib/studium/java/studium/Constants.java +122 -0
  528. data/lib/studium/java/studium/EnsureThatTheLogDirectoryExists.java +57 -0
  529. data/lib/studium/java/studium/Mkdir.java +13 -0
  530. data/lib/studium/java/studium/OpenLastExamQuestionurlLinkViaTheBrowser.java +90 -0
  531. data/lib/studium/java/studium/ReturnNQuestionsSolvedInTotal.java +69 -0
  532. data/lib/studium/java/studium/Solved.java +112 -0
  533. data/lib/studium/java/studium/Test.java +60 -0
  534. data/lib/studium/java/studium/studium/AskExamQuestion.class +0 -0
  535. data/lib/studium/java/studium/studium/Base.class +0 -0
  536. data/lib/studium/java/studium/studium/Constants.class +0 -0
  537. data/lib/studium/java/studium/studium/EnsureThatTheLogDirectoryExists.class +0 -0
  538. data/lib/studium/java/studium/studium/Mkdir.class +0 -0
  539. data/lib/studium/java/studium/studium/OpenLastExamQuestionurlLinkViaTheBrowser.class +0 -0
  540. data/lib/studium/java/studium/studium/ReturnNQuestionsSolvedInTotal.class +0 -0
  541. data/lib/studium/java/studium/studium/Solved.class +0 -0
  542. data/lib/studium/java/studium/studium/Test.class +0 -0
  543. data/lib/studium/jobs/jobs.rb +80 -0
  544. data/lib/studium/logging/README.md +2 -0
  545. data/lib/studium/logging/ensure_that_the_log_directory_exists.rb +58 -0
  546. data/lib/studium/logging/html_log_directory.rb +42 -0
  547. data/lib/studium/logging/log_directory.rb +112 -0
  548. data/lib/studium/logging/store_last_question_asked_into_file.rb +137 -0
  549. data/lib/studium/parsers/README.md +2 -0
  550. data/lib/studium/parsers/custom_exam_results_parser.rb +209 -0
  551. data/lib/studium/parsers/parse_lva_dates.rb +233 -0
  552. data/lib/studium/parsers/parse_remote_lecture.rb +331 -0
  553. data/lib/studium/project/project.rb +88 -0
  554. data/lib/studium/requires/common_popular_requires.rb +37 -0
  555. data/lib/studium/requires/commonly_used_requires.rb +14 -0
  556. data/lib/studium/requires/require_class_exams_solved.rb +7 -0
  557. data/lib/studium/requires/require_ects_scripts.rb +27 -0
  558. data/lib/studium/requires/require_encoding.rb +7 -0
  559. data/lib/studium/requires/require_the_check_and_sanitize_files.rb +31 -0
  560. data/lib/studium/requires/require_the_curricula_files.rb +28 -0
  561. data/lib/studium/requires/require_the_exam_question_class.rb +7 -0
  562. data/lib/studium/requires/require_the_exams_files.rb +46 -0
  563. data/lib/studium/requires/require_the_logging_files.rb +23 -0
  564. data/lib/studium/requires/require_the_parsers.rb +28 -0
  565. data/lib/studium/requires/require_the_studium_constants.rb +10 -0
  566. data/lib/studium/requires/require_the_studium_project.rb +70 -0
  567. data/lib/studium/requires/require_the_toplevel_methods.rb +27 -0
  568. data/lib/studium/requires/require_the_utility_scripts.rb +34 -0
  569. data/lib/studium/requires/require_upcoming_exams.rb +7 -0
  570. data/lib/studium/requires/require_yaml.rb +7 -0
  571. data/lib/studium/requires/return_remote_homepage_of_this_lecture.rb +7 -0
  572. data/lib/studium/requires/with_GUI.rb +13 -0
  573. data/lib/studium/requires/www_mode.rb +17 -0
  574. data/lib/studium/statistics/README.md +4 -0
  575. data/lib/studium/statistics/best_exam_months.rb +92 -0
  576. data/lib/studium/statistics/curriculum_comparer/curriculum_comparer.rb +386 -0
  577. data/lib/studium/statistics/determine_exam_statistics_from_this_file.rb +142 -0
  578. data/lib/studium/statistics/exam_topics_that_are_about_to_be_completed.rb +119 -0
  579. data/lib/studium/statistics/max_stats.rb +170 -0
  580. data/lib/studium/statistics/new_questions_per_year.rb +147 -0
  581. data/lib/studium/statistics/report_how_many_ects_points_per_curriculum_were_completed.rb +167 -0
  582. data/lib/studium/statistics/report_how_many_exam_questions_were_answered.rb +474 -0
  583. data/lib/studium/statistics/show_exam_statistics.rb +66 -0
  584. data/lib/studium/statistics/show_which_courses_are_in_a_bachelor_or_master_curriculum_respectively.rb +104 -0
  585. data/lib/studium/statistics/top_stats.rb +127 -0
  586. data/lib/studium/toplevel_methods/all_passed_exams.rb +37 -0
  587. data/lib/studium/toplevel_methods/already_solved_this_lecture.rb +101 -0
  588. data/lib/studium/toplevel_methods/available_topics.rb +161 -0
  589. data/lib/studium/toplevel_methods/calculate_pr/303/274fungsimmanente_lectures_from_this_file.rb +55 -0
  590. data/lib/studium/toplevel_methods/copy_the_last_backup_of_file_lecture_information.rb +34 -0
  591. data/lib/studium/toplevel_methods/curriculum_related_code.rb +1038 -0
  592. data/lib/studium/toplevel_methods/does_this_course_require_mandatory_presence.rb +52 -0
  593. data/lib/studium/toplevel_methods/download.rb +161 -0
  594. data/lib/studium/toplevel_methods/e.rb +16 -0
  595. data/lib/studium/toplevel_methods/ects_from_lectures.rb +250 -0
  596. data/lib/studium/toplevel_methods/editor.rb +67 -0
  597. data/lib/studium/toplevel_methods/esystem.rb +29 -0
  598. data/lib/studium/toplevel_methods/filter_away_invalid_questions.rb +77 -0
  599. data/lib/studium/toplevel_methods/find_exam_topic_and_exam_title.rb +3807 -0
  600. data/lib/studium/toplevel_methods/has_this_lecture_been_already_passed_but_the_id_was_changed_lateron.rb +42 -0
  601. data/lib/studium/toplevel_methods/has_this_module_been_completed.rb +208 -0
  602. data/lib/studium/toplevel_methods/install_the_project_on_the_given_hostsystem.rb +32 -0
  603. data/lib/studium/toplevel_methods/is_on_roebe.rb +27 -0
  604. data/lib/studium/toplevel_methods/is_this_exam_topic_included.rb +46 -0
  605. data/lib/studium/toplevel_methods/is_this_homepage_registered.rb +32 -0
  606. data/lib/studium/toplevel_methods/is_this_lecture_a_practical_course.rb +93 -0
  607. data/lib/studium/toplevel_methods/is_this_lecture_registered_in_upcoming_exams.rb +45 -0
  608. data/lib/studium/toplevel_methods/java.rb +32 -0
  609. data/lib/studium/toplevel_methods/lecture_information.rb +108 -0
  610. data/lib/studium/toplevel_methods/lva_numbers.rb +358 -0
  611. data/lib/studium/toplevel_methods/main_dataset.rb +73 -0
  612. data/lib/studium/toplevel_methods/map_input_to_this_curriculum_filename.rb +607 -0
  613. data/lib/studium/toplevel_methods/methods_related_to_files_and_directories.rb +481 -0
  614. data/lib/studium/toplevel_methods/misc.rb +580 -0
  615. data/lib/studium/toplevel_methods/n_questions_available.rb +141 -0
  616. data/lib/studium/toplevel_methods/n_topics_available.rb +63 -0
  617. data/lib/studium/toplevel_methods/names_of_all_solved_exams.rb +77 -0
  618. data/lib/studium/toplevel_methods/note_down_the_start_time_and_how_many_exams_have_been_already_solved.rb +69 -0
  619. data/lib/studium/toplevel_methods/opnn.rb +27 -0
  620. data/lib/studium/toplevel_methods/passed_this_exam_on.rb +105 -0
  621. data/lib/studium/toplevel_methods/read_delay_between_questions_from_file.rb +36 -0
  622. data/lib/studium/toplevel_methods/regexes.rb +90 -0
  623. data/lib/studium/toplevel_methods/registered_for_this_exam.rb +83 -0
  624. data/lib/studium/toplevel_methods/remove_comments.rb +27 -0
  625. data/lib/studium/toplevel_methods/remove_exam_topics_that_were_already_answered.rb +27 -0
  626. data/lib/studium/toplevel_methods/remove_tags.rb +35 -0
  627. data/lib/studium/toplevel_methods/report.rb +439 -0
  628. data/lib/studium/toplevel_methods/return_all_exams_on_this_day.rb +69 -0
  629. data/lib/studium/toplevel_methods/return_dataset_for_this_exam_topic.rb +45 -0
  630. data/lib/studium/toplevel_methods/return_ects_from_this_lecture_stored_in_the_file_lecture_information.rb +194 -0
  631. data/lib/studium/toplevel_methods/return_hash_of_already_solved_lectures.rb +46 -0
  632. data/lib/studium/toplevel_methods/return_last_exam_question.rb +34 -0
  633. data/lib/studium/toplevel_methods/return_lva_number_of_this_lecture.rb +72 -0
  634. data/lib/studium/toplevel_methods/return_n_percent_solved_from_this_topic.rb +90 -0
  635. data/lib/studium/toplevel_methods/return_n_questions_were_answered_for_this_topic.rb +62 -0
  636. data/lib/studium/toplevel_methods/return_proper_university_image.rb +86 -0
  637. data/lib/studium/toplevel_methods/return_question_answer_string_from_this_topic.rb +63 -0
  638. data/lib/studium/toplevel_methods/return_remote_homepage_of_this_lecture.rb +11311 -0
  639. data/lib/studium/toplevel_methods/return_remote_moodle_link_of_this_lecture.rb +2405 -0
  640. data/lib/studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb +110 -0
  641. data/lib/studium/toplevel_methods/return_theme_of_the_next_upcoming_exam.rb +40 -0
  642. data/lib/studium/toplevel_methods/runmode.rb +97 -0
  643. data/lib/studium/toplevel_methods/sanitized_dataset_from_file_passed_exams_per_month.rb +53 -0
  644. data/lib/studium/toplevel_methods/set_last_file_for_exam_questions.rb +64 -0
  645. data/lib/studium/toplevel_methods/set_this_cd_alias_to.rb +92 -0
  646. data/lib/studium/toplevel_methods/spacer.rb +18 -0
  647. data/lib/studium/toplevel_methods/time.rb +297 -0
  648. data/lib/studium/toplevel_methods/total_ects_points_passed.rb +73 -0
  649. data/lib/studium/toplevel_methods/try_to_guess_the_most_likely_lva_id.rb +58 -0
  650. data/lib/studium/toplevel_methods/try_to_return_the_expanded_name_of_this_lecture.rb +64 -0
  651. data/lib/studium/toplevel_methods/unfinished.rb +51 -0
  652. data/lib/studium/toplevel_methods/url.rb +106 -0
  653. data/lib/studium/toplevel_methods/verbose_truth.rb +36 -0
  654. data/lib/studium/toplevel_methods/when_was_this_lecture_passed.rb +54 -0
  655. data/lib/studium/toplevel_methods/word_wrap.rb +56 -0
  656. data/lib/studium/toplevel_methods/write_into_file_related_functionality.rb +197 -0
  657. data/lib/studium/toplevel_methods/yes_or_no_ja_oder_nein.rb +33 -0
  658. data/lib/studium/universities_in_austria/README.md +2 -0
  659. data/lib/studium/universities_in_austria/boku/README.md +4 -0
  660. data/lib/studium/universities_in_austria/boku/boku_/303/266ffnungszeiten.rb +28 -0
  661. data/lib/studium/universities_in_austria/boku/show_three_pillars_of_these_lectures.rb +110 -0
  662. data/lib/studium/universities_in_austria/boku/three_pillars.rb +237 -0
  663. data/lib/studium/universities_in_austria/tu_vienna/README.md +6 -0
  664. data/lib/studium/universities_in_austria/tu_vienna/tu_ferien.rb +42 -0
  665. data/lib/studium/universities_in_austria/tu_vienna/tu_/303/266ffnungszeiten.rb +34 -0
  666. data/lib/studium/university_course/university_course.rb +409 -0
  667. data/lib/studium/utility_scripts/attribute_lectures_to_university/attribute_lectures_to_university.rb +375 -0
  668. data/lib/studium/utility_scripts/audio_stats.rb +171 -0
  669. data/lib/studium/utility_scripts/auto_stud/auto_stud.rb +252 -0
  670. data/lib/studium/utility_scripts/auto_stud/constants.rb +18 -0
  671. data/lib/studium/utility_scripts/auto_stud/initialize.rb +23 -0
  672. data/lib/studium/utility_scripts/auto_stud/misc.rb +18 -0
  673. data/lib/studium/utility_scripts/autopurge_this_lecture_date.rb +93 -0
  674. data/lib/studium/utility_scripts/average_grade_of_this_curriculum.rb +155 -0
  675. data/lib/studium/utility_scripts/blocked_courses.rb +146 -0
  676. data/lib/studium/utility_scripts/calendar/README.md +2 -0
  677. data/lib/studium/utility_scripts/calendar/calendar.rb +251 -0
  678. data/lib/studium/utility_scripts/calendar/misc.rb +35 -0
  679. data/lib/studium/utility_scripts/check_description_of_these_lectures.rb +221 -0
  680. data/lib/studium/utility_scripts/course_registrations/course_registrations.rb +98 -0
  681. data/lib/studium/utility_scripts/courses/courses.rb +177 -0
  682. data/lib/studium/utility_scripts/create/README.md +2 -0
  683. data/lib/studium/utility_scripts/create/webpage_of_university.rb +129 -0
  684. data/lib/studium/utility_scripts/create/webpage_of_university_BOKU.rb +61 -0
  685. data/lib/studium/utility_scripts/create/webpage_of_university_TU.rb +60 -0
  686. data/lib/studium/utility_scripts/create/webpage_of_university_UniWien.rb +60 -0
  687. data/lib/studium/utility_scripts/create_database/create_database.rb +106 -0
  688. data/lib/studium/utility_scripts/current_lectures_belonging_to_both_bachelor_and_master_curriculum.rb +113 -0
  689. data/lib/studium/utility_scripts/currently_participating_in_these_lectures/currently_participating_in_these_lectures.rb +104 -0
  690. data/lib/studium/utility_scripts/display_lecture_url/display_lecture_url.rb +176 -0
  691. data/lib/studium/utility_scripts/expand_time_range/expand_time_range.rb +521 -0
  692. data/lib/studium/utility_scripts/finished_exams_at_this_university/finished_exams_at_this_university.rb +173 -0
  693. data/lib/studium/utility_scripts/foreign_language_percentage/constants.rb +23 -0
  694. data/lib/studium/utility_scripts/foreign_language_percentage/foreign_language_percentage.rb +149 -0
  695. data/lib/studium/utility_scripts/foreign_language_percentage/help.rb +31 -0
  696. data/lib/studium/utility_scripts/foreign_language_percentage/initialize.rb +25 -0
  697. data/lib/studium/utility_scripts/foreign_language_percentage/menu.rb +158 -0
  698. data/lib/studium/utility_scripts/foreign_language_percentage/report.rb +62 -0
  699. data/lib/studium/utility_scripts/foreign_language_percentage/reset.rb +50 -0
  700. data/lib/studium/utility_scripts/foreign_language_percentage/run.rb +19 -0
  701. data/lib/studium/utility_scripts/generate_spreadsheet/generate_spreadsheet.rb +354 -0
  702. data/lib/studium/utility_scripts/generate_spreadsheet/misc.rb +144 -0
  703. data/lib/studium/utility_scripts/holidays/holidays.rb +156 -0
  704. data/lib/studium/utility_scripts/homepage_of_these_courses/homepage_of_these_courses.rb +125 -0
  705. data/lib/studium/utility_scripts/lectures_attributed_to_universities/lectures_attributed_to_universities.rb +336 -0
  706. data/lib/studium/utility_scripts/lva_dates_of_the_important_courses.rb +111 -0
  707. data/lib/studium/utility_scripts/lva_nummer/lva_nummer.rb +431 -0
  708. data/lib/studium/utility_scripts/mandatory_lectures_in_this_month/mandatory_lectures_in_this_month.rb +316 -0
  709. data/lib/studium/utility_scripts/moodle/moodle.rb +213 -0
  710. data/lib/studium/utility_scripts/name_of_this_lva_id/name_of_this_lva_id.rb +110 -0
  711. data/lib/studium/utility_scripts/new_stud.rb +324 -0
  712. data/lib/studium/utility_scripts/next_week/next_week.rb +103 -0
  713. data/lib/studium/utility_scripts/not_yet_registered/not_yet_registered.rb +120 -0
  714. data/lib/studium/utility_scripts/open_last_exam_question_url_link_via_the_browser.rb +76 -0
  715. data/lib/studium/utility_scripts/passed_ects_per_year/passed_ects_per_year.rb +313 -0
  716. data/lib/studium/utility_scripts/passed_pr/303/274fungsimmanente_courses/passed_pr/303/274fungsimmanente_courses.rb +181 -0
  717. data/lib/studium/utility_scripts/pdf/README.md +2 -0
  718. data/lib/studium/utility_scripts/pdf/create_pdf_file_for_this_exam_topic.rb +355 -0
  719. data/lib/studium/utility_scripts/pdf/hexapdf_support.rb +50 -0
  720. data/lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb +317 -0
  721. data/lib/studium/utility_scripts/priority/priority.rb +164 -0
  722. data/lib/studium/utility_scripts/priority_points/priority_points.rb +263 -0
  723. data/lib/studium/utility_scripts/publish_my_exams/publish_my_exams.rb +174 -0
  724. data/lib/studium/utility_scripts/regexes/README.md +1 -0
  725. data/lib/studium/utility_scripts/regexes/generate_regex.rb +314 -0
  726. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_available_moodle_links.rb +55 -0
  727. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_registered_lectures.rb +48 -0
  728. data/lib/studium/utility_scripts/report_outdated_timetable_entries/report_outdated_timetable_entries.rb +142 -0
  729. data/lib/studium/utility_scripts/report_whether_this_lecture_is_registered_in_the_file_lecture_information/report_whether_this_lecture_is_registered_in_the_file_lecture_information.rb +128 -0
  730. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/individual_resolve_practical_courses_date_conflicts.rb +254 -0
  731. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/resolve_practical_courses_date_conflicts.rb +265 -0
  732. data/lib/studium/utility_scripts/scrape_remote_university_url.rb +138 -0
  733. data/lib/studium/utility_scripts/semester_schedule_creator/semester_container.rb +144 -0
  734. data/lib/studium/utility_scripts/semester_schedule_creator/semester_schedule_creator.rb +374 -0
  735. data/lib/studium/utility_scripts/semesterplaner/semesterplaner.rb +311 -0
  736. data/lib/studium/utility_scripts/set_aliases_based_on_this_file.rb +97 -0
  737. data/lib/studium/utility_scripts/show_all_passed_master_lectures/show_all_passed_master_lectures.rb +126 -0
  738. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/show_conflicting_lva_lectures.rb +1385 -0
  739. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/constants.rb +23 -0
  740. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/menu.rb +63 -0
  741. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/reset.rb +33 -0
  742. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/run.rb +50 -0
  743. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/show_descriptions_of_lectures_belonging_to_this_module.rb +145 -0
  744. data/lib/studium/utility_scripts/show_lecturers/show_lecturers.rb +147 -0
  745. data/lib/studium/utility_scripts/show_lectures/show_lectures.rb +910 -0
  746. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_language/show_lectures_fitting_to_this_language.rb +121 -0
  747. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_theme/show_lectures_fitting_to_this_theme.rb +105 -0
  748. data/lib/studium/utility_scripts/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb +3167 -0
  749. data/lib/studium/utility_scripts/show_lectures_on_this_day/show_lectures_on_this_day.rb +150 -0
  750. data/lib/studium/utility_scripts/show_lva_dates_of_this_lecture/show_lva_dates_of_this_lecture.rb +182 -0
  751. data/lib/studium/utility_scripts/show_mixed_bachelor_master_courses/show_mixed_bachelor_master_courses.rb +92 -0
  752. data/lib/studium/utility_scripts/show_outdated_lva_dates/show_outdated_lva_dates.rb +214 -0
  753. data/lib/studium/utility_scripts/show_passed_exams_having_this_grade/show_passed_exams_having_this_grade.rb +91 -0
  754. data/lib/studium/utility_scripts/show_solved_english_lectures/show_solved_english_lectures.rb +139 -0
  755. data/lib/studium/utility_scripts/steop/README.md +4 -0
  756. data/lib/studium/utility_scripts/steop/show_all_steop_lectures.rb +93 -0
  757. data/lib/studium/utility_scripts/steop/steop_lectures_in_this_curriculum.rb +284 -0
  758. data/lib/studium/utility_scripts/steop/steop_lva_dates.rb +119 -0
  759. data/lib/studium/utility_scripts/studienkennzahl/studienkennzahl.rb +116 -0
  760. data/lib/studium/utility_scripts/studium_skeleton/studium_skeleton.rb +242 -0
  761. data/lib/studium/utility_scripts/stundenplan.rb +600 -0
  762. data/lib/studium/utility_scripts/sync_studium_relevant_entries_one_level_downwards.rb +217 -0
  763. data/lib/studium/utility_scripts/ufind/ufind.rb +106 -0
  764. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/constants.rb +26 -0
  765. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/run.rb +20 -0
  766. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/upcoming_mandatory_presence_courses.rb +187 -0
  767. data/lib/studium/utility_scripts/video_lecture_downloader/video_lecture_downloader.rb +107 -0
  768. data/lib/studium/utility_scripts/week_parser/constants.rb +23 -0
  769. data/lib/studium/utility_scripts/week_parser/help.rb +32 -0
  770. data/lib/studium/utility_scripts/week_parser/menu.rb +59 -0
  771. data/lib/studium/utility_scripts/week_parser/misc.rb +373 -0
  772. data/lib/studium/utility_scripts/week_parser/reset.rb +65 -0
  773. data/lib/studium/utility_scripts/week_parser/run.rb +18 -0
  774. data/lib/studium/utility_scripts/week_parser/show.rb +236 -0
  775. data/lib/studium/utility_scripts/week_parser/week_parser.rb +49 -0
  776. data/lib/studium/utility_scripts/weekday_parser.rb +155 -0
  777. data/lib/studium/utility_scripts/weekly_schedule.rb +198 -0
  778. data/lib/studium/utility_scripts/wochenplanung/wochenplanung.rb +267 -0
  779. data/lib/studium/version/version.rb +46 -0
  780. data/lib/studium/www/exams/exams.cgi +54 -0
  781. data/lib/studium/www/fast_ask_exam_question/fast_ask_exam_question.cgi +156 -0
  782. data/lib/studium/www/handle_curricula/handle_curricula.cgi +154 -0
  783. data/lib/studium/www/next_generation_exam_question_trainer/next_generation_exam_question_trainer.cgi +112 -0
  784. data/lib/studium/www/next_generation_exam_question_trainer/solved.cgi +26 -0
  785. data/lib/studium/www/sinatra/app.rb +231 -0
  786. data/lib/studium/www/sinatra/curriculum_displayer/curriculum_displayer.rb +162 -0
  787. data/lib/studium/www/sinatra/misc.rb +115 -0
  788. data/lib/studium/www/statistics/statistics.cgi +82 -0
  789. data/lib/studium/www/upcoming_exams/upcoming_exams.cgi +36 -0
  790. data/lib/studium/yaml/ad_hoc_trainer/README.md +2 -0
  791. data/lib/studium/yaml/ad_hoc_trainer/exam_topics.md +22 -0
  792. data/lib/studium/yaml/allowed_themes_for_courses/allowed_themes_for_courses.yml +348 -0
  793. data/lib/studium/yaml/array_allowed_entries_for_the_file_lecture_information/array_allowed_entries_for_the_file_lecture_information.yml +71 -0
  794. data/lib/studium/yaml/available_exam_topics/available_exam_topics.yml +234 -0
  795. data/lib/studium/yaml/backlog_of_exams.yml +37 -0
  796. data/lib/studium/yaml/colours/custom_colours.yml +50 -0
  797. data/lib/studium/yaml/colours/use_colours.yml +1 -0
  798. data/lib/studium/yaml/current_exams.yml +30 -0
  799. data/lib/studium/yaml/curricula/README.md +39 -0
  800. data/lib/studium/yaml/curricula/bachelor/bachelor_agrarwissenschaften_033255.yml +147 -0
  801. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_basisblock_033630.yml +71 -0
  802. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_botanik_033630.yml +100 -0
  803. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_ecology_033630.yml +74 -0
  804. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_mikrobiologie_und_genetik_033630.yml +122 -0
  805. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_molekulare_biologie_033630.yml +106 -0
  806. data/lib/studium/yaml/curricula/bachelor/bachelor_biologie_zoologie_033630.yml +87 -0
  807. data/lib/studium/yaml/curricula/bachelor/bachelor_chemie_033662.yml +165 -0
  808. data/lib/studium/yaml/curricula/bachelor/bachelor_dummy_curriculum.yml +182 -0
  809. data/lib/studium/yaml/curricula/bachelor/bachelor_elektrotechnik_und_informationstechnik_033235.yml +13 -0
  810. data/lib/studium/yaml/curricula/bachelor/bachelor_forstwirtschaft_033225.yml +115 -0
  811. data/lib/studium/yaml/curricula/bachelor/bachelor_informatik_033521.yml +136 -0
  812. data/lib/studium/yaml/curricula/bachelor/bachelor_ktww_033231.yml +84 -0
  813. data/lib/studium/yaml/curricula/bachelor/bachelor_lmbt_033217.yml +121 -0
  814. data/lib/studium/yaml/curricula/bachelor/bachelor_medizinische_informatik_033533.yml +283 -0
  815. data/lib/studium/yaml/curricula/bachelor/bachelor_molekularbiologie_033665.yml +95 -0
  816. data/lib/studium/yaml/curricula/bachelor/bachelor_nutrition_science_033638.yml +119 -0
  817. data/lib/studium/yaml/curricula/bachelor/bachelor_pharmazie_033305.yml +170 -0
  818. data/lib/studium/yaml/curricula/bachelor/bachelor_technische_chemie_033290.yml +131 -0
  819. data/lib/studium/yaml/curricula/bachelor/bachelor_technische_informatik_033535.yml +23 -0
  820. data/lib/studium/yaml/curricula/bachelor/bachelor_ubrm_033227.yml +142 -0
  821. data/lib/studium/yaml/curricula/bachelor/bachelor_verfahrenstechnik_033273.yml +167 -0
  822. data/lib/studium/yaml/curricula/bachelor/bachelor_wirtschaftsinformatik_033526.yml +29 -0
  823. data/lib/studium/yaml/curricula/experimental/bachelor_informatik_in_den_lebenswissenschaften.yml +137 -0
  824. data/lib/studium/yaml/curricula/individual/bachelor_formale_logik.yml +88 -0
  825. data/lib/studium/yaml/curricula/individual/bachelor_informatik_und_molekulare_biologie.yml +1161 -0
  826. data/lib/studium/yaml/curricula/individual/bachelor_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +1157 -0
  827. data/lib/studium/yaml/curricula/individual/master_bioinformatics_and_nanobiotechnology_in_molecular_medicine.yml +306 -0
  828. data/lib/studium/yaml/curricula/individual/master_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +741 -0
  829. data/lib/studium/yaml/curricula/master/master_bioinformatik_066875.yml +75 -0
  830. data/lib/studium/yaml/curricula/master/master_biologie_molekulare_mikrobiologie_mikrobielle_oekologie_und_immunbiologie_066830.yml +78 -0
  831. data/lib/studium/yaml/curricula/master/master_biologische_chemie_066863.yml +66 -0
  832. data/lib/studium/yaml/curricula/master/master_dummy_curriculum.yml +197 -0
  833. data/lib/studium/yaml/curricula/master/master_genetik_und_entwicklungsbiologie_066877.yml +89 -0
  834. data/lib/studium/yaml/curricula/master/master_lmbt_066418.yml +112 -0
  835. data/lib/studium/yaml/curricula/master/master_molecular_biology_066865.yml +72 -0
  836. data/lib/studium/yaml/curricula/master/master_molekulare_biologie_066834.yml +151 -0
  837. data/lib/studium/yaml/curricula/master/master_pharmazie_066605.yml +176 -0
  838. data/lib/studium/yaml/curricula/master/master_technische_chemie_066490.yml +123 -0
  839. data/lib/studium/yaml/curricula/outdated/master_bioinformatics_and_molecular_biotechnology_including_aspects_from_molecular_medicine.yml +438 -0
  840. data/lib/studium/yaml/curricula/outdated/master_food_science_and_plant_biotechnology.yml +31 -0
  841. data/lib/studium/yaml/curricula.yml +562 -0
  842. data/lib/studium/yaml/daily_questions_solved/daily_questions_solved.yml +1849 -0
  843. data/lib/studium/yaml/default_delay.yml +4 -0
  844. data/lib/studium/yaml/default_encoding.yml +1 -0
  845. data/lib/studium/yaml/directory_to_the_exam_topics.yml +0 -0
  846. data/lib/studium/yaml/editor.yml +1 -0
  847. data/lib/studium/yaml/exams/next_exams_to_do.md +9 -0
  848. data/lib/studium/yaml/file_for_exam_questions.yml +1 -0
  849. data/lib/studium/yaml/german/README.md +2 -0
  850. data/lib/studium/yaml/german/german_to_english_month_names.yml +16 -0
  851. data/lib/studium/yaml/grouped_themes/grouped_themes.yml +258 -0
  852. data/lib/studium/yaml/holidays/holidays.yml +201 -0
  853. data/lib/studium/yaml/important_exams.yml +274 -0
  854. data/lib/studium/yaml/inscription_dates_of_universities.yml +60 -0
  855. data/lib/studium/yaml/lecture_aliases.yml +138 -0
  856. data/lib/studium/yaml/lecture_information/lecture_information.yml +63818 -0
  857. data/lib/studium/yaml/log_dir.yml +1 -0
  858. data/lib/studium/yaml/main_topic/main_topic.yml +11 -0
  859. data/lib/studium/yaml/max_stats.yml +256 -0
  860. data/lib/studium/yaml/meta_themes +1 -0
  861. data/lib/studium/yaml/mitbelegung/README.md +4 -0
  862. data/lib/studium/yaml/mitbelegung/mitbelegung.yml +21 -0
  863. data/lib/studium/yaml/mitteilungsbl/303/244tter/mitteilungsbl/303/244tter.yml +363 -0
  864. data/lib/studium/yaml/n_total_questions.yml +1 -0
  865. data/lib/studium/yaml/rename_konsole_tab.yml +1 -0
  866. data/lib/studium/yaml/semester_planner/README.md +4 -0
  867. data/lib/studium/yaml/semester_planner/semester_planner.yml +189 -0
  868. data/lib/studium/yaml/show_topic.yml +1 -0
  869. data/lib/studium/yaml/statistics/lecture_information.yml +1 -0
  870. data/lib/studium/yaml/statistics/max_stats.yml +239 -0
  871. data/lib/studium/yaml/statistics/statistics.yml +77 -0
  872. data/lib/studium/yaml/week/01_monday.yml +25 -0
  873. data/lib/studium/yaml/week/02_tuesday.yml +68 -0
  874. data/lib/studium/yaml/week/03_wednesday.yml +63 -0
  875. data/lib/studium/yaml/week/04_thursday.yml +20 -0
  876. data/lib/studium/yaml/week/05_friday.yml +31 -0
  877. data/lib/studium/yaml/week/06_saturday.yml +16 -0
  878. data/lib/studium/yaml/week/07_sunday.yml +0 -0
  879. data/lib/studium/yaml/week/README.md +10 -0
  880. data/lib/studium.rb +5 -0
  881. data/studium.gemspec +82 -0
  882. data/test/testing_colourized_question_and_answer.rb +18 -0
  883. data/test/testing_studium.rb +244 -0
  884. data/test/testing_studium_base_class.rb +31 -0
  885. data/test/testing_the_file_lecture_information.rb +18 -0
  886. data/test/testing_time_component.rb +29 -0
  887. metadata +1101 -0
@@ -0,0 +1,910 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === Studium::ShowLectures
6
+ #
7
+ # This class will show all lectures that belong to a particular theme,
8
+ # such as "microbiology". The information for this is stored in the
9
+ # file lecture_information, which will be queried by this class.
10
+ #
11
+ # Usage example:
12
+ #
13
+ # Studium::ShowLectures.new(ARGV)
14
+ #
15
+ # =========================================================================== #
16
+ # require 'studium/utility_scripts/show_lectures/show_lectures.rb'
17
+ # =========================================================================== #
18
+ require 'studium/base/base.rb'
19
+
20
+ module Studium
21
+
22
+ class ShowLectures < Base
23
+
24
+ require 'studium/toplevel_methods/find_exam_topic_and_exam_title.rb'
25
+ require 'studium/toplevel_methods/lva_numbers.rb'
26
+ require 'studium/toplevel_methods/passed_this_exam_on.rb'
27
+ require 'studium/utility_scripts/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb'
28
+
29
+ begin
30
+ require 'roebe/toplevel_methods/unicode/map_input_to_unicode_symbol.rb'
31
+ rescue LoadError; end
32
+
33
+ # ========================================================================= #
34
+ # === initialize
35
+ # ========================================================================= #
36
+ def initialize(
37
+ i = nil,
38
+ run_already = true
39
+ )
40
+ reset
41
+ parse_and_set_commandline(i)
42
+ run if run_already
43
+ end
44
+
45
+ # ========================================================================= #
46
+ # === reset (reset tag)
47
+ # ========================================================================= #
48
+ def reset
49
+ super()
50
+ infer_the_namespace
51
+ # ======================================================================= #
52
+ # === @n_lectures_are_registered
53
+ # ======================================================================= #
54
+ @n_lectures_are_registered = 0
55
+ # ======================================================================= #
56
+ # === @result
57
+ # ======================================================================= #
58
+ @result = ''.dup
59
+ # ======================================================================= #
60
+ # === @show_timetable
61
+ # ======================================================================= #
62
+ @show_timetable = false
63
+ # ======================================================================= #
64
+ # === @selection
65
+ # ======================================================================= #
66
+ @selection = nil
67
+ # ======================================================================= #
68
+ # === @dataset_from_file_lecture_information
69
+ # ======================================================================= #
70
+ @dataset_from_file_lecture_information = nil
71
+ # ======================================================================= #
72
+ # === @n_lectures_were_successfully_passed_in_total
73
+ #
74
+ # Keep track how many lectures were successfully passed:
75
+ # ======================================================================= #
76
+ @n_lectures_were_successfully_passed_in_total = 0
77
+ # ======================================================================= #
78
+ # === @n_ects_in_total_of_the_selected_lectures
79
+ # ======================================================================= #
80
+ @n_ects_in_total_of_the_selected_lectures = 0
81
+ # ======================================================================= #
82
+ # === @n_ects_were_successfully_passed_in_total
83
+ # ======================================================================= #
84
+ @n_ects_were_successfully_passed_in_total = 0
85
+ # ======================================================================= #
86
+ # === @show_only_courses_at_this_university
87
+ #
88
+ # This variable can be used to show only courses at a particular
89
+ # university. If nil then no restriction will occur.
90
+ # ======================================================================= #
91
+ @show_only_courses_at_this_university = nil
92
+ # ======================================================================= #
93
+ # === @array_grades
94
+ # ======================================================================= #
95
+ @array_grades = []
96
+ # ======================================================================= #
97
+ # === @show_these_lectures
98
+ #
99
+ # The following instance variable can have these three states:
100
+ #
101
+ # :all
102
+ # :show_only_solved_lectures
103
+ # :show_only_unsolved_lectures
104
+ #
105
+ # The default is :all, which means that both solved and unsolved
106
+ # lectures will be shown.
107
+ # ======================================================================= #
108
+ @show_these_lectures = :all
109
+ # ======================================================================= #
110
+ # === @show_what
111
+ #
112
+ # The following variable can have one of these four states:
113
+ #
114
+ # :bachelor
115
+ # :master, or
116
+ # :bachelor_and_master, or
117
+ # :bachelor_and_master_and_unattributed_lectures
118
+ #
119
+ # ======================================================================= #
120
+ @show_what = :bachelor_and_master_and_unattributed_lectures # :bachelor_and_master
121
+ end
122
+
123
+ # ========================================================================= #
124
+ # === show_help (help tag)
125
+ #
126
+ # Invocation example for this method:
127
+ #
128
+ # tbiochem --help
129
+ #
130
+ # ========================================================================= #
131
+ def show_help
132
+ help_string = <<-EOF
133
+ #{rev}
134
+ --timetable # show upcoming exams belonging to that topic at hand
135
+ --only-unsolved # show only unsolved lectures
136
+ # (that were not yet completed successfully)
137
+ --n-ECTS=NUMBER # show only lectures with n ECTS points
138
+ --only-master # show only master lectures, thus ignoring only bachelor-lectures
139
+ --boku # show only lectures that are offered at the BOKU (#{lightgreen('university')})
140
+ --TU # show only lectures that are offered at the TU (#{lightgreen('university')})
141
+ --uniwien # show only lectures that are offered at the University of Vienna (#{lightgreen('university')})
142
+ --only-completed # show only passed lectures; note that --completed or --passed-only are alias to this
143
+
144
+ EOF
145
+ e help_string
146
+ end
147
+
148
+ # ========================================================================= #
149
+ # === menu (menu tag)
150
+ # ========================================================================= #
151
+ def menu(
152
+ i = commandline_arguments?
153
+ )
154
+ if i.is_a? Array
155
+ i.each {|entry| menu(entry) }
156
+ else
157
+ case i
158
+ # ===================================================================== #
159
+ # === show_lectures --only-unsolved
160
+ #
161
+ # This can also work in combination, for example:
162
+ #
163
+ # tmicro --only-unsolved
164
+ # tbiotech --unfinished
165
+ #
166
+ # ===================================================================== #
167
+ when /-?-?only(-|_)?unsolved$/i,
168
+ /-?-?unsolved$/i,
169
+ /-?-?todo$/i,
170
+ /-?-?unfinished$/i
171
+ do_show_only_unsolved_lectures
172
+ # ===================================================================== #
173
+ # === tbioinformatics --winter
174
+ #
175
+ # This entry point can be used to select only courses that are
176
+ # offered during the winter semester.
177
+ # ===================================================================== #
178
+ when /^-?-?winter$/i
179
+ @dataset_from_file_lecture_information.select! {|a,b|
180
+ case b[:semester]
181
+ when 'winter','both'
182
+ true
183
+ else
184
+ false
185
+ end
186
+ }
187
+ # ===================================================================== #
188
+ # === tbioinformatics --summer
189
+ # ===================================================================== #
190
+ when /^-?-?summer$/i
191
+ @dataset_from_file_lecture_information.select! {|a,b|
192
+ case b[:semester]
193
+ when 'summer','both'
194
+ true
195
+ else
196
+ false
197
+ end
198
+ }
199
+ # ===================================================================== #
200
+ # === show_lectures --uniwien
201
+ # ===================================================================== #
202
+ when /^-?-?uni(-|_)?wien$/i
203
+ @show_only_courses_at_this_university = :"Uni Wien"
204
+ # ===================================================================== #
205
+ # === show_lectures --TU
206
+ # ===================================================================== #
207
+ when /^-?-?TU$/i,
208
+ /^-?-?TU(-|_)?vienna$/i
209
+ @show_only_courses_at_this_university = :TU_Vienna
210
+ # ===================================================================== #
211
+ # === show_lectures --boku
212
+ #
213
+ # This can be used to show only courses at a particular university.
214
+ # ===================================================================== #
215
+ when /^-?-?boku$/i
216
+ @show_only_courses_at_this_university = :BOKU
217
+ # ===================================================================== #
218
+ # === show_lectures --show-solved-lectures
219
+ #
220
+ # This entry point can be used to show only those lectures that
221
+ # belong to a particular theme IF they were completed successfully.
222
+ #
223
+ # Specific usage examples:
224
+ #
225
+ # timmuno --completed
226
+ # tcellbio --passed-only
227
+ #
228
+ # ===================================================================== #
229
+ when /-?-?show(-|_)?solved(-|_)?lectures$/i,
230
+ /-?-?show(-|_)?only(-|_)?solved(-|_)?lectures$/i,
231
+ /-?-?only(-|_)?solved$/i,
232
+ /-?-?only(-|_)?completed$/i,
233
+ /-?-?completed$/i,
234
+ /-?-?solved$/i,
235
+ /-?-?finished$/i,
236
+ /-?-?passed$/i,
237
+ /-?-?passed(-|_)?only$/i
238
+ do_show_only_solved_lectures
239
+ # ===================================================================== #
240
+ # === timmuno --n-ECTS=3.0 --only-master
241
+ #
242
+ # This entry point allows the user to select only courses that
243
+ # satisfy a certain ECTS value, such as "2.0".
244
+ # ===================================================================== #
245
+ when /^-?-?n(-|_)?ECTS=(.+)$/i
246
+ search_for_n_ects = $2.to_s.to_f # A float so that "2" becomes "2.0".
247
+ # =================================================================== #
248
+ # Directly manipulate the main instance variable next.
249
+ # =================================================================== #
250
+ @dataset_from_file_lecture_information.select! {|a,b|
251
+ b[:ects] == search_for_n_ects
252
+ }
253
+ # ===================================================================== #
254
+ # === show_lectures --bachelor
255
+ #
256
+ # This entry point will show only lectures that are part of a
257
+ # bachelor curriculum.
258
+ # ===================================================================== #
259
+ when /^-?-?bachelor$/,
260
+ /^-?-?only(-|_)?bachelor$/
261
+ @show_what = :bachelor
262
+ # ===================================================================== #
263
+ # === show_lectures --master
264
+ #
265
+ # This entry point will show only lectures that are part of a
266
+ # master curriculum.
267
+ # ===================================================================== #
268
+ when /^-?-?master$/,
269
+ /^-?-?only(-|_)?master$/
270
+ @show_what = :master
271
+ # ===================================================================== #
272
+ # === show_lectures --timetable
273
+ # ===================================================================== #
274
+ when /^-?-?timetable$/,
275
+ /^-?-?upcoming$/
276
+ @show_timetable = true
277
+ # ===================================================================== #
278
+ # === help
279
+ # ===================================================================== #
280
+ when /help$/i
281
+ show_help
282
+ exit
283
+ else
284
+ opne "Not known input `#{sfancy(i)}`."
285
+ end
286
+ end
287
+ end
288
+
289
+ # ========================================================================= #
290
+ # === parse_and_set_commandline
291
+ # ========================================================================= #
292
+ def parse_and_set_commandline(i = '')
293
+ if i.is_a?(String) and i.include?('--')
294
+ i = i.split('--').map {|line| "--#{line}" }.reject {|entry| entry == '--' }
295
+ end
296
+ unless i.is_a? Array # We want an Array.
297
+ i = [i]
298
+ end
299
+ use_this_theme = nil
300
+ # ======================================================================= #
301
+ # Sanitize the given input.
302
+ # ======================================================================= #
303
+ i.map! {|line|
304
+ line = line.to_s.dup
305
+ unless line.include? '--'
306
+ use_this_theme = line
307
+ end
308
+ line.delete!('-') # <- We don't need any '-' characters.
309
+ # ===================================================================== #
310
+ # The next line checks that C++ as a theme is valid still.
311
+ # ===================================================================== #
312
+ line.downcase! unless line.include? '+'
313
+ line = Studium.sanitize_this_theme_topic(line) # <- Correct the theme topic here.
314
+ line
315
+ }
316
+ use_this_theme = i.shift if use_this_theme.nil?
317
+ set_input_theme(use_this_theme) # First entry is the input_theme for now.
318
+ set_commandline_arguments(i)
319
+ end
320
+
321
+ # ========================================================================= #
322
+ # === set_input_theme
323
+ #
324
+ # Do some sanitizing of the theme here.
325
+ # ========================================================================= #
326
+ def set_input_theme(i)
327
+ case i # case tag
328
+ when 'bioprozesstechnik'
329
+ i = 'bioprocess engineering'
330
+ when 'immuno','immunologie'
331
+ i = 'immunology'
332
+ end
333
+ @input_theme = i
334
+ end
335
+
336
+ # ========================================================================= #
337
+ # === input_theme?
338
+ # ========================================================================= #
339
+ def input_theme?
340
+ @input_theme
341
+ end; alias searching_for_this_theme? input_theme? # === searching_for_this_theme?
342
+ alias theme? input_theme? # === theme?
343
+ alias which_theme? input_theme? # === which_theme?
344
+
345
+ # ========================================================================= #
346
+ # === load_dataset_from_the_file_lecture_information
347
+ # ========================================================================= #
348
+ def load_dataset_from_the_file_lecture_information
349
+ @dataset_from_file_lecture_information =
350
+ return_sanitized_dataset_from_the_file_lecture_information
351
+ end
352
+
353
+ # ========================================================================= #
354
+ # === do_show_only_unsolved_lectures
355
+ # ========================================================================= #
356
+ def do_show_only_unsolved_lectures
357
+ @show_these_lectures = :show_only_unsolved_lectures
358
+ end
359
+
360
+ # ========================================================================= #
361
+ # === main_dataset?
362
+ # ========================================================================= #
363
+ def main_dataset?
364
+ @selection
365
+ end
366
+
367
+ # ========================================================================= #
368
+ # === consider_showing_the_timetable
369
+ #
370
+ # To invoke this do, for example, the following:
371
+ # timmuno --timetable
372
+ # ========================================================================= #
373
+ def consider_showing_the_timetable(
374
+ do_show_all_courses_belonging_to_this_theme = true
375
+ )
376
+ if @show_timetable
377
+ _ = Studium::ShowLecturesOnTheCommandline.new(:do_not_run_yet)
378
+ _.set_title('Theme: '+theme?.capitalize)
379
+ _.do_not_show_loaded_from_which_file
380
+ if do_show_all_courses_belonging_to_this_theme
381
+ # =================================================================== #
382
+ # In this case, we will show ALL of these courses.
383
+ # =================================================================== #
384
+ use_this_selection = @selection.keys
385
+ else
386
+ # =================================================================== #
387
+ # In that case, we will show only the courses that are yet
388
+ # to be passed.
389
+ # =================================================================== #
390
+ use_this_selection = @selection.select {|key, value|
391
+ value[:already_solved] == false
392
+ }.keys
393
+ end
394
+ _.set_all_lectures(use_this_selection)
395
+ _.do_generate_a_html_file
396
+ end
397
+ end
398
+
399
+ # ========================================================================= #
400
+ # === n_ects_were_successfully_passed_in_total?
401
+ # ========================================================================= #
402
+ def n_ects_were_successfully_passed_in_total?
403
+ @n_ects_were_successfully_passed_in_total
404
+ end; alias n_ects_were_passed_in_this_curriculum n_ects_were_successfully_passed_in_total? # === n_ects_were_passed_in_this_curriculum
405
+
406
+ # ========================================================================= #
407
+ # === do_show_only_solved_lectures
408
+ # ========================================================================= #
409
+ def do_show_only_solved_lectures
410
+ @show_these_lectures = :only_solved_lectures
411
+ end
412
+
413
+ # ========================================================================= #
414
+ # === add_total_amount_of_ects_points_in_the_selected_lectures
415
+ # ========================================================================= #
416
+ def add_total_amount_of_ects_points_in_the_selected_lectures
417
+ # ======================================================================= #
418
+ # Next, also calculate how many ECTS point in total have been
419
+ # registered in the file 'lecture_information.yml' fitting to
420
+ # that particular topic at hand.
421
+ # ======================================================================= #
422
+ @result << "In total there are "\
423
+ "#{sfancy(@n_ects_in_total_of_the_selected_lectures)} ECTS "\
424
+ "points available in the "\
425
+ "#{slateblue(@n_lectures_are_registered)} lectures "\
426
+ "shown above.#{N}"
427
+ end
428
+
429
+ # ========================================================================= #
430
+ # === considering_showing_how_many_ects_points_were_successfully_passed_in_total
431
+ #
432
+ # This method will simply show how many ECTS points were passed fitting
433
+ # to the given theme at hand.
434
+ # ========================================================================= #
435
+ def considering_showing_how_many_ects_points_were_successfully_passed_in_total
436
+ if @n_ects_were_successfully_passed_in_total > 0
437
+ # ===================================================================== #
438
+ # The following .rjust() is only done to align it with the total
439
+ # amount of ECTS points displayed afterwards.
440
+ # ===================================================================== #
441
+ @result = "Passed a total of "\
442
+ "#{sfancy(@n_ects_were_successfully_passed_in_total.to_s.rjust(@n_ects_in_total_of_the_selected_lectures.to_s.size + 1))}"\
443
+ " ECTS points, in #{royalblue(@n_lectures_were_successfully_passed_in_total)} "\
444
+ "different courses, fitting "\
445
+ "to the theme\n".dup
446
+ @result << "`#{slategray(which_theme?)}`".dup
447
+ # ===================================================================== #
448
+ # Also calculate and add the average grade.
449
+ # ===================================================================== #
450
+ average_grade_is = (
451
+ @array_grades.sum / @array_grades.size
452
+ ).round(2)
453
+ @result << mediumslateblue(' (Average grade: ')+
454
+ forestgreen(average_grade_is.to_s)+
455
+ mediumslateblue(')')
456
+ @result << ".#{N}"
457
+ end
458
+ end
459
+
460
+ # ========================================================================= #
461
+ # === show_this_hash_split_into_bachelor_and_master_lectures
462
+ # ========================================================================= #
463
+ def show_this_hash_split_into_bachelor_and_master_lectures(i)
464
+ # ======================================================================= #
465
+ # We must first create the hashes that hold e. g. bachelor and
466
+ # master lectures..
467
+ # ======================================================================= #
468
+ hash_holding_all_bachelor_lectures = {}
469
+ hash_holding_all_master_lectures = {}
470
+ hash_holding_all_non_unattributed_lectures = {}
471
+ i.each_pair {|name_of_the_lecture, inner_hash|
472
+ curricula = inner_hash['curricula']
473
+ if curricula.any? {|curriculum_number|
474
+ curriculum_number.start_with? '033' # In this case it is a Bachelor lecture.
475
+ }
476
+ hash_holding_all_bachelor_lectures[name_of_the_lecture] = inner_hash
477
+ elsif curricula.any? {|curriculum_number|
478
+ curriculum_number.start_with? '066' # In this case it is a Master lecture.
479
+ }
480
+ hash_holding_all_master_lectures[name_of_the_lecture] = inner_hash
481
+ else # else these are curricula that are not attributed at all.
482
+ hash_holding_all_non_unattributed_lectures[name_of_the_lecture] = inner_hash
483
+ end
484
+ }
485
+ case @show_what
486
+ # ======================================================================= #
487
+ # === :bachelor
488
+ # ======================================================================= #
489
+ when :bachelor
490
+ verbose_show_these_bachelor_lectures(hash_holding_all_bachelor_lectures)
491
+ # ======================================================================= #
492
+ # === :master
493
+ # ======================================================================= #
494
+ when :master
495
+ verbose_show_these_master_lectures(hash_holding_all_master_lectures)
496
+ # ======================================================================= #
497
+ # === :bachelor_and_master
498
+ # ======================================================================= #
499
+ when :bachelor_and_master
500
+ verbose_show_these_bachelor_lectures(hash_holding_all_bachelor_lectures)
501
+ verbose_show_these_master_lectures(hash_holding_all_master_lectures)
502
+ # ======================================================================= #
503
+ # === :bachelor_and_master_and_unattributed_lectures
504
+ # ======================================================================= #
505
+ when :bachelor_and_master_and_unattributed_lectures
506
+ verbose_show_these_bachelor_lectures(hash_holding_all_bachelor_lectures)
507
+ verbose_show_these_master_lectures(hash_holding_all_master_lectures)
508
+ verbose_show_these_unattributed_lectures(hash_holding_all_non_unattributed_lectures)
509
+ end
510
+ end
511
+
512
+ # ========================================================================= #
513
+ # === verbose_show_these_unattributed_lectures
514
+ # ========================================================================= #
515
+ def verbose_show_these_unattributed_lectures(i)
516
+ unless i.empty?
517
+ opne "Next showing all #{khaki('unattributed-lectures')}:"
518
+ show_hash(i)
519
+ end
520
+ end
521
+
522
+ # ========================================================================= #
523
+ # === verbose_show_these_master_lectures
524
+ # ========================================================================= #
525
+ def verbose_show_these_master_lectures(i)
526
+ opne "Next showing all #{khaki('master-lectures')}:"
527
+ show_hash(i)
528
+ end
529
+
530
+ # ========================================================================= #
531
+ # === report_the_result_on_the_commandline
532
+ # ========================================================================= #
533
+ def report_the_result_on_the_commandline
534
+ e @result unless @result.empty?
535
+ end
536
+
537
+ # ========================================================================= #
538
+ # === notify_the_user_these_lectures_were_found_to_fit_to_the_theme_header
539
+ # ========================================================================= #
540
+ def notify_the_user_these_lectures_were_found_to_fit_to_the_theme_header
541
+ e; opne 'These lectures were found to fit to the input-theme `'+
542
+ sfancy(input_theme?)+'`:'; e
543
+ end
544
+
545
+ # ========================================================================= #
546
+ # === verbose_show_these_bachelor_lectures
547
+ # ========================================================================= #
548
+ def verbose_show_these_bachelor_lectures(i)
549
+ opne "First showing all #{khaki('bachelor-lectures')}:"
550
+ show_hash(i)
551
+ end
552
+
553
+ # ========================================================================= #
554
+ # === sanitized_names_for_this_university
555
+ # ========================================================================= #
556
+ def sanitized_names_for_this_university(i)
557
+ case i
558
+ # ======================================================================= #
559
+ # === TU
560
+ # ======================================================================= #
561
+ when :TU,
562
+ :TU_Vienna
563
+ i = 'TU Vienna'
564
+ else
565
+ i = i.to_s
566
+ end
567
+ return i
568
+ end
569
+
570
+ # ========================================================================= #
571
+ # === show_this_hash
572
+ #
573
+ # The first argument to this method should be a Hash. This Hash will
574
+ # then be properly formatted and displayed.
575
+ #
576
+ # The second argument to this method is a controller - it can control
577
+ # whether we want to split up the display into, for example, Bachelor
578
+ # and Master-lectures. That is, lectures that are attributed to the
579
+ # corresponding bachelor or master curriculum. This allows us to
580
+ # group lectures to specific curricula.
581
+ # ========================================================================= #
582
+ def show_this_hash(
583
+ hash = @selection,
584
+ optional_argument_controlling_what_we_will_report_here = nil
585
+ )
586
+ case hash
587
+ when :default
588
+ hash = @selection
589
+ end
590
+ if hash.empty?
591
+ opne 'No result was found for the given input-theme '+
592
+ '`'+sfancy(input_theme?.to_s)+'`'
593
+ else # else the Hash is NOT empty.
594
+ @n_lectures_are_registered = hash.keys.size
595
+ shall_we_make_use_of_unicode_symbols = Studium.shall_we_make_use_of_unicode_symbols?
596
+ if optional_argument_controlling_what_we_will_report_here
597
+ case optional_argument_controlling_what_we_will_report_here
598
+ when :split_into_bachelor_and_master_lectures
599
+ show_this_hash_split_into_bachelor_and_master_lectures(hash)
600
+ end
601
+ else # This clause is the default, actually.
602
+ hash.reject! {|name_of_the_lecture, inner_hash|
603
+ if @show_only_courses_at_this_university
604
+ # =============================================================== #
605
+ # Must sanitize it a bit here.
606
+ # =============================================================== #
607
+ show_only_courses_at_this_university =
608
+ sanitized_names_for_this_university(@show_only_courses_at_this_university)
609
+ this_university = inner_hash[:university].to_s # .downcase.delete(' ')
610
+ !this_university.start_with?(show_only_courses_at_this_university)
611
+ else
612
+ false
613
+ end
614
+ }
615
+ unless hash.empty?
616
+ notify_the_user_these_lectures_were_found_to_fit_to_the_theme_header
617
+ end
618
+ index = 0
619
+ hash.each_pair {|name_of_the_lecture, inner_hash| index += 1
620
+ splitted = name_of_the_lecture.split(' ')
621
+ lva_id = splitted.first
622
+ real_name = splitted[1..-1].join(' ')
623
+ n_ects_points = inner_hash[:ects].to_f
624
+ if inner_hash.has_key? :semester
625
+ which_semester = inner_hash[:semester]
626
+ else
627
+ # e 'No :semester entry for '+sfancy(name_of_the_lecture)+
628
+ # '. Consider adding this information.'
629
+ which_semester = ''
630
+ end
631
+ # ================================================================= #
632
+ # Keep track of how many ECTS the selected lectures have.
633
+ # ================================================================= #
634
+ @n_ects_in_total_of_the_selected_lectures += n_ects_points
635
+ array_curricula = inner_hash['curricula']
636
+ lecture_type = inner_hash[:type]
637
+ already_solved = inner_hash[:already_solved]
638
+ if already_solved
639
+ # =============================================================== #
640
+ # This exam was already passed, so we add some useful
641
+ # information about it.
642
+ # =============================================================== #
643
+ passed_this_exam_on = inner_hash[:already_solved_at]
644
+ @n_lectures_were_successfully_passed_in_total += 1
645
+ @n_ects_were_successfully_passed_in_total += n_ects_points
646
+ @array_grades << inner_hash[:grade].to_f
647
+ else
648
+ passed_this_exam_on = nil
649
+ end
650
+ # ================================================================= #
651
+ # We also have to show the University.
652
+ # ================================================================= #
653
+ at_this_university = inner_hash[:university]
654
+ if array_curricula.nil?
655
+ opne "The lecture #{sfancy(name_of_the_lecture)} has "\
656
+ "no curricula-entry associated."
657
+ opne 'The associated Hash will also be shown next.'
658
+ pp inner_hash
659
+ end
660
+ if passed_this_exam_on.nil? or (passed_this_exam_on == false)
661
+ colourized_index = orange(
662
+ ("(#{index.to_s})").rjust(4).ljust(5)
663
+ )
664
+ else
665
+ # =============================================================== #
666
+ # === colourized_index
667
+ #
668
+ # else we have already passed this exam, so use the colour tan()
669
+ # instead.
670
+ # =============================================================== #
671
+ colourized_index = tan(
672
+ ("(#{index.to_s})").rjust(4).ljust(5)
673
+ )
674
+ end
675
+ # ================================================================= #
676
+ # Determine in which semester the lecture will be held:
677
+ # ================================================================= #
678
+ case which_semester
679
+ when 'winter'
680
+ which_semester = 'WS'
681
+ when 'summer'
682
+ which_semester = 'SS'
683
+ when 'both'
684
+ which_semester = 'WS/SS'
685
+ end
686
+ # ================================================================= #
687
+ # Next, display some information about this lecture.
688
+ # ================================================================= #
689
+ result = "#{colourized_index} ".dup
690
+ if already_solved
691
+ result << darkolivegreen(name_of_the_lecture)
692
+ else
693
+ result << olivedrab(name_of_the_lecture)
694
+ end
695
+ result << ' '+plum('(n ECTS: '+n_ects_points.to_s+'; ')+
696
+ forestgreen(lecture_type).dup
697
+ unless which_semester.empty?
698
+ result << "; #{orange(which_semester)}"
699
+ end
700
+ # ================================================================= #
701
+ # Add information about the university next:
702
+ # ================================================================= #
703
+ result << plum(')')+ # Add the lecture type here
704
+ peru(' (Universität: ')+
705
+ springgreen(at_this_university)+
706
+ peru(')')
707
+ # ================================================================= #
708
+ # Finally, report our findings to the user.
709
+ # ================================================================= #
710
+ e result
711
+ # ================================================================= #
712
+ # Finally, check whether the lecture has already been completed.
713
+ # If so then display some red-box at the bottom.
714
+ # ================================================================= #
715
+ if already_solved.nil? or (already_solved == false)
716
+ # =============================================================== #
717
+ # In this case we'll check a module-method.
718
+ # =============================================================== #
719
+ already_solved = Studium.already_solved_this_lva_number?(lva_id, real_name)
720
+ end
721
+ if already_solved
722
+ # =============================================================== #
723
+ # This means that the lecture has been completed successfully.
724
+ #
725
+ # Now we have to determine the date at which this exam has
726
+ # been passed successfully. We can query this either from the
727
+ # file lecture_information, or from the .csv file.
728
+ # =============================================================== #
729
+ if passed_this_exam_on.nil? or (passed_this_exam_on == false)
730
+ passed_this_exam_on = Studium.passed_this_exam_on(name_of_the_lecture)
731
+ end
732
+ if passed_this_exam_on.nil? or (passed_this_exam_on == false) # <- In this case some error has occurred.
733
+ opne swarn('An error occurred for the lecture called ')+
734
+ sfancy(name_of_the_lecture)
735
+ opne "#{swarn('It failed in the method ')}"\
736
+ "#{sfancy('Studium.passed_this_exam_on(name_of_the_lecture)')}"
737
+ opne swarn('Please correct this error. Different reasons can be')
738
+ opne swarn('as to why this has failed. One may be trailing space')
739
+ opne swarn('characters in the .csv that keeps your passed exams.')
740
+ else
741
+ # ============================================================= #
742
+ # Show that this lecture has been passed successfully:
743
+ # ============================================================= #
744
+ completed_successfully_msg = (' ' * 6).dup
745
+ # ============================================================= #
746
+ # The next line will show a unicode-symbol, a check box.
747
+ # This requires that the user is using e. g. UTF-8.
748
+ # ============================================================= #
749
+ if shall_we_make_use_of_unicode_symbols and
750
+ Object.const_defined?(:Roebe) and
751
+ Roebe.respond_to?(:to_unicode)
752
+ completed_successfully_msg << swarn(Roebe.to_unicode(:thick))
753
+ end
754
+ completed_successfully_msg << lightblue(' ☺ ')+ # Add a smiley here.
755
+ swarn(' ^^^ COMPLETED SUCCESSFULLY ON THE ')+
756
+ coral(passed_this_exam_on.to_s)+swarn(' ^^^')
757
+ e completed_successfully_msg # Display it here.
758
+ end
759
+ end
760
+ # ================================================================= #
761
+ # Next, since as of 21.07.2022, we will show the remote URL, UNLESS
762
+ # we have already passed this course.
763
+ # ================================================================= #
764
+ unless already_solved
765
+ e " #{royalblue('→')} rf \"#{royalblue(Studium.url_for?(name_of_the_lecture))}\""
766
+ end
767
+ # ================================================================= #
768
+ # Next show the curricula associated with this lecture.
769
+ # ================================================================= #
770
+ array_curricula.each {|this_curriculum|
771
+ name_of_the_curriculum = Studium.return_name_of_this_curriculum(this_curriculum)
772
+ # =============================================================== #
773
+ # Display the association with the corresponding curriculum next.
774
+ # =============================================================== #
775
+ e (' ' * 6)+' '+
776
+ mediumaquamarine(this_curriculum.ljust(6))+
777
+ royalblue(' # ')+
778
+ slateblue(name_of_the_curriculum)
779
+ }
780
+ }; e
781
+ end
782
+ end
783
+ end; alias show_hash show_this_hash # === show_hash
784
+
785
+ # ========================================================================= #
786
+ # === Studium::ShowLectures[]
787
+ # ========================================================================= #
788
+ def self.[](i = ARGV)
789
+ new(i)
790
+ end
791
+
792
+ # ========================================================================= #
793
+ # === obtain_all_lectures_that_belong_to_the_given_theme_at_hand
794
+ #
795
+ # This is the method that will select all the lectures that fit to the
796
+ # target theme at hand.
797
+ # ========================================================================= #
798
+ def obtain_all_lectures_that_belong_to_the_given_theme_at_hand
799
+ _ = @dataset_from_file_lecture_information
800
+ # ======================================================================= #
801
+ # Determine the theme we are looking for next.
802
+ # ======================================================================= #
803
+ we_seek_this_theme = searching_for_this_theme?
804
+ we_seek_this_theme = we_seek_this_theme.first if we_seek_this_theme.is_a? Array
805
+ # ======================================================================= #
806
+ # Next handle only-unsolved lectures, and only-solved lectures.
807
+ # ======================================================================= #
808
+ case @show_these_lectures
809
+ # ======================================================================= #
810
+ # === :show_only_solved_lectures
811
+ # ======================================================================= #
812
+ when :show_only_solved_lectures,
813
+ :only_solved_lectures
814
+ # ===================================================================== #
815
+ # Weed out lectures we have not already solved yet.
816
+ # ===================================================================== #
817
+ _.select! {|name_of_the_lecture, hash_containing_lots_of_data|
818
+ already_solved = hash_containing_lots_of_data[:already_solved]
819
+ (already_solved == true)
820
+ }
821
+ # ======================================================================= #
822
+ # === :show_only_unsolved_lectures
823
+ # ======================================================================= #
824
+ when :show_only_unsolved_lectures,
825
+ :only_unsolved_lectures
826
+ # ===================================================================== #
827
+ # Weed out lectures we have not already solved yet.
828
+ # ===================================================================== #
829
+ _.select! {|name_of_the_lecture, hash_containing_lots_of_data|
830
+ already_solved = hash_containing_lots_of_data[:already_solved]
831
+ !already_solved # And the opposite.
832
+ }
833
+ # else # else we will simply pass through.
834
+ end
835
+ # ======================================================================= #
836
+ # First, remove entries that are outdated, aka having the symbol
837
+ # :outdated_lecture set to true, UNLESS they were already solved.
838
+ # ======================================================================= #
839
+ selection = _.reject {|a, b|
840
+ b.has_key?(:outdated_lecture) and
841
+ (b[:outdated_lecture] == true) and
842
+ (b[:outdated_lecture] == true) and
843
+ !(b[:already_solved] == true)
844
+ }
845
+ @selection = selection.select {|name_of_the_lecture, hash_containing_lots_of_data|
846
+ # ===================================================================== #
847
+ # We must use .compact because some entries may contain
848
+ # a stray [nil] value.
849
+ # ===================================================================== #
850
+ if hash_containing_lots_of_data.has_key? 'themes'
851
+ themes = hash_containing_lots_of_data['themes'].compact
852
+ if themes.nil? or themes.empty?
853
+ opne swarn('Warning:')+' the lecture '+sfancy(name_of_the_lecture)+
854
+ ' has no logical "themes:" entry.'
855
+ end
856
+ end
857
+ # ===================================================================== #
858
+ # Map over the themes here next - themes will be an Array that
859
+ # may look like this: ["informatics", "databases"]
860
+ # ===================================================================== #
861
+ if themes
862
+ short_theme = we_seek_this_theme.to_s.delete('_ ') # e. g. "bioinformatics".
863
+ mapped_themes = themes.map {|inner_line|
864
+ if inner_line.nil?
865
+ e 'Nil value - something is wrong.'
866
+ e
867
+ e 'Showing themes next:'
868
+ e
869
+ pp themes
870
+ e
871
+ e 'Next showing @selection:'
872
+ e
873
+ @selection
874
+ end
875
+ inner_line.delete(' ')
876
+ }
877
+ if mapped_themes.include? short_theme
878
+ name_of_the_lecture
879
+ else
880
+ false
881
+ end
882
+ end
883
+ }
884
+ end
885
+
886
+ # ========================================================================= #
887
+ # === run (run tag)
888
+ # ========================================================================= #
889
+ def run
890
+ load_dataset_from_the_file_lecture_information
891
+ menu
892
+ obtain_all_lectures_that_belong_to_the_given_theme_at_hand
893
+ show_this_hash(
894
+ :default,
895
+ :split_into_bachelor_and_master_lectures
896
+ )
897
+ considering_showing_how_many_ects_points_were_successfully_passed_in_total
898
+ add_total_amount_of_ects_points_in_the_selected_lectures
899
+ report_the_result_on_the_commandline
900
+ consider_showing_the_timetable # ← Consider creating a .html file here.
901
+ end
902
+
903
+ end; end
904
+
905
+ if __FILE__ == $PROGRAM_NAME
906
+ Studium::ShowLectures.new(ARGV)
907
+ end # showlectures --microbiology
908
+ # showlectures --immuno
909
+ # showlectures --analytical_chemistry
910
+ # tbiochem --only-unsolved