studium 0.9.383

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

Potentially problematic release.


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

Files changed (894) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1651 -0
  3. data/bin/ask_question +7 -0
  4. data/bin/check_description_of_these_lectures +7 -0
  5. data/bin/curriculum_module_displayer +7 -0
  6. data/bin/d10 +7 -0
  7. data/bin/d100 +7 -0
  8. data/bin/d15 +7 -0
  9. data/bin/d20 +7 -0
  10. data/bin/d25 +7 -0
  11. data/bin/d3 +7 -0
  12. data/bin/d30 +7 -0
  13. data/bin/d5 +7 -0
  14. data/bin/determine_curricula +7 -0
  15. data/bin/exam_registration_at +7 -0
  16. data/bin/exam_statistics +7 -0
  17. data/bin/exams_per_month +9 -0
  18. data/bin/finished_exams_at_this_university +7 -0
  19. data/bin/flashcards +7 -0
  20. data/bin/mandatory_continuous_assessment +7 -0
  21. data/bin/mandatory_upcoming_courses +7 -0
  22. data/bin/n_exam_questions_already_answered +17 -0
  23. data/bin/nquestions +7 -0
  24. data/bin/nsolved +7 -0
  25. data/bin/open_last_exam_question_asked_file +7 -0
  26. data/bin/passed_pr/303/274fungsimmanente_courses +7 -0
  27. data/bin/return_n_ects_from_this_file +7 -0
  28. data/bin/show_lectures_on_the_commandline +7 -0
  29. data/bin/show_themes +7 -0
  30. data/bin/solved +9 -0
  31. data/bin/studienkennzahl +7 -0
  32. data/bin/studium +7 -0
  33. data/bin/studium_skeleton +7 -0
  34. data/bin/ufind +7 -0
  35. data/bin/upcoming_exams +7 -0
  36. data/doc/ECTS_CONSIDERATIONS.md +54 -0
  37. data/doc/HOW_TO_ADAPT_THIS_PROJECT.md +40 -0
  38. data/doc/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER.md +39 -0
  39. data/doc/README.gen +1634 -0
  40. data/doc/TODO_FOR_STUDIUM_GEM.md +119 -0
  41. data/doc/deprecated.md +18 -0
  42. data/doc/documentation_for_the_file_lecture_information.md +259 -0
  43. data/doc/elegant_colours.md +20 -0
  44. data/img/STUDIES.png +0 -0
  45. data/lib/studium.rb +5 -0
  46. data/lib/studium/autoinclude.rb +7 -0
  47. data/lib/studium/base/base.rb +108 -0
  48. data/lib/studium/base/cliner.rb +58 -0
  49. data/lib/studium/base/colours.rb +349 -0
  50. data/lib/studium/base/commandline_arguments.rb +46 -0
  51. data/lib/studium/base/constants.rb +32 -0
  52. data/lib/studium/base/curriculum.rb +304 -0
  53. data/lib/studium/base/directory_to_the_exam_topics.rb +23 -0
  54. data/lib/studium/base/editor.rb +20 -0
  55. data/lib/studium/base/encoding.rb +35 -0
  56. data/lib/studium/base/esystem.rb +24 -0
  57. data/lib/studium/base/minimal_prototype.rb +33 -0
  58. data/lib/studium/base/misc.rb +819 -0
  59. data/lib/studium/base/mode.rb +89 -0
  60. data/lib/studium/base/obtain.rb +144 -0
  61. data/lib/studium/base/opnn.rb +46 -0
  62. data/lib/studium/base/prototype.rb +102 -0
  63. data/lib/studium/base/readlines.rb +53 -0
  64. data/lib/studium/base/replace.rb +108 -0
  65. data/lib/studium/base/reset.rb +49 -0
  66. data/lib/studium/base/run.rb +17 -0
  67. data/lib/studium/base/src_dir_at_home.rb +20 -0
  68. data/lib/studium/base/time.rb +599 -0
  69. data/lib/studium/base/unicode.rb +92 -0
  70. data/lib/studium/base/word_wrap.rb +55 -0
  71. data/lib/studium/boku/README.md +4 -0
  72. data/lib/studium/boku/boku_/303/266ffnungszeiten.rb +29 -0
  73. data/lib/studium/boku/show_three_pillars_of_these_lectures.rb +107 -0
  74. data/lib/studium/boku/three_pillars.rb +245 -0
  75. data/lib/studium/check/README.md +7 -0
  76. data/lib/studium/check/check_curriculum_for_correct_separation_of_bachelor_and_master.rb +149 -0
  77. data/lib/studium/check/check_for_all_exam_topics_being_registered.rb +82 -0
  78. data/lib/studium/check/check_for_existing_description_of_this_lecture.rb +194 -0
  79. data/lib/studium/check/check_the_lecture_information_file.rb +168 -0
  80. data/lib/studium/colours/colours.rb +596 -0
  81. data/lib/studium/colours/sfancy.rb +38 -0
  82. data/lib/studium/colours/sfile.rb +35 -0
  83. data/lib/studium/colours/simp.rb +38 -0
  84. data/lib/studium/commandline/commandline.rb +121 -0
  85. data/lib/studium/commandline/fast_commandline_options.rb +994 -0
  86. data/lib/studium/commandline/help.rb +147 -0
  87. data/lib/studium/commandline/menu.rb +366 -0
  88. data/lib/studium/commandline/misc.rb +11 -0
  89. data/lib/studium/constants/boku_wien.rb +52 -0
  90. data/lib/studium/constants/constants.rb +30 -0
  91. data/lib/studium/constants/delay.rb +21 -0
  92. data/lib/studium/constants/editor.rb +25 -0
  93. data/lib/studium/constants/exam_topics.rb +161 -0
  94. data/lib/studium/constants/file_constants.rb +826 -0
  95. data/lib/studium/constants/image_constants.rb +217 -0
  96. data/lib/studium/constants/last_question_asked.rb +32 -0
  97. data/lib/studium/constants/lecture_types_that_are_mandatory_continuous_assessment.rb +47 -0
  98. data/lib/studium/constants/log_dir.rb +174 -0
  99. data/lib/studium/constants/misc.rb +200 -0
  100. data/lib/studium/constants/namespace.rb +14 -0
  101. data/lib/studium/constants/regexes.rb +32 -0
  102. data/lib/studium/constants/return_file_for_this_curriculum.rb +407 -0
  103. data/lib/studium/constants/roebe.rb +151 -0
  104. data/lib/studium/constants/time.rb +49 -0
  105. data/lib/studium/constants/tu_wien.rb +39 -0
  106. data/lib/studium/constants/uni_wien.rb +24 -0
  107. data/lib/studium/constants/unicode.rb +27 -0
  108. data/lib/studium/constants/week.rb +137 -0
  109. data/lib/studium/constants/www_constants.rb +23 -0
  110. data/lib/studium/curricula/curriculum.rb +187 -0
  111. data/lib/studium/curricula/curriculum_as_string.rb +279 -0
  112. data/lib/studium/curricula/curriculum_module_displayer/constants.rb +38 -0
  113. data/lib/studium/curricula/curriculum_module_displayer/curriculum_module_displayer.rb +421 -0
  114. data/lib/studium/curricula/curriculum_module_displayer/initialize.rb +25 -0
  115. data/lib/studium/curricula/curriculum_module_displayer/menu.rb +45 -0
  116. data/lib/studium/curricula/curriculum_module_displayer/reset.rb +77 -0
  117. data/lib/studium/curricula/curriculum_module_displayer/run.rb +20 -0
  118. data/lib/studium/curricula/curriculum_module_displayer/set_use_this_curriculum.rb +90 -0
  119. data/lib/studium/curricula/curriculum_module_displayer/show_and_report.rb +190 -0
  120. data/lib/studium/curricula/determine_curricula/constants.rb +16 -0
  121. data/lib/studium/curricula/determine_curricula/determine_curricula.rb +36 -0
  122. data/lib/studium/curricula/determine_curricula/help.rb +39 -0
  123. data/lib/studium/curricula/determine_curricula/initialize.rb +48 -0
  124. data/lib/studium/curricula/determine_curricula/menu.rb +138 -0
  125. data/lib/studium/curricula/determine_curricula/misc.rb +402 -0
  126. data/lib/studium/curricula/determine_curricula/report.rb +130 -0
  127. data/lib/studium/curricula/determine_curricula/reset.rb +62 -0
  128. data/lib/studium/curricula/determine_curricula/run.rb +19 -0
  129. data/lib/studium/curricula/determine_elective_courses_in_this_curriculum.rb +131 -0
  130. data/lib/studium/curricula/display_bachelor_curricula.rb +104 -0
  131. data/lib/studium/curricula/mitteilungsbl/303/244tter.rb +336 -0
  132. data/lib/studium/curricula/modules/display_on_the_commandline.rb +339 -0
  133. data/lib/studium/curricula/modules/return_n_ects_in_this_module.rb +72 -0
  134. data/lib/studium/curricula/n_percent_solved_in_this_curriculum.rb +72 -0
  135. data/lib/studium/curricula/show_lectures_of_this_curriculum.rb +112 -0
  136. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/constants.rb +16 -0
  137. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/misc.rb +277 -0
  138. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/report.rb +140 -0
  139. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/reset.rb +65 -0
  140. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/show_lectures_of_this_curriculum_id.rb +37 -0
  141. data/lib/studium/curricula/show_solved_percentage_among_the_registered_curricula.rb +99 -0
  142. data/lib/studium/ects/boku_ects_splitter.rb +121 -0
  143. data/lib/studium/ects/ects_parser.rb +174 -0
  144. data/lib/studium/ects/ects_per_university.rb +137 -0
  145. data/lib/studium/ects/ects_scanner.rb +136 -0
  146. data/lib/studium/ects/ects_to_university_parser.rb +144 -0
  147. data/lib/studium/ects/erledigt.rb +129 -0
  148. data/lib/studium/ects/last_entry_is_curriculum.rb +144 -0
  149. data/lib/studium/ects/n_ects_in_these_lectures.rb +176 -0
  150. data/lib/studium/ects/n_ects_points_in_mandatory_presence_courses.rb +50 -0
  151. data/lib/studium/ects/noch_zu_absolvieren.rb +170 -0
  152. data/lib/studium/ects/return_n_ects_from_this_file.rb +58 -0
  153. data/lib/studium/ects/return_n_ects_from_this_url.rb +197 -0
  154. data/lib/studium/ects/search_for_n_ects.rb +535 -0
  155. data/lib/studium/ects/show_completed_ects_in_all_curricula.rb +208 -0
  156. data/lib/studium/ects/show_passed_credits_per_curriculum.rb +241 -0
  157. data/lib/studium/ects/simple_total_ects_points.rb +143 -0
  158. data/lib/studium/ects/solved_ects/constants.rb +24 -0
  159. data/lib/studium/ects/solved_ects/solved_ects.rb +340 -0
  160. data/lib/studium/ects/solved_ects_per_university/solved_ects_per_university.rb +116 -0
  161. data/lib/studium/ects/still_missing.rb +125 -0
  162. data/lib/studium/ects/sum_of_ects.rb +147 -0
  163. data/lib/studium/encoding/encoding.rb +141 -0
  164. data/lib/studium/exam_topics/RNAi_siRNA_and_miRNA +79 -0
  165. data/lib/studium/exam_topics/abfall_als_ressource +86 -0
  166. data/lib/studium/exam_topics/advanced_biochemistry +762 -0
  167. data/lib/studium/exam_topics/advanced_biotechnology +192 -0
  168. data/lib/studium/exam_topics/advanced_cellbiology +24 -0
  169. data/lib/studium/exam_topics/advanced_chemistry +453 -0
  170. data/lib/studium/exam_topics/advanced_microbiology +44 -0
  171. data/lib/studium/exam_topics/advanced_topics_in_plant_sciences +46 -0
  172. data/lib/studium/exam_topics/advanced_virology +52 -0
  173. data/lib/studium/exam_topics/ageing +101 -0
  174. data/lib/studium/exam_topics/agrar_ecology +61 -0
  175. data/lib/studium/exam_topics/agrarmarkt +71 -0
  176. data/lib/studium/exam_topics/agrarphysik +35 -0
  177. data/lib/studium/exam_topics/alcohols +29 -0
  178. data/lib/studium/exam_topics/algorithms +49 -0
  179. data/lib/studium/exam_topics/allergie +73 -0
  180. data/lib/studium/exam_topics/allgemeine_genetik +1006 -0
  181. data/lib/studium/exam_topics/allgemeine_mikrobiologie +855 -0
  182. data/lib/studium/exam_topics/aminoacids +417 -0
  183. data/lib/studium/exam_topics/analytische_chemie_1 +130 -0
  184. data/lib/studium/exam_topics/analytische_chemie_2 +31 -0
  185. data/lib/studium/exam_topics/anatomie +248 -0
  186. data/lib/studium/exam_topics/anorganische_chemie +289 -0
  187. data/lib/studium/exam_topics/anthropologie +115 -0
  188. data/lib/studium/exam_topics/antibodies_and_antigens +747 -0
  189. data/lib/studium/exam_topics/apoptosis +35 -0
  190. data/lib/studium/exam_topics/archaea +41 -0
  191. data/lib/studium/exam_topics/architecture +8 -0
  192. data/lib/studium/exam_topics/artificial_intelligence +81 -0
  193. data/lib/studium/exam_topics/audio +10 -0
  194. data/lib/studium/exam_topics/bacteriophages +224 -0
  195. data/lib/studium/exam_topics/basic_biochemistry +1008 -0
  196. data/lib/studium/exam_topics/basic_biotechnology +1011 -0
  197. data/lib/studium/exam_topics/basic_chemistry +1007 -0
  198. data/lib/studium/exam_topics/basic_virology +949 -0
  199. data/lib/studium/exam_topics/bauwesen +6 -0
  200. data/lib/studium/exam_topics/betriebssysteme +125 -0
  201. data/lib/studium/exam_topics/betriebswirtschaftslehre +29 -0
  202. data/lib/studium/exam_topics/bioanalytik_und_biosensoren +381 -0
  203. data/lib/studium/exam_topics/biochips +78 -0
  204. data/lib/studium/exam_topics/bioelektrochemie +56 -0
  205. data/lib/studium/exam_topics/biofilms +22 -0
  206. data/lib/studium/exam_topics/bioinformatics +475 -0
  207. data/lib/studium/exam_topics/biological_therapeutics +152 -0
  208. data/lib/studium/exam_topics/biologie +134 -0
  209. data/lib/studium/exam_topics/biomarkers +106 -0
  210. data/lib/studium/exam_topics/biomaterials +46 -0
  211. data/lib/studium/exam_topics/biomembranes +6 -0
  212. data/lib/studium/exam_topics/bionik +65 -0
  213. data/lib/studium/exam_topics/biophysik +34 -0
  214. data/lib/studium/exam_topics/biopolymers +10 -0
  215. data/lib/studium/exam_topics/bioprozesstechnik +139 -0
  216. data/lib/studium/exam_topics/bioressourcenmanagement +78 -0
  217. data/lib/studium/exam_topics/bodenkunde +345 -0
  218. data/lib/studium/exam_topics/bodenmikrobiologie +40 -0
  219. data/lib/studium/exam_topics/cancerbiology +441 -0
  220. data/lib/studium/exam_topics/cell_cultures +154 -0
  221. data/lib/studium/exam_topics/cellbiology +962 -0
  222. data/lib/studium/exam_topics/cellular_transport_and_protein_secretion +27 -0
  223. data/lib/studium/exam_topics/chemische_technologie_anorganischer_stoffe +208 -0
  224. data/lib/studium/exam_topics/chemisches_labor +59 -0
  225. data/lib/studium/exam_topics/chemotaxis_and_motility_in_prokaryotes +74 -0
  226. data/lib/studium/exam_topics/citric_acid_cycle +70 -0
  227. data/lib/studium/exam_topics/clinical_microbiology +486 -0
  228. data/lib/studium/exam_topics/computer_graphics +5 -0
  229. data/lib/studium/exam_topics/computer_science +269 -0
  230. data/lib/studium/exam_topics/crispr +25 -0
  231. data/lib/studium/exam_topics/cyanobacteria +37 -0
  232. data/lib/studium/exam_topics/cytogenetics_and_chromosome_biology +506 -0
  233. data/lib/studium/exam_topics/databases_and_sql +105 -0
  234. data/lib/studium/exam_topics/dna_mutation_and_dna_repair +33 -0
  235. data/lib/studium/exam_topics/dna_replication +53 -0
  236. data/lib/studium/exam_topics/ecogenetics +27 -0
  237. data/lib/studium/exam_topics/ecological_agriculture +12 -0
  238. data/lib/studium/exam_topics/ecology +313 -0
  239. data/lib/studium/exam_topics/economy +210 -0
  240. data/lib/studium/exam_topics/elektronenmikroskopie +353 -0
  241. data/lib/studium/exam_topics/elektrophorese +88 -0
  242. data/lib/studium/exam_topics/elektrotechnik +8 -0
  243. data/lib/studium/exam_topics/elisa +54 -0
  244. data/lib/studium/exam_topics/embryologie_und_entwicklung +541 -0
  245. data/lib/studium/exam_topics/endospores_and_spores +92 -0
  246. data/lib/studium/exam_topics/enzymes_and_cofactors +327 -0
  247. data/lib/studium/exam_topics/epigenetik +177 -0
  248. data/lib/studium/exam_topics/ethik +125 -0
  249. data/lib/studium/exam_topics/evolution_and_evolutionary_genetics +323 -0
  250. data/lib/studium/exam_topics/excel +7 -0
  251. data/lib/studium/exam_topics/fish +19 -0
  252. data/lib/studium/exam_topics/fluorescence_microscopy +7 -0
  253. data/lib/studium/exam_topics/food_microbiology_and_food_biotechnology +17 -0
  254. data/lib/studium/exam_topics/forensik +11 -0
  255. data/lib/studium/exam_topics/forstwirtschaft +52 -0
  256. data/lib/studium/exam_topics/fortgeschrittene_genetik +427 -0
  257. data/lib/studium/exam_topics/fortgeschrittene_gentechnik +189 -0
  258. data/lib/studium/exam_topics/fortgeschrittene_physik +6 -0
  259. data/lib/studium/exam_topics/fungi +78 -0
  260. data/lib/studium/exam_topics/genetische_krankheiten +150 -0
  261. data/lib/studium/exam_topics/genexpression +1008 -0
  262. data/lib/studium/exam_topics/genomics_and_metagenomics +205 -0
  263. data/lib/studium/exam_topics/gentechnik_und_praktische_biochemie +863 -0
  264. data/lib/studium/exam_topics/geochemistry +66 -0
  265. data/lib/studium/exam_topics/geography +5 -0
  266. data/lib/studium/exam_topics/geologie_und_mineralogie +610 -0
  267. data/lib/studium/exam_topics/geschichte +94 -0
  268. data/lib/studium/exam_topics/gluconeogenesis +34 -0
  269. data/lib/studium/exam_topics/glycolysis +94 -0
  270. data/lib/studium/exam_topics/glykomik +42 -0
  271. data/lib/studium/exam_topics/glyoxylatzyklus +23 -0
  272. data/lib/studium/exam_topics/grassland_cultivation +32 -0
  273. data/lib/studium/exam_topics/hormone +122 -0
  274. data/lib/studium/exam_topics/html +7 -0
  275. data/lib/studium/exam_topics/human_ecology +8 -0
  276. data/lib/studium/exam_topics/hygiene +191 -0
  277. data/lib/studium/exam_topics/imaging_and_microscopy +224 -0
  278. data/lib/studium/exam_topics/immunanalytik +88 -0
  279. data/lib/studium/exam_topics/immunologie +888 -0
  280. data/lib/studium/exam_topics/informatik +95 -0
  281. data/lib/studium/exam_topics/innate_immunity +20 -0
  282. data/lib/studium/exam_topics/insekten +30 -0
  283. data/lib/studium/exam_topics/insulin_and_diabetes +55 -0
  284. data/lib/studium/exam_topics/java +439 -0
  285. data/lib/studium/exam_topics/javascript +10 -0
  286. data/lib/studium/exam_topics/klima +6 -0
  287. data/lib/studium/exam_topics/landtechnik +27 -0
  288. data/lib/studium/exam_topics/lebensmittel +206 -0
  289. data/lib/studium/exam_topics/lebensmitteltechnologie +16 -0
  290. data/lib/studium/exam_topics/linux +5 -0
  291. data/lib/studium/exam_topics/lipids +95 -0
  292. data/lib/studium/exam_topics/macroeconomics +39 -0
  293. data/lib/studium/exam_topics/mathematics +173 -0
  294. data/lib/studium/exam_topics/medizin_und_biomedizinische_technik +250 -0
  295. data/lib/studium/exam_topics/medizinische_chemie_und_pharmazie +397 -0
  296. data/lib/studium/exam_topics/messtechnik_und_regeltechnik +104 -0
  297. data/lib/studium/exam_topics/metabolismus +431 -0
  298. data/lib/studium/exam_topics/microbial_ecology +35 -0
  299. data/lib/studium/exam_topics/mikrobielle_lebensgemeinschaften +34 -0
  300. data/lib/studium/exam_topics/mikrobielle_physiologie +147 -0
  301. data/lib/studium/exam_topics/mixed +289 -0
  302. data/lib/studium/exam_topics/molecular_biology_of_plants +234 -0
  303. data/lib/studium/exam_topics/molekulare_medizin +129 -0
  304. data/lib/studium/exam_topics/nanotechnologie +302 -0
  305. data/lib/studium/exam_topics/nature_conservation_and_biodiversity +165 -0
  306. data/lib/studium/exam_topics/naturstoffe +9 -0
  307. data/lib/studium/exam_topics/netzwerke +32 -0
  308. data/lib/studium/exam_topics/neurobiology +266 -0
  309. data/lib/studium/exam_topics/nucleotide_sequencing +30 -0
  310. data/lib/studium/exam_topics/object_oriented_modeling +14 -0
  311. data/lib/studium/exam_topics/obstbau +234 -0
  312. data/lib/studium/exam_topics/organische_chemie +1007 -0
  313. data/lib/studium/exam_topics/organische_chemie_2 +72 -0
  314. data/lib/studium/exam_topics/paleobiology +33 -0
  315. data/lib/studium/exam_topics/parasitic_diseases_and_molecular_infection_biology +335 -0
  316. data/lib/studium/exam_topics/patent_law +55 -0
  317. data/lib/studium/exam_topics/pathologie +713 -0
  318. data/lib/studium/exam_topics/pcr +133 -0
  319. data/lib/studium/exam_topics/peroxisomes_glycosomes_and_lysosomes +54 -0
  320. data/lib/studium/exam_topics/pflanzenanatomie +239 -0
  321. data/lib/studium/exam_topics/pflanzenbau +24 -0
  322. data/lib/studium/exam_topics/pflanzenschutz +35 -0
  323. data/lib/studium/exam_topics/pflanzenwissenschaften +1010 -0
  324. data/lib/studium/exam_topics/pharmaceutical_biotechnology +250 -0
  325. data/lib/studium/exam_topics/physik +326 -0
  326. data/lib/studium/exam_topics/physikalische_chemie +85 -0
  327. data/lib/studium/exam_topics/physiology_and_histology +485 -0
  328. data/lib/studium/exam_topics/phytochemie +33 -0
  329. data/lib/studium/exam_topics/plant_biotechnology +127 -0
  330. data/lib/studium/exam_topics/plant_breeding +64 -0
  331. data/lib/studium/exam_topics/plant_development +50 -0
  332. data/lib/studium/exam_topics/populationsgenetik +136 -0
  333. data/lib/studium/exam_topics/posttranslationale_modifikation_von_proteinen +186 -0
  334. data/lib/studium/exam_topics/projektmanagement +218 -0
  335. data/lib/studium/exam_topics/prokaryote_genetics +470 -0
  336. data/lib/studium/exam_topics/proteomik +38 -0
  337. data/lib/studium/exam_topics/prozesstechnik +95 -0
  338. data/lib/studium/exam_topics/psychologie +9 -0
  339. data/lib/studium/exam_topics/python +350 -0
  340. data/lib/studium/exam_topics/quality_management +241 -0
  341. data/lib/studium/exam_topics/rechtsgrundlagen +114 -0
  342. data/lib/studium/exam_topics/research_topics_in_immunobiology +42 -0
  343. data/lib/studium/exam_topics/rna_and_dna +360 -0
  344. data/lib/studium/exam_topics/rna_seq +11 -0
  345. data/lib/studium/exam_topics/ruby +126 -0
  346. data/lib/studium/exam_topics/ruby_on_rails +62 -0
  347. data/lib/studium/exam_topics/scientific_writing_and_publishing +38 -0
  348. data/lib/studium/exam_topics/semisynthese_von_proteinen_und_nukleotiden +120 -0
  349. data/lib/studium/exam_topics/sexualbiologie +59 -0
  350. data/lib/studium/exam_topics/signal_transduction_and_laser_systems +126 -0
  351. data/lib/studium/exam_topics/splicing_exons_and_introns +57 -0
  352. data/lib/studium/exam_topics/statistik +202 -0
  353. data/lib/studium/exam_topics/stemcells +87 -0
  354. data/lib/studium/exam_topics/structural_bioinformatics +54 -0
  355. data/lib/studium/exam_topics/strukturbiologie +319 -0
  356. data/lib/studium/exam_topics/system_biology_and_synthetic_biology +87 -0
  357. data/lib/studium/exam_topics/systematische_zoologie +430 -0
  358. data/lib/studium/exam_topics/technical_ecology +144 -0
  359. data/lib/studium/exam_topics/technische_chemie +193 -0
  360. data/lib/studium/exam_topics/technische_grundlagen_der_informatik +22 -0
  361. data/lib/studium/exam_topics/technische_mikrobiologie +403 -0
  362. data/lib/studium/exam_topics/technisches_zeichnen +5 -0
  363. data/lib/studium/exam_topics/the_bacterial_cell_wall +86 -0
  364. data/lib/studium/exam_topics/the_c_plus_plus_programming_language +488 -0
  365. data/lib/studium/exam_topics/the_c_programming_language +128 -0
  366. data/lib/studium/exam_topics/the_cellcycle +65 -0
  367. data/lib/studium/exam_topics/the_european_union +119 -0
  368. data/lib/studium/exam_topics/the_interferon_system +32 -0
  369. data/lib/studium/exam_topics/the_microbiome +163 -0
  370. data/lib/studium/exam_topics/the_universe +6 -0
  371. data/lib/studium/exam_topics/theoretische_chemie +5 -0
  372. data/lib/studium/exam_topics/theoretische_informatik +157 -0
  373. data/lib/studium/exam_topics/tierzucht +94 -0
  374. data/lib/studium/exam_topics/toxikologie +403 -0
  375. data/lib/studium/exam_topics/transcription +25 -0
  376. data/lib/studium/exam_topics/translation_ribosomes_and_translational_control +138 -0
  377. data/lib/studium/exam_topics/umweltbiotechnologie +58 -0
  378. data/lib/studium/exam_topics/umweltchemie +232 -0
  379. data/lib/studium/exam_topics/urbanism_and_traffic +19 -0
  380. data/lib/studium/exam_topics/vaccines_and_vaccination +234 -0
  381. data/lib/studium/exam_topics/vectors_and_gene_therapy +237 -0
  382. data/lib/studium/exam_topics/verfahrenstechnik +32 -0
  383. data/lib/studium/exam_topics/veterinary_medicine +10 -0
  384. data/lib/studium/exam_topics/vitamine +19 -0
  385. data/lib/studium/exam_topics/wasserkunde +141 -0
  386. data/lib/studium/exam_topics/weinbau +59 -0
  387. data/lib/studium/exam_topics/wissenschaft +17 -0
  388. data/lib/studium/exam_topics/yeast +97 -0
  389. data/lib/studium/exam_topics/zoologie +329 -0
  390. data/lib/studium/exams/afterburn.rb +259 -0
  391. data/lib/studium/exams/ask_exam_from_the_upcoming_exams_pool.rb +166 -0
  392. data/lib/studium/exams/ask_exam_question/answer.rb +103 -0
  393. data/lib/studium/exams/ask_exam_question/ask_exam_question.rb +127 -0
  394. data/lib/studium/exams/ask_exam_question/class_methods.rb +32 -0
  395. data/lib/studium/exams/ask_exam_question/constants.rb +94 -0
  396. data/lib/studium/exams/ask_exam_question/help.rb +55 -0
  397. data/lib/studium/exams/ask_exam_question/initialize.rb +61 -0
  398. data/lib/studium/exams/ask_exam_question/menu.rb +306 -0
  399. data/lib/studium/exams/ask_exam_question/misc.rb +846 -0
  400. data/lib/studium/exams/ask_exam_question/question.rb +66 -0
  401. data/lib/studium/exams/ask_exam_question/reset.rb +69 -0
  402. data/lib/studium/exams/ask_exam_question/run.rb +37 -0
  403. data/lib/studium/exams/ask_exam_question/show.rb +257 -0
  404. data/lib/studium/exams/ask_exam_topic_question.rb +120 -0
  405. data/lib/studium/exams/ask_question_from_alias.rb +138 -0
  406. data/lib/studium/exams/ask_question_from_any_of_the_still_missing_lectures.rb +142 -0
  407. data/lib/studium/exams/ask_question_from_grouped_themes.rb +141 -0
  408. data/lib/studium/exams/ask_question_from_last_topic.rb +108 -0
  409. data/lib/studium/exams/autoinclude.rb +7 -0
  410. data/lib/studium/exams/best_months.rb +79 -0
  411. data/lib/studium/exams/class.rb +125 -0
  412. data/lib/studium/exams/csv/create_csv_passed_exams_file.rb +219 -0
  413. data/lib/studium/exams/cycle.rb +289 -0
  414. data/lib/studium/exams/dataset.rb +88 -0
  415. data/lib/studium/exams/exam_registration_at/constants.rb +49 -0
  416. data/lib/studium/exams/exam_registration_at/exam_registration_at.rb +247 -0
  417. data/lib/studium/exams/exam_registration_at/help.rb +46 -0
  418. data/lib/studium/exams/exam_registration_at/menu.rb +82 -0
  419. data/lib/studium/exams/exam_registration_at/report.rb +108 -0
  420. data/lib/studium/exams/exam_registration_at/reset.rb +49 -0
  421. data/lib/studium/exams/exam_statistics_from_this_file/exam_statistics_from_this_file.rb +137 -0
  422. data/lib/studium/exams/exam_topics.rb +205 -0
  423. data/lib/studium/exams/exams.rb +18 -0
  424. data/lib/studium/exams/exams_this_week.rb +177 -0
  425. data/lib/studium/exams/fix_exam_dates.rb +144 -0
  426. data/lib/studium/exams/last_exams.rb +369 -0
  427. data/lib/studium/exams/lectures_without_exam_entry.rb +164 -0
  428. data/lib/studium/exams/mandatory_continuous_assessment/compare.rb +144 -0
  429. data/lib/studium/exams/mandatory_continuous_assessment/constants.rb +18 -0
  430. data/lib/studium/exams/mandatory_continuous_assessment/help.rb +92 -0
  431. data/lib/studium/exams/mandatory_continuous_assessment/initialize.rb +46 -0
  432. data/lib/studium/exams/mandatory_continuous_assessment/mandatory_continuous_assessment.rb +1098 -0
  433. data/lib/studium/exams/mandatory_continuous_assessment/menu.rb +132 -0
  434. data/lib/studium/exams/mandatory_continuous_assessment/misc.rb +61 -0
  435. data/lib/studium/exams/mandatory_continuous_assessment/reset.rb +60 -0
  436. data/lib/studium/exams/mandatory_continuous_assessment/run.rb +33 -0
  437. data/lib/studium/exams/mandatory_continuous_assessment/set_title_of_the_curriculum.rb +180 -0
  438. data/lib/studium/exams/mandatory_continuous_assessment/show_and_report.rb +139 -0
  439. data/lib/studium/exams/move_the_last_exam_question_to_the_top_of_the_file/move_the_last_exam_question_to_the_top_of_the_file.rb +119 -0
  440. data/lib/studium/exams/n_exams_in_these_topics.rb +409 -0
  441. data/lib/studium/exams/new_questions_per_year.rb +136 -0
  442. data/lib/studium/exams/next_exam.rb +117 -0
  443. data/lib/studium/exams/next_exams.rb +375 -0
  444. data/lib/studium/exams/open_exam_associated_url.rb +149 -0
  445. data/lib/studium/exams/open_last_exam_question_asked_file/initialize.rb +29 -0
  446. data/lib/studium/exams/open_last_exam_question_asked_file/open_last_exam_question_asked_file.rb +120 -0
  447. data/lib/studium/exams/parse_question_answer.rb +315 -0
  448. data/lib/studium/exams/passed_exams.rb +46 -0
  449. data/lib/studium/exams/pruefung.rb +288 -0
  450. data/lib/studium/exams/push_solved_questions_on_top.rb +203 -0
  451. data/lib/studium/exams/question_answer/constants.rb +46 -0
  452. data/lib/studium/exams/question_answer/question_answer.rb +587 -0
  453. data/lib/studium/exams/questions_solved_from_day_to_day.rb +355 -0
  454. data/lib/studium/exams/repeat_last_question.rb +77 -0
  455. data/lib/studium/exams/show_all_passed_exams_of_this_university.rb +248 -0
  456. data/lib/studium/exams/show_backlog_of_exams.rb +140 -0
  457. data/lib/studium/exams/show_next_exams_for.rb +140 -0
  458. data/lib/studium/exams/show_themes/constants.rb +33 -0
  459. data/lib/studium/exams/show_themes/menu.rb +55 -0
  460. data/lib/studium/exams/show_themes/reset.rb +60 -0
  461. data/lib/studium/exams/show_themes/show_themes.rb +527 -0
  462. data/lib/studium/exams/show_upcoming_exams/consider_autogenerating_exam_aliases.rb +170 -0
  463. data/lib/studium/exams/show_upcoming_exams/constants.rb +82 -0
  464. data/lib/studium/exams/show_upcoming_exams/help.rb +33 -0
  465. data/lib/studium/exams/show_upcoming_exams/initialize.rb +71 -0
  466. data/lib/studium/exams/show_upcoming_exams/menu.rb +53 -0
  467. data/lib/studium/exams/show_upcoming_exams/report.rb +195 -0
  468. data/lib/studium/exams/show_upcoming_exams/reset.rb +38 -0
  469. data/lib/studium/exams/show_upcoming_exams/run.rb +20 -0
  470. data/lib/studium/exams/show_upcoming_exams/show_upcoming_exams.rb +488 -0
  471. data/lib/studium/exams/solve_all_questions_from_this_topic.rb +123 -0
  472. data/lib/studium/exams/solved/constants.rb +37 -0
  473. data/lib/studium/exams/solved/help.rb +23 -0
  474. data/lib/studium/exams/solved/menu.rb +36 -0
  475. data/lib/studium/exams/solved/solved.rb +316 -0
  476. data/lib/studium/exams/steop.rb +91 -0
  477. data/lib/studium/exams/unsolve_all_questions_from_this_topic.rb +181 -0
  478. data/lib/studium/exams/upcoming_exams/constants.rb +20 -0
  479. data/lib/studium/exams/upcoming_exams/help.rb +38 -0
  480. data/lib/studium/exams/upcoming_exams/initialize.rb +27 -0
  481. data/lib/studium/exams/upcoming_exams/menu.rb +79 -0
  482. data/lib/studium/exams/upcoming_exams/misc.rb +364 -0
  483. data/lib/studium/exams/upcoming_exams/reset.rb +37 -0
  484. data/lib/studium/exams/upcoming_exams/run.rb +25 -0
  485. data/lib/studium/exams/upcoming_exams/upcoming_exams.rb +32 -0
  486. data/lib/studium/exams/upcoming_exams_at_the_boku/constants.rb +20 -0
  487. data/lib/studium/exams/upcoming_exams_at_the_boku/html.rb +66 -0
  488. data/lib/studium/exams/upcoming_exams_at_the_boku/upcoming_exams_at_the_boku.rb +186 -0
  489. data/lib/studium/exams/upcoming_exams_dataset.rb +243 -0
  490. data/lib/studium/exams/upload_exam_topics.rb +349 -0
  491. data/lib/studium/exams_per_month/colours.rb +81 -0
  492. data/lib/studium/exams_per_month/constants.rb +69 -0
  493. data/lib/studium/exams_per_month/dataset.rb +64 -0
  494. data/lib/studium/exams_per_month/exams_per_month.rb +303 -0
  495. data/lib/studium/exams_per_month/help.rb +72 -0
  496. data/lib/studium/exams_per_month/initialize.rb +39 -0
  497. data/lib/studium/exams_per_month/menu.rb +254 -0
  498. data/lib/studium/exams_per_month/open.rb +134 -0
  499. data/lib/studium/exams_per_month/requires.rb +13 -0
  500. data/lib/studium/exams_per_month/reset.rb +64 -0
  501. data/lib/studium/exams_per_month/run.rb +18 -0
  502. data/lib/studium/exams_per_month/sanitize.rb +129 -0
  503. data/lib/studium/exams_per_month/show_and_report.rb +1278 -0
  504. data/lib/studium/flashcards/flashcards.rb +95 -0
  505. data/lib/studium/graphviz/README.md +4 -0
  506. data/lib/studium/graphviz/bachelor_vector_based_strategies.dot +160 -0
  507. data/lib/studium/graphviz/master_vector_based_strategies.dot +46 -0
  508. data/lib/studium/gui/gtk2/constants.rb +52 -0
  509. data/lib/studium/gui/gtk2/exam_card.rb +199 -0
  510. data/lib/studium/gui/gtk2/flip_card.rb +8 -0
  511. data/lib/studium/gui/gtk2/frame.rb +314 -0
  512. data/lib/studium/gui/gtk2/main_box.rb +187 -0
  513. data/lib/studium/gui/gtk2/module_methods.rb +58 -0
  514. data/lib/studium/gui/gtk2/require_gtk_files.rb +25 -0
  515. data/lib/studium/gui/gtk2/run.rb +49 -0
  516. data/lib/studium/gui/gtk2/show_curriculum_entries.rb +187 -0
  517. data/lib/studium/gui/gtk2/simple_widget_question_answer.rb +186 -0
  518. data/lib/studium/gui/gtk2/vbox.rb +748 -0
  519. data/lib/studium/gui/gtk3/README.md +1 -0
  520. data/lib/studium/gui/gtk3/studium_panel.rb +54 -0
  521. data/lib/studium/lectures/show_lectures_on_the_commandline/constants.rb +22 -0
  522. data/lib/studium/lectures/show_lectures_on_the_commandline/determine.rb +630 -0
  523. data/lib/studium/lectures/show_lectures_on_the_commandline/help.rb +44 -0
  524. data/lib/studium/lectures/show_lectures_on_the_commandline/html.rb +599 -0
  525. data/lib/studium/lectures/show_lectures_on_the_commandline/initialize.rb +53 -0
  526. data/lib/studium/lectures/show_lectures_on_the_commandline/konsole.rb +32 -0
  527. data/lib/studium/lectures/show_lectures_on_the_commandline/menu.rb +466 -0
  528. data/lib/studium/lectures/show_lectures_on_the_commandline/misc.rb +599 -0
  529. data/lib/studium/lectures/show_lectures_on_the_commandline/reset.rb +120 -0
  530. data/lib/studium/lectures/show_lectures_on_the_commandline/run.rb +44 -0
  531. data/lib/studium/lectures/show_lectures_on_the_commandline/show.rb +106 -0
  532. data/lib/studium/lectures/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb +490 -0
  533. data/lib/studium/lectures/show_lectures_on_the_commandline/sorted_individual_curricula.rb +117 -0
  534. data/lib/studium/log/README.md +2 -0
  535. data/lib/studium/log/store_last_question_asked_into_file.rb +152 -0
  536. data/lib/studium/misc/return_remote_homepage_of_this_lecture.rb +8643 -0
  537. data/lib/studium/misc/return_remote_moodle_link_of_this_lecture.rb +1308 -0
  538. data/lib/studium/parsers/README.md +2 -0
  539. data/lib/studium/parsers/custom_exam_results_parser.rb +205 -0
  540. data/lib/studium/parsers/parse_lva_dates.rb +200 -0
  541. data/lib/studium/pdf/README.md +2 -0
  542. data/lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb +258 -0
  543. data/lib/studium/project/project.rb +82 -0
  544. data/lib/studium/requires/base_class_and_common_popular_requires.rb +8 -0
  545. data/lib/studium/requires/common_external_requires.rb +10 -0
  546. data/lib/studium/requires/common_popular_requires.rb +43 -0
  547. data/lib/studium/requires/require_class_exams_solved.rb +7 -0
  548. data/lib/studium/requires/require_ects_scripts.rb +22 -0
  549. data/lib/studium/requires/require_encoding.rb +7 -0
  550. data/lib/studium/requires/require_exam_scripts.rb +32 -0
  551. data/lib/studium/requires/require_the_proper_yaml_engine.rb +7 -0
  552. data/lib/studium/requires/require_the_whole_studium_project.rb +53 -0
  553. data/lib/studium/requires/require_toplevel_methods.rb +25 -0
  554. data/lib/studium/requires/require_upcoming_exams.rb +7 -0
  555. data/lib/studium/requires/require_utility_scripts.rb +23 -0
  556. data/lib/studium/requires/with_GUI.rb +11 -0
  557. data/lib/studium/requires/www_mode.rb +17 -0
  558. data/lib/studium/sanitize/README.md +7 -0
  559. data/lib/studium/sanitize/sanitize_this_string_containing_the_lva_dates.rb +79 -0
  560. data/lib/studium/sinatra/app.rb +257 -0
  561. data/lib/studium/sinatra/misc.rb +40 -0
  562. data/lib/studium/statistics/README.md +4 -0
  563. data/lib/studium/statistics/curriculum_comparer.rb +344 -0
  564. data/lib/studium/statistics/determine_exam_statistics_from_this_file.rb +152 -0
  565. data/lib/studium/statistics/max_stats.rb +167 -0
  566. data/lib/studium/statistics/report_how_many_ects_points_per_curriculum_were_completed.rb +166 -0
  567. data/lib/studium/statistics/report_how_many_exam_questions_were_answered.rb +476 -0
  568. data/lib/studium/statistics/top_stats.rb +144 -0
  569. data/lib/studium/steop/README.md +4 -0
  570. data/lib/studium/steop/show_all_steop_lectures.rb +100 -0
  571. data/lib/studium/steop/steop_lectures_in_this_curriculum.rb +297 -0
  572. data/lib/studium/steop/steop_lva_dates.rb +116 -0
  573. data/lib/studium/toplevel_methods/all_passed_exams.rb +33 -0
  574. data/lib/studium/toplevel_methods/already_solved_this_lecture.rb +94 -0
  575. data/lib/studium/toplevel_methods/already_solved_this_lva_number.rb +226 -0
  576. data/lib/studium/toplevel_methods/available_curricula.rb +71 -0
  577. data/lib/studium/toplevel_methods/available_topics.rb +146 -0
  578. data/lib/studium/toplevel_methods/average_grade.rb +130 -0
  579. data/lib/studium/toplevel_methods/backup_this_exam_file.rb +35 -0
  580. data/lib/studium/toplevel_methods/calculate_pr/303/274fungsimmanente_lectures_from_this_file.rb +55 -0
  581. data/lib/studium/toplevel_methods/cd.rb +25 -0
  582. data/lib/studium/toplevel_methods/cd_stud.rb +133 -0
  583. data/lib/studium/toplevel_methods/copy_file.rb +22 -0
  584. data/lib/studium/toplevel_methods/copy_lecture_information_file_to_default_location.rb +52 -0
  585. data/lib/studium/toplevel_methods/create_file.rb +22 -0
  586. data/lib/studium/toplevel_methods/current_exams.rb +20 -0
  587. data/lib/studium/toplevel_methods/datum.rb +16 -0
  588. data/lib/studium/toplevel_methods/determine_local_directory_of_this_lecture.rb +72 -0
  589. data/lib/studium/toplevel_methods/does_this_course_require_mandatory_presence.rb +45 -0
  590. data/lib/studium/toplevel_methods/download_exam_dataset.rb +108 -0
  591. data/lib/studium/toplevel_methods/download_exam_topics.rb +62 -0
  592. data/lib/studium/toplevel_methods/e.rb +16 -0
  593. data/lib/studium/toplevel_methods/ects_from_lectures.rb +249 -0
  594. data/lib/studium/toplevel_methods/editor.rb +64 -0
  595. data/lib/studium/toplevel_methods/esystem.rb +20 -0
  596. data/lib/studium/toplevel_methods/exams_dataset.rb +45 -0
  597. data/lib/studium/toplevel_methods/file_cd_aliases.rb +26 -0
  598. data/lib/studium/toplevel_methods/file_read_with_proper_encoding.rb +28 -0
  599. data/lib/studium/toplevel_methods/filter_away_invalid_questions.rb +77 -0
  600. data/lib/studium/toplevel_methods/find_corresponding_exam_title.rb +707 -0
  601. data/lib/studium/toplevel_methods/find_corresponding_exam_topic.rb +1834 -0
  602. data/lib/studium/toplevel_methods/from_curriculum_id_to_university.rb +47 -0
  603. data/lib/studium/toplevel_methods/frozen.rb +32 -0
  604. data/lib/studium/toplevel_methods/handle_archive_of_the_exam_questions.rb +136 -0
  605. data/lib/studium/toplevel_methods/has_a_bachelor_curriculum.rb +24 -0
  606. data/lib/studium/toplevel_methods/has_a_master_curriculum.rb +69 -0
  607. data/lib/studium/toplevel_methods/has_this_lecture_been_already_passed_but_the_id_was_changed_lateron.rb +39 -0
  608. data/lib/studium/toplevel_methods/has_this_module_been_completed.rb +206 -0
  609. data/lib/studium/toplevel_methods/html_log_dir.rb +2 -0
  610. data/lib/studium/toplevel_methods/install_the_project_on_the_given_hostsystem.rb +33 -0
  611. data/lib/studium/toplevel_methods/is_on_roebe.rb +19 -0
  612. data/lib/studium/toplevel_methods/is_this_exam_topic_included.rb +37 -0
  613. data/lib/studium/toplevel_methods/is_this_homepage_registered.rb +31 -0
  614. data/lib/studium/toplevel_methods/is_this_lecture_a_practical_course.rb +100 -0
  615. data/lib/studium/toplevel_methods/is_this_lecture_part_of_the_vector_curriculum.rb +110 -0
  616. data/lib/studium/toplevel_methods/is_this_lecture_registered_in_upcoming_exams.rb +43 -0
  617. data/lib/studium/toplevel_methods/ja_oder_nein.rb +21 -0
  618. data/lib/studium/toplevel_methods/last_saved_into_which_file.rb +29 -0
  619. data/lib/studium/toplevel_methods/lecture_information.rb +22 -0
  620. data/lib/studium/toplevel_methods/lectures_without_attribution_to_any_curriculum.rb +40 -0
  621. data/lib/studium/toplevel_methods/main_dataset.rb +52 -0
  622. data/lib/studium/toplevel_methods/map_curriculum_number_to_curriculum_name.rb +96 -0
  623. data/lib/studium/toplevel_methods/map_meta_exam_theme_to_corresponding_exam_themes.rb +162 -0
  624. data/lib/studium/toplevel_methods/misc.rb +187 -0
  625. data/lib/studium/toplevel_methods/missing_priority_entry.rb +42 -0
  626. data/lib/studium/toplevel_methods/mkdir.rb +21 -0
  627. data/lib/studium/toplevel_methods/module_methods.rb +23 -0
  628. data/lib/studium/toplevel_methods/n_questions_available.rb +124 -0
  629. data/lib/studium/toplevel_methods/n_topics_available.rb +63 -0
  630. data/lib/studium/toplevel_methods/name_of_this_curriculum.rb +38 -0
  631. data/lib/studium/toplevel_methods/names_of_all_solved_exams.rb +71 -0
  632. data/lib/studium/toplevel_methods/no_file_exists_at.rb +19 -0
  633. data/lib/studium/toplevel_methods/note_down_the_start_time_and_how_many_exams_have_been_already_solved.rb +70 -0
  634. data/lib/studium/toplevel_methods/opnn.rb +22 -0
  635. data/lib/studium/toplevel_methods/passed_this_exam_on.rb +104 -0
  636. data/lib/studium/toplevel_methods/pristine.rb +59 -0
  637. data/lib/studium/toplevel_methods/read_dataset_from_a_curriculum_file.rb +133 -0
  638. data/lib/studium/toplevel_methods/read_delay_between_questions_from_file.rb +33 -0
  639. data/lib/studium/toplevel_methods/read_this_file_through_default_encoding.rb +26 -0
  640. data/lib/studium/toplevel_methods/regex_for_pwd_stud.rb +18 -0
  641. data/lib/studium/toplevel_methods/registered_for_this_exam.rb +62 -0
  642. data/lib/studium/toplevel_methods/remote_url.rb +57 -0
  643. data/lib/studium/toplevel_methods/remove_comments.rb +26 -0
  644. data/lib/studium/toplevel_methods/remove_exam_topics_that_were_already_answered.rb +27 -0
  645. data/lib/studium/toplevel_methods/remove_tags.rb +17 -0
  646. data/lib/studium/toplevel_methods/remove_weekday_names.rb +75 -0
  647. data/lib/studium/toplevel_methods/report_all_lectures_matching_this_lecture_type.rb +44 -0
  648. data/lib/studium/toplevel_methods/report_attributed_lectures_to_universities.rb +30 -0
  649. data/lib/studium/toplevel_methods/report_how_many_exam_questions_were_already_solved.rb +137 -0
  650. data/lib/studium/toplevel_methods/report_n_ects_per_university.rb +63 -0
  651. data/lib/studium/toplevel_methods/report_n_entries_in_the_file_lecture_information.rb +35 -0
  652. data/lib/studium/toplevel_methods/report_nquestions_of.rb +96 -0
  653. data/lib/studium/toplevel_methods/report_solved_topics.rb +55 -0
  654. data/lib/studium/toplevel_methods/return_all_exams_on_this_day.rb +66 -0
  655. data/lib/studium/toplevel_methods/return_curriculum_of_this_lva_number.rb +79 -0
  656. data/lib/studium/toplevel_methods/return_dataset_for_this_exam_topic.rb +41 -0
  657. data/lib/studium/toplevel_methods/return_dataset_from_this_curriculum_file.rb +150 -0
  658. data/lib/studium/toplevel_methods/return_directory_for.rb +66 -0
  659. data/lib/studium/toplevel_methods/return_div_timetable_of_upcoming_exams.rb +489 -0
  660. data/lib/studium/toplevel_methods/return_ects_from_this_lecture_stored_in_the_file_lecture_information.rb +194 -0
  661. data/lib/studium/toplevel_methods/return_hash_of_already_solved_lectures.rb +38 -0
  662. data/lib/studium/toplevel_methods/return_local_path_of_this_pwdstud.rb +61 -0
  663. data/lib/studium/toplevel_methods/return_location_to_this_exam_topic.rb +28 -0
  664. data/lib/studium/toplevel_methods/return_lva_number_of_this_curriculum.rb +74 -0
  665. data/lib/studium/toplevel_methods/return_lva_number_of_this_lecture.rb +486 -0
  666. data/lib/studium/toplevel_methods/return_lva_number_of_this_lecture_based_on_file_lecture_information.rb +58 -0
  667. data/lib/studium/toplevel_methods/return_n_percent_solved_from_this_topic.rb +75 -0
  668. data/lib/studium/toplevel_methods/return_n_questions_were_answered_for_this_topic.rb +37 -0
  669. data/lib/studium/toplevel_methods/return_proper_university_image.rb +79 -0
  670. data/lib/studium/toplevel_methods/return_question_answer_string_from_this_topic.rb +51 -0
  671. data/lib/studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb +124 -0
  672. data/lib/studium/toplevel_methods/return_theme_of_the_next_upcoming_exam.rb +36 -0
  673. data/lib/studium/toplevel_methods/return_this_curriculum_as_a_string.rb +26 -0
  674. data/lib/studium/toplevel_methods/return_title_from_this_curriculum_file.rb +86 -0
  675. data/lib/studium/toplevel_methods/rinstall2.rb +30 -0
  676. data/lib/studium/toplevel_methods/rti_conflict.rb +29 -0
  677. data/lib/studium/toplevel_methods/runmode.rb +81 -0
  678. data/lib/studium/toplevel_methods/sanitize_this_theme_topic.rb +120 -0
  679. data/lib/studium/toplevel_methods/sanitized_dataset_from_file_passed_exams_per_month.rb +44 -0
  680. data/lib/studium/toplevel_methods/save_all_registered_upcoming_exams.rb +60 -0
  681. data/lib/studium/toplevel_methods/save_file.rb +54 -0
  682. data/lib/studium/toplevel_methods/save_this_delay_between_questions_and_answers.rb +43 -0
  683. data/lib/studium/toplevel_methods/set_last_file_for_exam_questions.rb +64 -0
  684. data/lib/studium/toplevel_methods/set_this_cd_alias_to.rb +83 -0
  685. data/lib/studium/toplevel_methods/show_exam_statistics.rb +60 -0
  686. data/lib/studium/toplevel_methods/show_important_files.rb +34 -0
  687. data/lib/studium/toplevel_methods/show_passed_ects_in_the_individual_bachelor_and_master_curricula.rb +81 -0
  688. data/lib/studium/toplevel_methods/show_passed_exams_having_this_grade.rb +28 -0
  689. data/lib/studium/toplevel_methods/spacer.rb +16 -0
  690. data/lib/studium/toplevel_methods/time.rb +123 -0
  691. data/lib/studium/toplevel_methods/total_ects_points_passed.rb +72 -0
  692. data/lib/studium/toplevel_methods/try_to_guess_the_most_likely_lva_id.rb +57 -0
  693. data/lib/studium/toplevel_methods/try_to_report_exams_that_match_to_this_regexp.rb +82 -0
  694. data/lib/studium/toplevel_methods/try_to_return_the_expanded_name_of_this_lecture.rb +62 -0
  695. data/lib/studium/toplevel_methods/unfinished.rb +50 -0
  696. data/lib/studium/toplevel_methods/url.rb +54 -0
  697. data/lib/studium/toplevel_methods/verbose_truth.rb +18 -0
  698. data/lib/studium/toplevel_methods/when_was_this_lecture_passed.rb +51 -0
  699. data/lib/studium/tu_vienna/README.md +6 -0
  700. data/lib/studium/tu_vienna/tu_ferien.rb +34 -0
  701. data/lib/studium/tu_vienna/tu_/303/266ffnungszeiten.rb +29 -0
  702. data/lib/studium/utility_scripts/ask_random_question.rb +202 -0
  703. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_boku_lecture_to_curriculum.rb +390 -0
  704. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_lecture_to_curriculum.rb +232 -0
  705. data/lib/studium/utility_scripts/attribute_lectures_to_university/attribute_lectures_to_university.rb +380 -0
  706. data/lib/studium/utility_scripts/audio_stats.rb +176 -0
  707. data/lib/studium/utility_scripts/auto_stud/auto_stud.rb +248 -0
  708. data/lib/studium/utility_scripts/auto_stud/constants.rb +20 -0
  709. data/lib/studium/utility_scripts/auto_stud/initialize.rb +20 -0
  710. data/lib/studium/utility_scripts/auto_stud/misc.rb +25 -0
  711. data/lib/studium/utility_scripts/autopurge_this_lecture_date.rb +116 -0
  712. data/lib/studium/utility_scripts/boku_biotechnology_all_master_lectures.rb +140 -0
  713. data/lib/studium/utility_scripts/calendar/README.md +2 -0
  714. data/lib/studium/utility_scripts/calendar/calendar.rb +240 -0
  715. data/lib/studium/utility_scripts/check_description_of_these_lectures.rb +223 -0
  716. data/lib/studium/utility_scripts/clean_up_lecture_date.rb +149 -0
  717. data/lib/studium/utility_scripts/current_lectures_belonging_to_both_bachelor_and_master_curriculum.rb +102 -0
  718. data/lib/studium/utility_scripts/currently_participating_in_these_lectures.rb +95 -0
  719. data/lib/studium/utility_scripts/display_lecture_url.rb +115 -0
  720. data/lib/studium/utility_scripts/expand_time_range.rb +400 -0
  721. data/lib/studium/utility_scripts/find_duplicate_lectures.rb +113 -0
  722. data/lib/studium/utility_scripts/finished_exams_at_this_university.rb +81 -0
  723. data/lib/studium/utility_scripts/foreign_language_percentage/constants.rb +28 -0
  724. data/lib/studium/utility_scripts/foreign_language_percentage/foreign_language_percentage.rb +156 -0
  725. data/lib/studium/utility_scripts/foreign_language_percentage/initialize.rb +25 -0
  726. data/lib/studium/utility_scripts/foreign_language_percentage/menu.rb +113 -0
  727. data/lib/studium/utility_scripts/foreign_language_percentage/report.rb +62 -0
  728. data/lib/studium/utility_scripts/foreign_language_percentage/reset.rb +57 -0
  729. data/lib/studium/utility_scripts/foreign_language_percentage/run.rb +19 -0
  730. data/lib/studium/utility_scripts/generate_regex.rb +296 -0
  731. data/lib/studium/utility_scripts/generate_regexes_for_the_available_moodle_links/generate_regexes_for_the_available_moodle_links.rb +54 -0
  732. data/lib/studium/utility_scripts/generate_regexes_for_the_registered_lectures/generate_regexes_for_the_registered_lectures.rb +48 -0
  733. data/lib/studium/utility_scripts/generate_spreadsheet.rb +370 -0
  734. data/lib/studium/utility_scripts/holidays.rb +135 -0
  735. data/lib/studium/utility_scripts/lecture_downloader.rb +114 -0
  736. data/lib/studium/utility_scripts/lectures_attributed_to_universities.rb +345 -0
  737. data/lib/studium/utility_scripts/mandatory_lectures_in_this_month.rb +310 -0
  738. data/lib/studium/utility_scripts/name_of_this_lva_id.rb +117 -0
  739. data/lib/studium/utility_scripts/new_stud.rb +320 -0
  740. data/lib/studium/utility_scripts/next_week.rb +111 -0
  741. data/lib/studium/utility_scripts/passed_ects_per_year.rb +172 -0
  742. data/lib/studium/utility_scripts/passed_pr/303/274fungsimmanente_courses/passed_pr/303/274fungsimmanente_courses.rb +172 -0
  743. data/lib/studium/utility_scripts/prepare_individual_curriculum.rb +179 -0
  744. data/lib/studium/utility_scripts/priority.rb +118 -0
  745. data/lib/studium/utility_scripts/priority_points.rb +263 -0
  746. data/lib/studium/utility_scripts/publish_my_exams.rb +185 -0
  747. data/lib/studium/utility_scripts/random_curriculum_creator.rb +173 -0
  748. data/lib/studium/utility_scripts/report_outdated_timetable_entries.rb +145 -0
  749. data/lib/studium/utility_scripts/report_total_amount_of_questions_and_answers_for.rb +114 -0
  750. data/lib/studium/utility_scripts/report_whether_this_lecture_is_registered_in_the_file_lecture_information.rb +120 -0
  751. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/individual_resolve_practical_courses_date_conflicts.rb +255 -0
  752. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/resolve_practical_courses_date_conflicts.rb +278 -0
  753. data/lib/studium/utility_scripts/scrape_remote_university_url.rb +137 -0
  754. data/lib/studium/utility_scripts/semester_schedule_creator/semester_container.rb +155 -0
  755. data/lib/studium/utility_scripts/semester_schedule_creator/semester_schedule_creator.rb +399 -0
  756. data/lib/studium/utility_scripts/semesterplaner.rb +275 -0
  757. data/lib/studium/utility_scripts/show_all_lectures.rb +407 -0
  758. data/lib/studium/utility_scripts/show_all_passed_master_lectures.rb +141 -0
  759. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/constants.rb +56 -0
  760. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/do_report_the_upcoming_exams.rb +60 -0
  761. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/help.rb +48 -0
  762. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/initialize.rb +28 -0
  763. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/menu.rb +54 -0
  764. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/misc.rb +214 -0
  765. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/report.rb +115 -0
  766. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/reset.rb +80 -0
  767. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/run.rb +22 -0
  768. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/show_conflicting_lva_lectures.rb +641 -0
  769. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/constants.rb +28 -0
  770. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/menu.rb +62 -0
  771. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/reset.rb +36 -0
  772. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/run.rb +35 -0
  773. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/show_descriptions_of_lectures_belonging_to_this_module.rb +145 -0
  774. data/lib/studium/utility_scripts/show_lecturers/show_lecturers.rb +164 -0
  775. data/lib/studium/utility_scripts/show_lectures/constants.rb +16 -0
  776. data/lib/studium/utility_scripts/show_lectures/help.rb +34 -0
  777. data/lib/studium/utility_scripts/show_lectures/initialize.rb +23 -0
  778. data/lib/studium/utility_scripts/show_lectures/menu.rb +106 -0
  779. data/lib/studium/utility_scripts/show_lectures/misc.rb +573 -0
  780. data/lib/studium/utility_scripts/show_lectures/reset.rb +92 -0
  781. data/lib/studium/utility_scripts/show_lectures/run.rb +27 -0
  782. data/lib/studium/utility_scripts/show_lectures/show_lectures.rb +48 -0
  783. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_language.rb +129 -0
  784. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_theme.rb +122 -0
  785. data/lib/studium/utility_scripts/show_lectures_of_this_curriculum_as_table/commandline.rb +43 -0
  786. data/lib/studium/utility_scripts/show_lectures_of_this_curriculum_as_table/constants.rb +26 -0
  787. data/lib/studium/utility_scripts/show_lectures_of_this_curriculum_as_table/help.rb +39 -0
  788. data/lib/studium/utility_scripts/show_lectures_of_this_curriculum_as_table/html.rb +95 -0
  789. data/lib/studium/utility_scripts/show_lectures_of_this_curriculum_as_table/initialize.rb +36 -0
  790. data/lib/studium/utility_scripts/show_lectures_of_this_curriculum_as_table/menu.rb +92 -0
  791. data/lib/studium/utility_scripts/show_lectures_of_this_curriculum_as_table/reset.rb +28 -0
  792. data/lib/studium/utility_scripts/show_lectures_of_this_curriculum_as_table/run.rb +21 -0
  793. data/lib/studium/utility_scripts/show_lectures_of_this_curriculum_as_table/show_lectures_of_this_curriculum_as_table.rb +205 -0
  794. data/lib/studium/utility_scripts/show_lectures_on_this_day.rb +152 -0
  795. data/lib/studium/utility_scripts/show_lva_dates_of_this_lecture.rb +175 -0
  796. data/lib/studium/utility_scripts/show_outdated_lva_dates.rb +218 -0
  797. data/lib/studium/utility_scripts/show_solved_english_lectures.rb +139 -0
  798. data/lib/studium/utility_scripts/show_the_associated_lectures_for_the_individual_curriculum.rb +286 -0
  799. data/lib/studium/utility_scripts/studienkennzahl.rb +104 -0
  800. data/lib/studium/utility_scripts/studium_skeleton.rb +221 -0
  801. data/lib/studium/utility_scripts/stundenplan.rb +605 -0
  802. data/lib/studium/utility_scripts/sync_studium_relevant_entries_one_level_downwards.rb +224 -0
  803. data/lib/studium/utility_scripts/ufind.rb +118 -0
  804. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/constants.rb +28 -0
  805. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/upcoming_mandatory_presence_courses.rb +182 -0
  806. data/lib/studium/utility_scripts/vorbesprechungen.rb +295 -0
  807. data/lib/studium/utility_scripts/week_parser/constants.rb +30 -0
  808. data/lib/studium/utility_scripts/week_parser/help.rb +30 -0
  809. data/lib/studium/utility_scripts/week_parser/menu.rb +56 -0
  810. data/lib/studium/utility_scripts/week_parser/misc.rb +73 -0
  811. data/lib/studium/utility_scripts/week_parser/reset.rb +39 -0
  812. data/lib/studium/utility_scripts/week_parser/run.rb +18 -0
  813. data/lib/studium/utility_scripts/week_parser/show.rb +240 -0
  814. data/lib/studium/utility_scripts/week_parser/week_parser.rb +359 -0
  815. data/lib/studium/utility_scripts/weekday_parser.rb +157 -0
  816. data/lib/studium/utility_scripts/weekly_schedule.rb +217 -0
  817. data/lib/studium/utility_scripts/wochenplanung.rb +275 -0
  818. data/lib/studium/version/version.rb +46 -0
  819. data/lib/studium/www/curricula_displayer.cgi +172 -0
  820. data/lib/studium/www/curriculum_displayer.rb +162 -0
  821. data/lib/studium/www/exams.cgi +50 -0
  822. data/lib/studium/www/statistics.cgi +53 -0
  823. data/lib/studium/yaml/allowed_themes_for_exams.yml +244 -0
  824. data/lib/studium/yaml/array_allowed_entries_for_the_file_lecture_information.yml +64 -0
  825. data/lib/studium/yaml/backlog_of_exams.yml +35 -0
  826. data/lib/studium/yaml/current_exams.yml +19 -0
  827. data/lib/studium/yaml/curricula.yml +530 -0
  828. data/lib/studium/yaml/curricula/README.md +3 -0
  829. data/lib/studium/yaml/curricula/bachelor_agrarwissenschaften_033255.yml +130 -0
  830. data/lib/studium/yaml/curricula/bachelor_biologie_basisblock_033630.yml +65 -0
  831. data/lib/studium/yaml/curricula/bachelor_biologie_botanik_033630.yml +84 -0
  832. data/lib/studium/yaml/curricula/bachelor_biologie_ecology_033630.yml +74 -0
  833. data/lib/studium/yaml/curricula/bachelor_biologie_mikrobiologie_und_genetik_033630.yml +120 -0
  834. data/lib/studium/yaml/curricula/bachelor_biologie_molekulare_biologie_033630.yml +104 -0
  835. data/lib/studium/yaml/curricula/bachelor_biologie_zoologie_033630.yml +87 -0
  836. data/lib/studium/yaml/curricula/bachelor_chemie_033662.yml +164 -0
  837. data/lib/studium/yaml/curricula/bachelor_dummy_curriculum.yml +135 -0
  838. data/lib/studium/yaml/curricula/bachelor_elektrotechnik_und_informationstechnik_033235.yml +13 -0
  839. data/lib/studium/yaml/curricula/bachelor_forstwirtschaft_033225.yml +105 -0
  840. data/lib/studium/yaml/curricula/bachelor_informatik_033521.yml +130 -0
  841. data/lib/studium/yaml/curricula/bachelor_informatik_und_molekulare_biologie.yml +1144 -0
  842. data/lib/studium/yaml/curricula/bachelor_ktww_033231.yml +84 -0
  843. data/lib/studium/yaml/curricula/bachelor_lmbt_033217.yml +108 -0
  844. data/lib/studium/yaml/curricula/bachelor_medizinische_informatik_033533.yml +200 -0
  845. data/lib/studium/yaml/curricula/bachelor_molekularbiologie_033665.yml +93 -0
  846. data/lib/studium/yaml/curricula/bachelor_nutrition_science_033638.yml +117 -0
  847. data/lib/studium/yaml/curricula/bachelor_pharmazie_033305.yml +170 -0
  848. data/lib/studium/yaml/curricula/bachelor_technische_chemie_033290.yml +129 -0
  849. data/lib/studium/yaml/curricula/bachelor_technische_informatik_033535.yml +23 -0
  850. data/lib/studium/yaml/curricula/bachelor_ubrm_033227.yml +140 -0
  851. data/lib/studium/yaml/curricula/bachelor_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +1157 -0
  852. data/lib/studium/yaml/curricula/bachelor_verfahrenstechnik_033273.yml +167 -0
  853. data/lib/studium/yaml/curricula/bachelor_wirtschaftsinformatik_033526.yml +29 -0
  854. data/lib/studium/yaml/curricula/master_bioinformatics_and_molecular_biotechnology_including_aspects_from_molecular_medicine.yml +438 -0
  855. data/lib/studium/yaml/curricula/master_bioinformatik_066875.yml +76 -0
  856. data/lib/studium/yaml/curricula/master_biologie_molekulare_mikrobiologie_mikrobielle_oekologie_und_immunbiologie_066830.yml +78 -0
  857. data/lib/studium/yaml/curricula/master_biologische_chemie_066863.yml +61 -0
  858. data/lib/studium/yaml/curricula/master_dummy_curriculum.yml +137 -0
  859. data/lib/studium/yaml/curricula/master_food_science_and_plant_biotechnology.yml +30 -0
  860. data/lib/studium/yaml/curricula/master_genetik_und_entwicklungsbiologie_066877.yml +90 -0
  861. data/lib/studium/yaml/curricula/master_lmbt_066418.yml +65 -0
  862. data/lib/studium/yaml/curricula/master_molekulare_biologie_066834.yml +142 -0
  863. data/lib/studium/yaml/curricula/master_pharmazie_066605.yml +170 -0
  864. data/lib/studium/yaml/curricula/master_technische_chemie_066490.yml +123 -0
  865. data/lib/studium/yaml/curricula/master_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +740 -0
  866. data/lib/studium/yaml/custom_colours.yml +17 -0
  867. data/lib/studium/yaml/daily_questions_solved.yml +909 -0
  868. data/lib/studium/yaml/default_delay.yml +4 -0
  869. data/lib/studium/yaml/default_encoding.yml +1 -0
  870. data/lib/studium/yaml/directory_to_the_exam_topics.yml +0 -0
  871. data/lib/studium/yaml/editor.yml +1 -0
  872. data/lib/studium/yaml/file_for_exam_questions.yml +1 -0
  873. data/lib/studium/yaml/german/README.md +2 -0
  874. data/lib/studium/yaml/german/german_to_english_month_names.yml +12 -0
  875. data/lib/studium/yaml/grouped_themes.yml +187 -0
  876. data/lib/studium/yaml/holidays.yml +177 -0
  877. data/lib/studium/yaml/important_exams.yml +192 -0
  878. data/lib/studium/yaml/inscription_dates_of_universities.yml +56 -0
  879. data/lib/studium/yaml/lecture_aliases.yml +108 -0
  880. data/lib/studium/yaml/lecture_information.yml +47796 -0
  881. data/lib/studium/yaml/log_dir.yml +1 -0
  882. data/lib/studium/yaml/main_topic.yml +11 -0
  883. data/lib/studium/yaml/max_stats.yml +227 -0
  884. data/lib/studium/yaml/mitteilungsbl/303/244tter.yml +315 -0
  885. data/lib/studium/yaml/n_total_questions.yml +1 -0
  886. data/lib/studium/yaml/participating_in_these_courses.yml +44 -0
  887. data/lib/studium/yaml/rename_konsole_tab.yml +1 -0
  888. data/lib/studium/yaml/show_topic.yml +1 -0
  889. data/lib/studium/yaml/statistics.yml +57 -0
  890. data/lib/studium/yaml/use_colours.yml +1 -0
  891. data/studium.gemspec +93 -0
  892. data/test/testing_studium.rb +243 -0
  893. data/test/testing_time_component.rb +29 -0
  894. metadata +1131 -0
@@ -0,0 +1,194 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # The file here obtains the amount of ECTS points stored in the file
6
+ # lecture_information.yml.
7
+ #
8
+ # Another method exists, in the file called "ects_from_lectures.rb", but
9
+ # that file only obtains the amount of ECTS points from already passed
10
+ # lectures. So the method here is more flexible and should ideally be
11
+ # used in the future.
12
+ #
13
+ # In the long run, it will probably become the default method if one wants
14
+ # to obtain the amount of ECTS from a given lecture, but for now, we will
15
+ # also retain the old way.
16
+ # =========================================================================== #
17
+ # require 'studium/toplevel_methods/return_ects_from_this_lecture_stored_in_the_file_lecture_information.rb'
18
+ # =========================================================================== #
19
+ require 'studium/constants/file_constants.rb'
20
+ require 'studium/requires/require_encoding.rb'
21
+ require 'studium/toplevel_methods/e.rb'
22
+ require 'studium/toplevel_methods/main_dataset.rb'
23
+ require 'studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb'
24
+
25
+ module Studium
26
+
27
+ # ========================================================================= #
28
+ # === Studium.return_ects_from_this_lecture_stored_in_the_file_lecture_information
29
+ #
30
+ # The first input argument should be the name of the lecture at hand,
31
+ # such as "Programmierpraktikum".
32
+ #
33
+ # The second argument is optional, and can be used to specify the
34
+ # lecture-id precisely (the LVA id number). If specified then the
35
+ # method will require a hard match to the given lecture.
36
+ #
37
+ # The second argument can be either :exact or :partial, with :exact
38
+ # being the default. It means that the right name has to be used
39
+ # in order to return the full dataset; if :partial is used, then
40
+ # any partial substring will be used.
41
+ # ========================================================================= #
42
+ def self.return_ects_from_this_lecture_stored_in_the_file_lecture_information(
43
+ name_of_the_lecture,
44
+ optional_id_of_the_lecture = nil,
45
+ partial_or_exact_match = :exact
46
+ )
47
+ case optional_id_of_the_lecture
48
+ when :default
49
+ optional_id_of_the_lecture = nil # This is the default value.
50
+ end
51
+ if name_of_the_lecture.is_a? Array
52
+ n_ects_points = name_of_the_lecture.map {|entry|
53
+ # =================================================================== #
54
+ # In this case, do a recursive-calling operation.
55
+ # =================================================================== #
56
+ return_ects_from_this_lecture_stored_in_the_file_lecture_information(
57
+ entry,
58
+ optional_id_of_the_lecture,
59
+ partial_or_exact_match
60
+ )
61
+ }
62
+ if n_ects_points.is_a? Array
63
+ n_ects_points = n_ects_points.sum
64
+ end
65
+ n_ects_points
66
+ else
67
+ n_ects_points = 0 # <- Default value.
68
+ if name_of_the_lecture.end_with? ','
69
+ name_of_the_lecture = name_of_the_lecture.dup if name_of_the_lecture.frozen?
70
+ name_of_the_lecture.chop!
71
+ end
72
+ name_of_the_lecture = name_of_the_lecture.dup if name_of_the_lecture.frozen?
73
+ name_of_the_lecture.squeeze!(' ') # We don't need more than one ' '.
74
+ _ = FILE_LECTURE_INFORMATION
75
+ if ::Studium.main_dataset?
76
+ dataset = ::Studium.main_dataset?
77
+ else
78
+ if File.exist? _
79
+ dataset = Studium.return_sanitized_dataset_from_the_file_lecture_information
80
+ else
81
+ e 'No file called '+sfile(_)+' exists. Exiting now.'
82
+ exit
83
+ end
84
+ end
85
+ dataset_from_lecture_aliases = ensure_main_encoding(
86
+ YAML.load_file(FILE_LECTURE_ALIASES)
87
+ )
88
+ pointer_to_dataset = dataset_from_lecture_aliases[name_of_the_lecture]
89
+ if optional_id_of_the_lecture and pointer_to_dataset
90
+ if pointer_to_dataset.has_key?(:new_lva_id) and
91
+ (pointer_to_dataset[:old_lva_id] == optional_id_of_the_lecture)
92
+ # ================================================================= #
93
+ # We must re-write to the new LVA id because the file called
94
+ # "lecture_information.yml" will only store up-to-date entries.
95
+ # ================================================================= #
96
+ optional_id_of_the_lecture = pointer_to_dataset[:new_lva_id]
97
+ end
98
+ end
99
+ # ===================================================================== #
100
+ # We will next try to find a corresponding match - but obviously,
101
+ # no such match may exist, so we need to include this possibility
102
+ # in the following checks as well.
103
+ # ===================================================================== #
104
+ if optional_id_of_the_lecture
105
+ optional_id_of_the_lecture = Studium.ensure_main_encoding(optional_id_of_the_lecture)
106
+ end
107
+ if optional_id_of_the_lecture
108
+ possible_matches = dataset.select {|key, value|
109
+ key = Studium.ensure_main_encoding(key)
110
+ # ================================================================= #
111
+ # Next, we must anchor this key to one of the lecture. We have to
112
+ # distinguish between empty LVA-IDs and non-empty variants.
113
+ # ================================================================= #
114
+ if optional_id_of_the_lecture.empty?
115
+ key =~ /^#{Regexp.quote(name_of_the_lecture)}$/
116
+ else
117
+ key =~ /^#{optional_id_of_the_lecture} #{Regexp.quote(name_of_the_lecture)}$/
118
+ end
119
+ }
120
+ else # Ok, no LVA-ID was provided, so we have to try to find a match nonetheless.
121
+ possible_matches = dataset.select {|key, value|
122
+ # ================================================================= #
123
+ # Next, Regexp.quote() may start with a ' ' or not.
124
+ # If it starts with a ' ' then a few lectures may not
125
+ # be found, such as the lecture:
126
+ # "Modul BIOINF01b Basiswissen Informatik f�r die Bioinformatik":
127
+ # ================================================================= #
128
+ this_string = Regexp.quote("#{name_of_the_lecture}")
129
+ key =~ /#{this_string}$/ # Anchor it to a regex.
130
+ }
131
+ if possible_matches.empty?
132
+ # ================================================================= #
133
+ # In this case, we will try again with the first character
134
+ # being upcased.
135
+ # ================================================================= #
136
+ name_of_the_lecture = name_of_the_lecture.dup if name_of_the_lecture.frozen?
137
+ name_of_the_lecture[0,1] = name_of_the_lecture[0,1].upcase
138
+ possible_matches = dataset.select {|key, value|
139
+ this_string = Regexp.quote(" #{name_of_the_lecture}")
140
+ key =~ /#{this_string}$/ # Anchor it to a regex.
141
+ }
142
+ end
143
+ if possible_matches.empty? and
144
+ (partial_or_exact_match == :partial)
145
+ # ================================================================= #
146
+ # Next, we can still try a partial match.
147
+ # ================================================================= #
148
+ possible_keys = dataset.keys.select {|key, value|
149
+ regexp = / #{name_of_the_lecture}/i
150
+ key =~ regexp
151
+ }
152
+ possible_matches = dataset.select {|key, value|
153
+ possible_keys.include? key
154
+ }
155
+ end
156
+ end
157
+ unless possible_matches.empty?
158
+ # =================================================================== #
159
+ # Ok, we found a match then.
160
+ # =================================================================== #
161
+ ects_points_of_this_lecture = possible_matches.values.first[:ects]
162
+ n_ects_points += ects_points_of_this_lecture
163
+ end
164
+ return n_ects_points
165
+ end
166
+ end; self.instance_eval {
167
+ alias return_n_ects_points_from_this_lecture return_ects_from_this_lecture_stored_in_the_file_lecture_information
168
+ alias return_n_ects_of_this_lecture_based_on_the_file_lecture_information return_ects_from_this_lecture_stored_in_the_file_lecture_information
169
+ } # === Studium.return_n_ects_points_from_this_lecture
170
+ # === Studium.return_n_ects_of_this_lecture_based_on_the_file_lecture_information
171
+
172
+ end
173
+
174
+ if __FILE__ == $PROGRAM_NAME
175
+ if ARGV.size > 1
176
+ pp Studium.return_ects_from_this_lecture_stored_in_the_file_lecture_information(
177
+ ARGV[0],ARGV[1], :partial
178
+ )
179
+ else
180
+ pp Studium.return_ects_from_this_lecture_stored_in_the_file_lecture_information(
181
+ ARGV,
182
+ :default,
183
+ :partial
184
+ )
185
+ end
186
+ end # lvaects "Allgemeine und molekulare Mikrobiologie II"
187
+ # lvaects "Allgemeine und molekulare Mikrobiologie II", '301211'
188
+ # lvaects "(Biochemie) Biologische Chemie I"
189
+ # lvaects "(Biochemie) Biologische Chemie I", '270005'
190
+ # lvaects "(Biochemie) Biologische Chemie I", '270006'
191
+ # lvaects Programmierpraktikum
192
+ # lvaects programmierpraktikum
193
+ # lvaects programmierpra
194
+ # lvaects "Modul BIOINF01b Basiswissen Informatik f�r die Bioinformatik"
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # The purpose of this class is to return a Hash of all lectures that were
6
+ # already sovled.
7
+ # =========================================================================== #
8
+ # require 'studium/toplevel_methods/return_hash_of_already_solved_lectures.rb'
9
+ # =========================================================================== #
10
+ require 'studium/toplevel_methods/main_dataset.rb'
11
+ require 'studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb'
12
+
13
+ module Studium
14
+
15
+ # ========================================================================= #
16
+ # === Studium.return_hash_of_already_solved_lectures
17
+ #
18
+ # This method will return a Hash of all lectures that have already
19
+ # been solved.
20
+ # ========================================================================= #
21
+ def self.return_hash_of_already_solved_lectures
22
+ if ::Studium.main_dataset?
23
+ dataset = ::Studium.main_dataset? # In this case, re-use the main dataset.
24
+ else # else load up a new dataset
25
+ dataset = ::Studium.return_sanitized_dataset_from_the_file_lecture_information
26
+ end
27
+ dataset.select! {|name_of_the_lecture, inner_dataset|
28
+ already_solved = inner_dataset[:already_solved]
29
+ already_solved == true
30
+ }
31
+ return dataset
32
+ end
33
+
34
+ end
35
+
36
+ if __FILE__ == $PROGRAM_NAME
37
+ pp Studium.return_hash_of_already_solved_lectures.size
38
+ end
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/toplevel_methods/return_local_path_of_this_pwdstud.rb'
6
+ # =========================================================================== #
7
+ module Studium
8
+
9
+ require 'studium/requires/require_encoding.rb'
10
+ require 'studium/constants/roebe.rb'
11
+ require 'studium/toplevel_methods/file_cd_aliases.rb'
12
+
13
+ # ========================================================================= #
14
+ # === Studium.return_local_path_of_this_pwdstud
15
+ #
16
+ # The first argument to this method should be a number, usually a
17
+ # small one, starting from 1. This will then be expanded into an
18
+ # entry such as "pwdstud1" or "pwdstud4" and so forth.
19
+ #
20
+ # These are then checked against a file that is supposed to include
21
+ # these keys. If all works well then the path to a local directory
22
+ # will be returned.
23
+ #
24
+ # The method will also ensure that a trailing '/' character is to
25
+ # be returned, if a match is found.
26
+ #
27
+ # Usage examples:
28
+ #
29
+ # Studium.return_local_path_of_this_pwdstud 1 # => "/home/x/STUDIUM/UNI_WIEN/321025_Einf�hrung_in_pharmazeutisches_Imaging_B13/"
30
+ # Studium.return_local_path_of_this_pwdstud 3 # => "/home/x/STUDIUM/BOKU_WIEN/803302_Methods_in_ultrastructure_research_in_Eng/"
31
+ #
32
+ # ========================================================================= #
33
+ def self.return_local_path_of_this_pwdstud(
34
+ i = 1
35
+ )
36
+ _ = FILE_CD_ALIASES
37
+ i = i.first if i.is_a? Array
38
+ if File.exist? _
39
+ begin
40
+ require 'studium/requires/require_the_proper_yaml_engine.rb'
41
+ rescue LoadError; end
42
+ dataset = YAML.load_file(_)
43
+ key = ensure_main_encoding("pwdstud#{i}")
44
+ path = ensure_main_encoding(dataset[key]).sub(/^cd /,'').strip
45
+ path << '/' unless path.end_with? '/' # Require a trailing '/' character.
46
+ return path
47
+ end
48
+ nil
49
+ end
50
+
51
+ end
52
+
53
+ if __FILE__ == $PROGRAM_NAME
54
+ if ARGV.empty?
55
+ puts Studium.return_local_path_of_this_pwdstud 1
56
+ puts Studium.return_local_path_of_this_pwdstud 2
57
+ puts Studium.return_local_path_of_this_pwdstud 3
58
+ else
59
+ puts Studium.return_local_path_of_this_pwdstud(ARGV)
60
+ end
61
+ end
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # This file can be used to return the location to an exam topic.
6
+ # =========================================================================== #
7
+ # require 'studium/toplevel_methods/return_location_to_this_exam_topic.rb'
8
+ # =========================================================================== #
9
+ require 'studium/constants/exam_topics.rb'
10
+ require 'studium/toplevel_methods/find_corresponding_exam_topic.rb'
11
+
12
+ module Studium
13
+
14
+ # ========================================================================= #
15
+ # === Studium.return_location_to_this_exam_topic
16
+ # ========================================================================= #
17
+ def self.return_location_to_this_exam_topic(i)
18
+ i = i.first if i.is_a? Array
19
+ i = ::Studium.find_corresponding_exam_topic(i.to_s)
20
+ return "#{::Studium.exam_topics?}#{i}"
21
+ end; self.instance_eval { alias return_location_to_this_exam return_location_to_this_exam_topic } # === Studium.return_location_to_this_exam_topic
22
+
23
+ end
24
+
25
+ if __FILE__ == $PROGRAM_NAME
26
+ puts Studium.return_location_to_this_exam_topic(ARGV)
27
+ end # return_location_to_this_exam_topic
28
+ # return_location_to_this_exam_topic yeast
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/toplevel_methods/return_lva_number_of_this_curriculum.rb'
6
+ # =========================================================================== #
7
+ require 'studium/toplevel_methods/e.rb'
8
+ require 'studium/constants/file_constants.rb'
9
+ require 'studium/requires/require_encoding.rb'
10
+ require 'studium/colours/colours.rb'
11
+
12
+ module Studium
13
+
14
+ # ========================================================================= #
15
+ # === Studium.return_lva_number_of_this_curriculum
16
+ #
17
+ # This method will return the LVA number of a particular curriculum.
18
+ #
19
+ # Pass in the name of the curriculum.
20
+ #
21
+ # Invocation example:
22
+ # Studium.return_lva_number_of_this_curriculum 'Lebensmittel- und Biotechnologie'
23
+ # ========================================================================= #
24
+ def self.return_lva_number_of_this_curriculum(i)
25
+ # ======================================================================= #
26
+ # First, sanitize strings if they include at the least two newlines:
27
+ # ======================================================================= #
28
+ if i.is_a?(String) and i.count("\n") > 1
29
+ i = i.split("\n").flatten
30
+ end
31
+ dataset = YAML.load_file(FILE_CURRICULA)
32
+ reverse_dataset = dataset.invert # Must get rid of two strings.
33
+ _ = {}
34
+ reverse_dataset.each_pair {|key, value|
35
+ key = Studium.ensure_main_encoding(key)
36
+ value = Studium.ensure_main_encoding(value)
37
+ # ===================================================================== #
38
+ # Get rid of two words from the key.
39
+ # ===================================================================== #
40
+ _[key.sub(/Bachelorcurriculum /,'').sub(/Mastercurriculum /,'')] = value
41
+ }
42
+ reverse_dataset = _ # Re-assign it to our dataset.
43
+ if i.is_a? Array
44
+ i.each {|entry| return_lva_number_of_this_curriculum(entry) }
45
+ else
46
+ # ===================================================================== #
47
+ # Next, we must find the corresponding entries in the curriculum.yml
48
+ # file. This file is not distributed with the studium project,
49
+ # since it is only useful for my own dataset.
50
+ #
51
+ # The file curricula.yml file comes bundled with the studium gem
52
+ # since as of February 2018. The format is a hash having
53
+ # key-value entries:
54
+ #
55
+ # (1) first the number of the curriculum
56
+ # (2) the full and complete name of the curriculum, at hand
57
+ #
58
+ # ===================================================================== #
59
+ if reverse_dataset.has_key? i
60
+ e 'The curriculum '+Studium::Colours.simp(i)+' corresponds '\
61
+ 'to the number `'+
62
+ Studium::Colours.sfancy(reverse_dataset[i])+'`.'
63
+ else
64
+ e 'The curriculum for '+Studium::Colours.sfancy(i)+' does not appear to be registered.'
65
+ e ' '+Studium::Colours.sfile(FILE_CURRICULA)
66
+ end
67
+ end
68
+ end
69
+
70
+ end
71
+
72
+ if __FILE__ == $PROGRAM_NAME
73
+ Studium.return_lva_number_of_this_curriculum(ARGV)
74
+ end # return_lva_number_of_this_curriculum 'Lebensmittel- und Biotechnologie'
@@ -0,0 +1,486 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === Studium::LvaNummer
6
+ #
7
+ # This class will return and display, on the commandline, the particular
8
+ # LVA number of a given lecture.
9
+ # =========================================================================== #
10
+ # require 'studium/toplevel_methods/return_lva_number_of_this_lecture.rb'
11
+ # =========================================================================== #
12
+ require 'studium/base/prototype.rb'
13
+ require 'studium/requires/common_popular_requires.rb'
14
+ require 'studium/toplevel_methods/has_this_lecture_been_already_passed_but_the_id_was_changed_lateron.rb'
15
+ require 'studium/toplevel_methods/url.rb' # Has Studium.sanitize_url().
16
+ require 'socket'
17
+
18
+ begin
19
+ require 'xorg_buffer'
20
+ rescue LoadError; end
21
+
22
+ module Studium # === Studium
23
+
24
+ class LvaNummer < Base # === Studium::LvaNummer
25
+
26
+ # ========================================================================= #
27
+ # === NAMESPACE
28
+ # ========================================================================= #
29
+ NAMESPACE = inspect
30
+
31
+ # ========================================================================= #
32
+ # === MAIN_POSITION_IN_THE_ARRAY
33
+ #
34
+ # This constant should refer to the position of the .csv file that
35
+ # keeps our lecture ID.
36
+ # ========================================================================= #
37
+ MAIN_POSITION_IN_THE_ARRAY = 7
38
+
39
+ # ========================================================================= #
40
+ # === initialize
41
+ #
42
+ # Note that the first argument may also be a Hash.
43
+ # ========================================================================= #
44
+ def initialize(
45
+ commandline_arguments = ARGV,
46
+ run_already = true
47
+ )
48
+ reset
49
+ set_find_this_lecture(commandline_arguments)
50
+ if block_given?
51
+ yielded = yield
52
+ case yielded
53
+ when :do_not_modify_the_xorg_buffer
54
+ @do_modify_the_xorg_buffer = false
55
+ end
56
+ end
57
+ case run_already
58
+ when :do_not_run_yet
59
+ run_already = false
60
+ end
61
+ run if run_already
62
+ end
63
+
64
+ # ========================================================================= #
65
+ # === reset
66
+ # ========================================================================= #
67
+ def reset
68
+ super()
69
+ @namespace = NAMESPACE
70
+ # ======================================================================= #
71
+ # Obtain the dataset holding all the passed exams per month.
72
+ # ======================================================================= #
73
+ @dataset = File.readlines(
74
+ FILE_PASSED_EXAMS_PER_MONTH,
75
+ :encoding => main_encoding?
76
+ )
77
+ @do_modify_the_xorg_buffer = true
78
+ @do_report_results = true
79
+ @lva_number = 0 # Store the LVA Number here.
80
+ sanitize_dataset
81
+ end
82
+
83
+ # ========================================================================= #
84
+ # === set_find_this_lecture
85
+ # ========================================================================= #
86
+ def set_find_this_lecture(i)
87
+ i = i.join(' ').strip if i.is_a? Array
88
+ # ======================================================================= #
89
+ # Need to protect against frozen strings.
90
+ # ======================================================================= #
91
+ i = i.dup if i.frozen?
92
+ unless i.encoding.to_s.include? USE_THIS_ENCODING
93
+ i = i.force_encoding(USE_THIS_ENCODING)
94
+ end
95
+ i.strip!
96
+ # ======================================================================= #
97
+ # The following constant is defined in studium/constants/constants.rb.
98
+ # ======================================================================= #
99
+ if HASH_PASSED_LECTURES_THAT_WERE_LATERON_CHANGED.values.include?(i)
100
+ # ===================================================================== #
101
+ # "Re-wire" to the real name of the lecture.
102
+ # ===================================================================== #
103
+ lva_id = HASH_PASSED_LECTURES_THAT_WERE_LATERON_CHANGED.invert[i] # Now we have the LV-id.
104
+ lva_id = HASH_PASSED_LECTURES_THAT_WERE_LATERON_CHANGED_LV_ID_ALIASES[lva_id]
105
+ i = HASH_PASSED_LECTURES_THAT_WERE_LATERON_CHANGED_ALIAS_NAME[lva_id]
106
+ end
107
+ @find_this_lecture = i
108
+ end
109
+
110
+ # ========================================================================= #
111
+ # === find_this_lecture?
112
+ # ========================================================================= #
113
+ def find_this_lecture?
114
+ @find_this_lecture
115
+ end; alias input? find_this_lecture? # === input?
116
+
117
+ # ========================================================================= #
118
+ # === set_lva_number
119
+ # ========================================================================= #
120
+ def set_lva_number(i)
121
+ @lva_number = i.to_s.strip # Is always a String.
122
+ end
123
+
124
+ # ========================================================================= #
125
+ # === lva_number?
126
+ # ========================================================================= #
127
+ def lva_number?
128
+ @lva_number
129
+ end; alias lva_number lva_number? # === lva_number
130
+ alias id? lva_number? # === id?
131
+
132
+ # ========================================================================= #
133
+ # === do_not_report_results
134
+ # ========================================================================= #
135
+ def do_not_report_results
136
+ @do_report_results = false
137
+ end; alias do_not_report_the_results do_not_report_results # === do_not_report_the_results
138
+
139
+ # ========================================================================= #
140
+ # === Studium::LvaNummer[]
141
+ # ========================================================================= #
142
+ def self.[](i)
143
+ new(i)
144
+ end
145
+
146
+ # ========================================================================= #
147
+ # === set_results
148
+ # ========================================================================= #
149
+ def set_results(i)
150
+ @results = i
151
+ end
152
+
153
+ # ========================================================================= #
154
+ # === try_to_modify_the_xorg_buffer
155
+ # ========================================================================= #
156
+ def try_to_modify_the_xorg_buffer(i)
157
+ if Object.const_defined? :XorgBuffer
158
+ XorgBuffer[i]
159
+ end
160
+ end
161
+
162
+ # ========================================================================= #
163
+ # === return_all_numbers_as_array
164
+ # ========================================================================= #
165
+ def return_all_numbers_as_array
166
+ @results.map {|entry|
167
+ entry.split('|').first.strip
168
+ }
169
+ end
170
+
171
+ # ========================================================================= #
172
+ # === get_rid_of_the_dataset
173
+ #
174
+ # Get rid of @dataset again.
175
+ # ========================================================================= #
176
+ def get_rid_of_the_dataset
177
+ remove_instance_variable(:@dataset)
178
+ end
179
+
180
+ # ========================================================================= #
181
+ # === try_to_find_matches
182
+ #
183
+ # This method will try to find any matches.
184
+ # ========================================================================= #
185
+ def try_to_find_matches
186
+ _ = @dataset #.join(N) # Need to re-add the "\n" here.
187
+ # ======================================================================= #
188
+ # Next, we need to use a proper regex to find the correct entry.
189
+ # This is a critical step - if our regex finds invalid input, we would
190
+ # propagate this faulty input, hence why the regex needs to be very
191
+ # accurate.
192
+ # ======================================================================= #
193
+ use_this_input = input?
194
+ if use_this_input
195
+ unless use_this_input.encoding.to_s.include? USE_THIS_ENCODING
196
+ use_this_input = ensure_main_encoding(use_this_input)
197
+ end
198
+ end
199
+ # ======================================================================= #
200
+ # For the following regex, see here:
201
+ # http://rubular.com/r/2xNaE5FXPe
202
+ # use_this_regex = /#{Regexp.quote(use_this_input)}\s*$/
203
+ # ======================================================================= #
204
+ use_this_regex = /(\| #{Regexp.quote(use_this_input)}$)/
205
+ scanned = _.select {|line|
206
+ line =~ use_this_regex
207
+ }
208
+ # ======================================================================= #
209
+ # Note that the variable _ may look like this:
210
+ # "20.09.2013 | 1.0 | 2.0 | 4 | UniWien | B/M | VO | 300150 | 2013S | Chromosomenbiologie und Cytogenetik"
211
+ # "25.11.1997|2.0|xxx|4|UniWien|D|VO|300053|1997W|Physik für Biologinnen und Biologen und LA-BU"
212
+ # ======================================================================= #
213
+ # ======================================================================= #
214
+ # We need to keep in mind that the lecture is not registered in the
215
+ # "already passed exams" part yet. In this case, the variable scanned
216
+ # will be empty, which is a case we will handle next.
217
+ # ======================================================================= #
218
+ if scanned.empty?
219
+ # ===================================================================== #
220
+ # Ok. How do we proceed from here? Well, we have a few options.
221
+ #
222
+ # A simple one is to make use of the file called 'lecture_information.yml'
223
+ #
224
+ # This should ideally have our lecture registered.
225
+ #
226
+ # In the event that it ahs not, we will try to obtain the information
227
+ # from a remote URL. For this we will use the project BeautifulUrl -
228
+ # but keep in mind that BeautifulUrl must have registered that page
229
+ # prior before it could be found.
230
+ #
231
+ # Also, keep in mind that we can not get rid of '(' and ')', because
232
+ # some lectures may mandate this as part of their name.
233
+ # ===================================================================== #
234
+ keys_only = YAML.load_file(FILE_LECTURE_INFORMATION).keys
235
+ hash = {}
236
+ keys_only.each {|line|
237
+ line = ensure_main_encoding(line)
238
+ index = line.index(' ')
239
+ key = line[0,index]
240
+ value = line[index+1 .. -1]
241
+ hash[key] = value
242
+ }
243
+ _ = input?.delete(' ') # .delete('()') # Easier to get the input without any ' ' in it and without ( or ) either.
244
+ url = Studium.sanitize_url(_) # So that we do not depend on Studium::Base.
245
+ if hash.has_value?(input?)
246
+ this_lva_number = hash.key(input?)
247
+ set_lva_number(this_lva_number)
248
+ if @do_report_results
249
+ e lva_number?
250
+ try_to_modify_the_xorg_buffer(lva_number?) if @do_modify_the_xorg_buffer
251
+ end
252
+ elsif url.is_a? Array
253
+ target_url = url.first
254
+ # =================================================================== #
255
+ # Assign a default lecture_id value next.
256
+ # =================================================================== #
257
+ lecture_id = '000000' # Use a default, just in case.
258
+ # =================================================================== #
259
+ # Intercept nil values first.
260
+ # =================================================================== #
261
+ if target_url.nil?
262
+ e 'Found a nil value for target_url, on '+sfancy(_)+'.'
263
+ e 'Please fix this issue.'
264
+ elsif target_url.include? 'ufind.'
265
+ use_this_regex = # See: http://rubular.com/r/LsdAmVnOT1
266
+ /ufind.univie.ac.at\/de\/course.html\?lv=(\d{4,6})&semester=20\d\d/
267
+ target_url =~ use_this_regex
268
+ lecture_id = $1.to_s.dup
269
+ else
270
+ # ================================================================= #
271
+ # Get the content of the remote page. we assume this to be a
272
+ # BOKU lecture if we enter here.
273
+ # ================================================================= #
274
+ # ================================================================= #
275
+ # We must handle possible errors, as the URL may be non-existent,
276
+ # for instance.
277
+ # ================================================================= #
278
+ begin
279
+ remote_page_content = open(target_url)
280
+ remote_page_content = remote_page_content.read.delete(N) # Easier to work without newlines.
281
+ # =============================================================== #
282
+ # Next, find the proper match via a regex. For BOKU lectures
283
+ # this is the "Nummer" entry.
284
+ # =============================================================== #
285
+ use_this_regex = # See: http://rubular.com/r/07S71aEYEt
286
+ /class="Mask ">Nummer<\/label><\/td><td colspan="0" class=" MaskRenderer top"><table class=" MaskSpacing"><tr><td class=" MaskRenderer"><span class="bold ">(\d{1,6})<\/span>/
287
+ # =============================================================== #
288
+ # We need to grab the lecture_id next.
289
+ # =============================================================== #
290
+ if remote_page_content.include? 'Nummer</label>'
291
+ remote_page_content =~ use_this_regex
292
+ lecture_id = $1.to_s.dup
293
+ end
294
+ rescue OpenURI::HTTPError => error
295
+ opnn; e 'An error happened which will be shown next ('+
296
+ swarn('OpenURI::HTTPError')+')'
297
+ pp error
298
+ opnn; e 'This means that a remote website is probably unavailable. '\
299
+ '(target_url was: '+simp(target_url)+')'
300
+ opnn; e 'If this is for a lecture at the BOKU, then this usually '
301
+ opnn; e 'means that some maintenance work is currently ongoing.'
302
+ opnn; e 'We will thus exit for now as we can not access '\
303
+ 'the remote information anyway.'
304
+ exit
305
+ rescue SocketError => error # This here requires: require 'socket'
306
+ opnn; e 'An error happened:'
307
+ pp error
308
+ lecture_id = '0'
309
+ rescue Errno::ENOENT
310
+ lecture_id = '0'
311
+ rescue Net::OpenTimeout
312
+ opnn; e 'A Net::OpenTimeout was encountered. Your internet '\
313
+ 'connection may not be working or the remote site '\
314
+ 'may have a problem.'
315
+ lecture_id = 'Net::OpenTimeout'
316
+ rescue Interrupt
317
+ opnn; e 'Exiting upon user request.'
318
+ exit
319
+ rescue Exception => error
320
+ opnn; e 'Another error for the URL '+sfancy(target_url)+': '
321
+ pp error
322
+ end
323
+ end
324
+ set_lva_number(lecture_id) # Also keep a reference to the LVA number at hand.
325
+ report_results([lecture_id+'|'+target_url]) if @do_report_results
326
+ end
327
+ else # else still register the LVA number.
328
+ if lva_number?.to_s.empty? or
329
+ (lva_number?.to_s == '0')
330
+ first = scanned.first
331
+ _ = first.split('|')[MAIN_POSITION_IN_THE_ARRAY] # Obtain the LVA number here, position 8.
332
+ set_lva_number(_)
333
+ end
334
+ end
335
+ set_results(scanned)
336
+ end
337
+
338
+ # ========================================================================= #
339
+ # === report_results
340
+ #
341
+ # The input to this method will have results IF we already passed that
342
+ # particular exam.
343
+ #
344
+ # IF we have not yet passed that exam, the input may look like this:
345
+ #
346
+ # ["931103|https://online.boku.ac.at/BOKUonline/wbLv.wbShowLVDetail?pStpSpNr=277659"]
347
+ #
348
+ # Unfortunately, some exams may have already been passed, but may now have
349
+ # another id, so ideally we also need a way to determine the LVA-ID number
350
+ # in these cases.
351
+ #
352
+ # An alternative is to register the passed exams in a file called
353
+ # lecture_information.yml.
354
+ # ========================================================================= #
355
+ def report_results(
356
+ use_these_results = @results
357
+ )
358
+ if use_these_results.empty?
359
+ # opnn; e 'This lecture ('+sfancy(input?.to_s)+') is not registered/known.'
360
+ else
361
+ use_these_results.each {|line| # <- Assume an Array here.
362
+ # =================================================================== #
363
+ # For now we will always assume that the dataset given to this
364
+ # method will contain a '|' token. Do not forget that.
365
+ # =================================================================== #
366
+ splitted = line.split('|').map(&:strip)
367
+ lva_number = splitted[MAIN_POSITION_IN_THE_ARRAY] # Is at position number 7.
368
+ e lva_number if @do_report_results # This line is the "reporting" part. :)
369
+ try_to_modify_the_xorg_buffer(lva_number) if @do_modify_the_xorg_buffer
370
+ }
371
+ end
372
+ end
373
+
374
+ # ========================================================================= #
375
+ # === sanitize_dataset
376
+ # ========================================================================= #
377
+ def sanitize_dataset
378
+ @dataset.reject! {|entry| entry.strip.empty? }
379
+ @dataset.reject! {|entry| entry.strip.start_with? '#'}
380
+ # ======================================================================= #
381
+ # Some exams, in particular at the University of Vienna, are equivalent
382
+ # to other exams. For example, "Physik für Biologinnen und Biologen
383
+ # und LA-BU" has been imputed for "B-BIO 4 Biologische Physik (BIO 3)".
384
+ # Or the lecture "300006 VO Allgemeine und Molekulare Genetik Teil II"
385
+ # which is equivalent to "300132 VO Allgemeine und Molekulare Genetik
386
+ # II".
387
+ # This explains why some entries ought to be "corrected".
388
+ # The code that follows will do this.
389
+ # ======================================================================= #
390
+ split_token_to_use = '|'
391
+ @dataset.map! {|line|
392
+ line.chomp!
393
+ splitted = line.split(split_token_to_use).map(&:strip)
394
+ name_of_the_lecture = splitted.last
395
+ id_of_the_lecture = splitted[7]
396
+ # ===================================================================== #
397
+ # The following method is defined in:
398
+ # studium/toplevel_methods/has_this_lecture_been_already_passed_but_the_id_was_changed_lateron.rb
399
+ # ===================================================================== #
400
+ if ::Studium.has_this_lecture_been_already_passed_but_the_id_was_changed_lateron?(
401
+ id_of_the_lecture, name_of_the_lecture
402
+ )
403
+ # =================================================================== #
404
+ # In this case, since the ID has already been changed,
405
+ # re-write the dataset.
406
+ # =================================================================== #
407
+ id_of_the_lecture = HASH_PASSED_LECTURES_THAT_WERE_LATERON_CHANGED_LV_ID_ALIASES[id_of_the_lecture]
408
+ name_of_the_lecture = HASH_PASSED_LECTURES_THAT_WERE_LATERON_CHANGED_ALIAS_NAME[id_of_the_lecture]
409
+ splitted[-1] = name_of_the_lecture
410
+ splitted[7] = id_of_the_lecture
411
+ line = splitted.join(split_token_to_use)
412
+ end
413
+ line
414
+ }
415
+ end
416
+
417
+ # ========================================================================= #
418
+ # === run
419
+ # ========================================================================= #
420
+ def run
421
+ try_to_find_matches
422
+ get_rid_of_the_dataset
423
+ report_results if @do_report_results
424
+ end
425
+
426
+ end
427
+
428
+ # ========================================================================= #
429
+ # === Studium.return_lva_number_of_this_lecture
430
+ #
431
+ # Easier access-method to find out the LVA number of a given lecture.
432
+ #
433
+ # It is recommended to use this method rather than instantiate a new
434
+ # instance of class Studium::LvaNummer on your own.
435
+ #
436
+ # Usage example:
437
+ # Studium.return_lva_number_of_this_lecture("Chromosomenbiologie und Cytogenetik") # => "300150"
438
+ # ========================================================================= #
439
+ def self.return_lva_number_of_this_lecture(
440
+ this_lecture
441
+ )
442
+ if this_lecture.is_a? Array
443
+ if this_lecture.first.count(N) > 3
444
+ this_lecture = this_lecture.first.split(N).flatten
445
+ end
446
+ result = this_lecture.map {|entry|
447
+ return_lva_number_of_this_lecture(entry)
448
+ }
449
+ if block_given? and
450
+ yield == :also_output_the_result_if_the_user_did_input_a_long_string
451
+ this_lecture.each {|lecture|
452
+ e return_lva_number_of_this_lecture(lecture).to_s+' '+
453
+ lecture
454
+ }
455
+ return
456
+ end
457
+ return result
458
+ else
459
+ lva_nummer = ::Studium::LvaNummer.new(
460
+ this_lecture, :do_not_run_yet
461
+ ) { :do_not_modify_the_xorg_buffer }
462
+ lva_nummer.do_not_report_the_results
463
+ lva_nummer.run
464
+ return lva_nummer.lva_number?
465
+ end
466
+ end; self.instance_eval { alias return_lvid_from_this_lecture return_lva_number_of_this_lecture } # === Studium.return_lvid_from_this_lecture
467
+ self.instance_eval { alias return_id_of_this_lecture return_lva_number_of_this_lecture } # === Studium.return_id_of_this_lecture
468
+ self.instance_eval { alias return_lv_id_number return_lva_number_of_this_lecture } # === Studium.return_lv_id_number
469
+ self.instance_eval { alias return_id return_lva_number_of_this_lecture } # === Studium.return_id
470
+ self.instance_eval { alias return_lva_id_of_this_lecture return_lva_number_of_this_lecture } # === Studium.return_lva_id_of_this_lecture
471
+
472
+ end
473
+
474
+ if __FILE__ == $PROGRAM_NAME
475
+ require 'colours/e/autoinclude'
476
+ Studium.return_lva_number_of_this_lecture(ARGV) { :also_output_the_result_if_the_user_did_input_a_long_string }
477
+ end # lvanum Umweltethik
478
+ # lvanum "Technologie tierischer Lebensmittel"
479
+ # lvanum "Allgemeine und Molekulare Mikrobiologie Teil I"
480
+ # lvanum "Chromosomenbiologie und Cytogenetik"
481
+ # lvanum "Biotechnologie 2"
482
+ # lvanum "Biologische Physik I"
483
+ # lvanum "Gemüse- und Zierpflanzenbau"
484
+ # lvanum "Biochemie"
485
+ # lvanum "Antibody Engineering (in Eng.)"
486
+ # lvanum "Grundlagen des Programmierens für MB, WIMB und VT"