Class: Studium::UniversityCourse

Inherits:
Base
  • Object
show all
Defined in:
lib/studium/university_course/university_course.rb

Overview

Studium::UniversityCourse

Constant Summary

Constants inherited from Base

Base::COMMON_YEAR_DAYS_IN_MONTH, Base::LEFT_PADDING, Base::NAMESPACE, Base::N_CHARACTERS_PER_LINE

Constants included from Colours

Colours::COLOURS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#add_proper_year_entry_to_this_line, #already_solved_this_lva_number?, #append_what_into, #available_topics_as_short_name, #average_grade, #bachelor_master_or_diploma, #be_silent, #be_verbose?, #beautiful_url, #change_directory, #cheering_person, #chmod, #cliner, #colour_for_ects_points, #colourize_percentage, #convert_this_array_of_lectures_into_the_full_dataset, #copy, #course_filter, #cpruby, #create_directory, #create_file, #csv_file?, #current_month?, #current_semester?, #dataset?, #datum?, #day_month_year, #debug?, #delete_file, #directory_of_the_exam_topics?, #directory_to_my_exam_topics, #directory_to_the_exam_topics?, #disable_colours, #disable_colours_globally, #do_not_be_verbose, #do_not_use_opn, #do_these_curricula_include_both_a_bachelor_and_a_master_curriculum?, #does_this_line_include_a_german_weekday?, #does_this_line_include_a_html_colour?, #does_this_line_include_an_english_weekday?, #does_this_line_start_with_a_german_weekday?, #e, #ecomment, #editor?, #ee, #egrey, #enable_colours, #enable_colours_globally, #enable_debug, #encoding?, #english_to_german_weekday, #ensure_that_a_base_directory_exists_for_this_file, #ensure_that_the_log_directory_exists, #eparse, #esystem, #etomato, #exit_program, #extract_dd_mm_yyyy, #fetch_this_curriculum, #file_important_exams?, #file_lecture_information?, #file_passed_exams_per_month, #file_read_with_proper_encoding, #filter_away_already_answered_questions, #filter_away_invalid_questions, #filter_for_all_passed_exams, #find_corresponding_exam_topic, #from_curriculum_id_to_university, #german_date_notation, #german_weekday?, #german_weekdays?, #german_weekend_for?, #german_yes_or_no, #has_a_bachelor_and_a_master_curriculum?, #has_a_bachelor_curriculum?, #has_a_master_curriculum?, #has_lva_dates_registered?, #has_this_exam_topic_been_solved?, #has_year_entry?, #hh_mm_ss_dd_mm_yyyy, #horizontal_bar?, #html_log_directory?, #infer_the_namespace, #initialize_the_internal_hash, #internal_hash?, #is_a_master_lecture?, #is_a_registered_curriculum?, #is_a_weekday?, #is_connected_to_the_www?, #is_german_weekday?, #is_on_roebe?, #is_prüfungsimmanent?, #is_this_a_registered_exam_topic?, #is_this_a_valid_html_colour?, #is_this_day_today?, #is_this_lecture_a_practical_course?, #konsole_support?, #last_file?, #lectures_from_indi1, #lectures_from_indi2, #lectures_from_indi3, #lectures_from_indi4, #lectures_from_the_bachelor_genetik_curriculum, #lectures_from_the_individual_vektor_curricula, #left_arrow?, #load_yaml_dataset, #map_input_to_this_curriculum_filename, #move_file, #n_days_difference_from_today_to_this_day, #n_seconds_to_n_days, #namespace?, #no_ext_name, #no_file_exists_at, #number_to_month, #obtain, #obtain_lectures_from_this_curriculum, #open_in_browser, #open_in_editor, #opne, #opnerev, #opnn, #padded_current_month?, #parse_dd_mm_yyyy, #parse_this_line_for_date_entry, #path_to_exam_topic?, #project_yaml_directory?, #rds, #read_dataset_from_a_curriculum_file, #read_in_exam_dataset_from_this_file, #read_this_file_with_default_encoding, #readlines_from_this_input_file, #register_sigint, #remove_empty_strings, #remove_escape_sequences, #remove_internal_comments, #remove_leading_comments, #remove_leading_weekday_names_from, #remove_newlines, #remove_tags_from_this_input, #rename_kde_konsole_tab, #rename_konsole_tab?, #replace_all_html_colours_in_this, #replace_bold_token_with_default_colour, #replace_italic_token_with_default_colour, #replace_italic_token_with_this_colour, #replace_regular_numbers_with_unicode_numbers, #replace_underline_token_with_default_colour, #replace_underline_token_with_this_colour, #require_open_uri, #reset_the_internal_state, #return_all_bachelor_lectures, #return_all_exams_on_this_day, #return_all_numbers_from, #return_all_registered_curricula, #return_all_steop_lectures, #return_current_year, #return_dataset_for_this_topic, #return_dataset_from_this_curriculum_file, #return_dd_mm_yy_and_time_from, #return_directory_for, #return_ects_points_from_these_lectures, #return_either_grey_or_the_custom_colour_for_answers, #return_either_grey_or_the_custom_colour_for_questions, #return_file_for_this_curriculum, #return_german_name_for_this_english_month, #return_german_weekday_of?, #return_hh_mm_ss_from, #return_hour_from_this, #return_lectures_from_bachelor_vektor_curriculum, #return_lectures_with_at_the_least_one_upcoming_exam, #return_local_path_of_this_pwdstud, #return_lva_number_of_this_lecture, #return_month_fitting_to_this_input, #return_n_days_until_monday, #return_n_days_until_sunday, #return_n_exam_questions_in, #return_n_questions_were_answered_for_this_topic, #return_name_of_the_weekday, #return_name_of_this_curriculum, #return_name_of_this_curriculum_based_on_its_id_number, #return_opnn, #return_passed_courses, #return_pwd, #return_random_curriculum, #return_sanitized_dataset_from_the_file_lecture_information, #return_solved_lectures, #return_steop_lectures, #return_the_remote_homepage_url, #return_this_line_has_n_characters_as_html_colour_tags, #return_title_from_this_curriculum_file, #right_arrow?, #rinstall2, #roebe_exam_directory?, #roebe_path_to_file_lecture_information?, #ruby_src_dir_at_home?, #sanitize_this_topic, #sanitize_url, #select_for_prüfungsimmanente_LVs, #select_lectures_with_this_key, #set_be_verbose, #set_this_cd_alias_to, #set_xorg_buffer, #sfancy, #shall_we_make_use_of_unicode_symbols?, #show_todays_date, #silently_open_in_browser, #simp, #sort_these_lecture_names_by_time, #spacer, #studium_log_dir?, #this_month_has_n_days?, #total_ects_points_passed, #translate_dd_mm_yyyy_to_weekday, #try_to_require_html_templates, #try_to_require_the_open_gem, #try_to_require_the_rcfiles, #try_to_require_the_verbose_truth_gem, #turn_this_array_into_the_full_dataset, #unicode_blocks_line, #use_colours?, #use_opn?, #vertical_bar?, #web_liner, #weekday?, #weekdays?, #word_wrap, #write_what_into, #www_connection_is_unavailable, #yaml_dir?, #yellowrev, #yes_or_no

Methods included from RunmodeModule

#commandline?, #runmode?, #set_commandline_mode, #set_runmode, #set_www_mode, #www_mode?

Methods included from CommandlineArgumentsModule

#commandline_arguments?, #commandline_arguments_joined, #commandline_arguments_with_hyphens?, #commandline_arguments_without_leading_hyphens?, #first_argument?, #first_non_hyphen_argument?, #reset_the_commandline_arguments, #set_commandline_arguments, #set_first_argument

Methods included from HtmlColoursModule

#aquamarine, #blanchedalmond, #brown, #cadetblue, #chocolate, #coral, #cornflowerblue, #crimson, #cyan, #darkblue, #darkcyan, #darkgoldenrod, #darkgreen, #darkkhaki, #darkolivegreen, #darkorange, #darkred, #darkseagreen, #darkslateblue, #darkslategray, #darkturquoise, #deepskyblue, #firebrick, #forestgreen, #gold, #goldenrod, #green, #grey, #indianred, #khaki, #lavender, #lawngreen, #lightblue, #lightcoral, #lightgreen, #lightred, #lightseagreen, #lightskyblue, #lightslategray, #lightslategrey, #lime, #limegreen, #mediumaquamarine, #mediumblue, #mediumpurple, #mediumseagreen, #mediumslateblue, #mediumspringgreen, #mediumturquoise, #mediumvioletred, #mintcream, #moccasin, #oldlace, #olive, #olivedrab, #orange, #orangered, #orchid, #palegoldenrod, #palegreen, #paleturquoise, #palevioletred, #peru, #plum, #powderblue, #red, #rosybrown, #royalblue, #saddlebrown, #salmon, #sandybrown, #seagreen, #sienna, #silver, #skyblue, #slateblue, #slategray, #springgreen, #steelblue, #tan, #teal, #thistle, #tomato, #turquoise, #violet, #whitesmoke, #yellow, #yellowgreen

Methods included from Colours

#bold_blue, #bold_red, #bold_yellow, cadetblue, #cadetblue, #chartreuse, #coral, coral, #cornflowerblue, cornflowerblue, crimson, #cyan, cyan, darkgoldenrod, #darkgoldenrod, #darkgray, darkgreen, darkolivegreen, darkseagreen, #darkslateblue, darkslateblue, #darkslategray, darkslategray, #darkturquoise, darkturquoise, #deepskyblue, deepskyblue, default_colour, #dimgray, disable_colours, #dodgerblue, e, #efancy, enable_colours, #erev, #ewarn, #forestgreen, forestgreen, gold, #goldenrod, goldenrod, #grey, grey, indianred, #indianred, khaki, #khaki, lawngreen, #lawngreen, lightblue, lightgreen, lightsalmon, #lightseagreen, lightseagreen, lightskyblue, #lightskyblue, #lightslategray, lightslategray, #lightsteelblue, lime, #lime, limegreen, #limegreen, #mediumaquamarine, mediumaquamarine, #mediumorchid, #mediumpurple, mediumpurple, #mediumseagreen, mediumseagreen, #mediumslateblue, mediumslateblue, #mediumspringgreen, mediumspringgreen, #mediumturquoise, mediumturquoise, #oldlace, olive, #olive, olivedrab, #olivedrab, orange, orangered, #orchid, orchid, palegreen, #palegreen, paleturquoise, #paleturquoise, palevioletred, #papayawhip, peru, #peru, plum, #plum, #powderblue, powderblue, rev, #rev?, royalblue, saddlebrown, #saddlebrown, #sandybrown, sandybrown, sdir, #sdir, seagreen, #seagreen, sfancy, #sfancy, sfile, #sfile, #simp, simp, #skyblue, skyblue, slateblue, #slategray, slategray, springgreen, #springgreen, #steelblue, steelblue, #swarn, swarn, #tan, tan, teal, #teal, #tomato, tomato, turquoise, use_colours?, use_this_colour_for_exam_answers, use_this_colour_for_exam_questions, #yellow, yellowgreen, #yellowgreen

Constructor Details

#initialize(commandline_arguments = nil, run_already = true) ⇒ UniversityCourse

#

initialize

#


26
27
28
29
30
31
32
33
34
35
# File 'lib/studium/university_course/university_course.rb', line 26

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

Studium::UniversityCourse[]

#


377
378
379
# File 'lib/studium/university_course/university_course.rb', line 377

def self.[](i = ARGV)
  new(i)
end

Instance Method Details

#already_solved?Boolean

#

already_solved?

#

Returns:

  • (Boolean)


152
153
154
# File 'lib/studium/university_course/university_course.rb', line 152

def already_solved?
  hash? and hash?[:already_solved]
end

#already_solved_at?Boolean Also known as: absolviert_am?

#

already_solved_at?

#

Returns:

  • (Boolean)


124
125
126
# File 'lib/studium/university_course/university_course.rb', line 124

def already_solved_at?
  hash? and hash?[:already_solved_at]
end

#curricula?Boolean

#

curricula?

#

Returns:

  • (Boolean)


283
284
285
# File 'lib/studium/university_course/university_course.rb', line 283

def curricula?
  hash? and hash?['curricula']
end

#description_in_english?Boolean

#

description_in_english?

#

Returns:

  • (Boolean)


159
160
161
162
163
# File 'lib/studium/university_course/university_course.rb', line 159

def description_in_english?
  if hash? and hash?[:description_in_english]
    return hash?[:description_in_english]
  end
end

#description_in_german?Boolean Also known as: description?

#

description_in_german?

#

Returns:

  • (Boolean)


168
169
170
171
172
# File 'lib/studium/university_course/university_course.rb', line 168

def description_in_german?
  if hash? and hash?[:description_in_german]
    return hash?[:description_in_german]
  end
end

#ects?Boolean Also known as: ECTS?

#

ects?

#

Returns:

  • (Boolean)


290
291
292
# File 'lib/studium/university_course/university_course.rb', line 290

def ects?
  hash? and hash?[:ects]
end

#exams?Boolean

#

exams?

#

Returns:

  • (Boolean)


198
199
200
# File 'lib/studium/university_course/university_course.rb', line 198

def exams?
  hash?['exams']
end

#hash?Boolean

#

hash?

#

Returns:

  • (Boolean)


117
118
119
# File 'lib/studium/university_course/university_course.rb', line 117

def hash?
  first_argument?
end

#individual_curricula?Boolean

#

individual_curricula?

#

Returns:

  • (Boolean)


63
64
65
# File 'lib/studium/university_course/university_course.rb', line 63

def individual_curricula?
  hash? and hash?[:individual_curricula]
end

#individual_curriculum_module?Boolean

#

individual_curriculum_module?

#

Returns:

  • (Boolean)


90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/studium/university_course/university_course.rb', line 90

def individual_curriculum_module?
  find_this_individual_curriculum = we_work_on_this_individual_curriculum?.to_s.strip
  if individual_curricula?
    correct_entry = individual_curricula?.select {|hash|
      hash[:name_of_the_curriculum].include? find_this_individual_curriculum
    }
    if correct_entry and correct_entry.is_a?(Array)
      correct_entry = correct_entry.first
    end
    if correct_entry
      _ = correct_entry[:individual_curriculum_module]
      _ = _.first if _.is_a? Array
      return _
    end
  end
end

#is_a_steop_lecture?Boolean

#

is_a_steop_lecture?

#

Returns:

  • (Boolean)


191
192
193
# File 'lib/studium/university_course/university_course.rb', line 191

def is_a_steop_lecture?
  hash? and hash?[:is_a_steop_lecture]
end

#is_an_individual_curriculum?Boolean

#

is_an_individual_curriculum?

#

Returns:

  • (Boolean)


297
298
299
# File 'lib/studium/university_course/university_course.rb', line 297

def is_an_individual_curriculum?
  hash? and hash?[:individual_curricula]
end

#is_there_an_upcoming_exam?Boolean

#

is_there_an_upcoming_exam?

This method should determine whether we have an upcoming exam or whether we do not.

#

Returns:

  • (Boolean)


234
235
236
# File 'lib/studium/university_course/university_course.rb', line 234

def is_there_an_upcoming_exam?
  !upcoming_exams?.empty?
end

#lecture_name?Boolean

#

lecture_name?

#

Returns:

  • (Boolean)


131
132
133
# File 'lib/studium/university_course/university_course.rb', line 131

def lecture_name?
  @internal_hash[:lecture_name]
end

#lecture_type?Boolean

#

lecture_type?

#

Returns:

  • (Boolean)


184
185
186
# File 'lib/studium/university_course/university_course.rb', line 184

def lecture_type?
  hash? and hash?[:type]
end

#load_this_dataset(i = '/Depot/j/test.yml') ⇒ Object Also known as: parse

#

load_this_dataset

This should load from a .yml file, unless if the input is already a Hash.

#


348
349
350
351
352
353
354
355
356
357
358
359
# File 'lib/studium/university_course/university_course.rb', line 348

def load_this_dataset(
    i = '/Depot/j/test.yml'
  )
  if i.is_a? Hash
    dataset = i
  else
    dataset = YAML.load_file(i)
  end
  lecture_name = dataset.keys.first
  set_lecture_name(lecture_name)
  set_first_argument(dataset[lecture_name])
end

#moodle?Boolean

#

moodle?

#

Returns:

  • (Boolean)


276
277
278
# File 'lib/studium/university_course/university_course.rb', line 276

def moodle?
  hash? and hash?[:moodle]
end

#name_of_the_curriculum_module?Boolean

#

name_of_the_curriculum_module?

This method will always look up at each individual curriculum.

#

Returns:

  • (Boolean)


72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/studium/university_course/university_course.rb', line 72

def name_of_the_curriculum_module?
  find_this_individual_curriculum = we_work_on_this_individual_curriculum?.to_s.strip
  if individual_curricula?
    correct_entry = individual_curricula?.select {|hash|
      hash[:name_of_the_curriculum].include? find_this_individual_curriculum
    }
    if correct_entry and correct_entry.is_a?(Array)
      correct_entry = correct_entry.first
    end
    if correct_entry
      return correct_entry[:name_of_the_curriculum_module]
    end
  end
end

#next_exam?Boolean

#

next_exam?

This method will notify us when the next exam will occur.

#

Returns:

  • (Boolean)


306
307
308
309
310
311
312
313
314
315
316
317
318
# File 'lib/studium/university_course/university_course.rb', line 306

def next_exam?
  next_exams = next_exams?
  if next_exams
    next_exam = next_exams.first
    if next_exam
      return next_exam.to_s.squeeze(' ')
    else
      return next_exam
    end
  else
    return nil # Must return nil in this case.
  end
end

#next_exams?Boolean

#

next_exams?

This will return all upcoming exams, but only if they are recent-ish.

Thus, we have to do a time-check.

#

Returns:

  • (Boolean)


327
328
329
330
331
332
333
334
335
336
337
338
339
340
# File 'lib/studium/university_course/university_course.rb', line 327

def next_exams?
  _ = exams?
  if _
    current_time = Time.now
    _.select! {|entry|
      entry = remove_german_weekdays(entry.dup).delete(',')
      if entry.include? 'Ort:'
        entry = entry.split('Ort:').first.to_s
      end
      current_time < ::Time.parse(entry)
    }
  end
  return _
end

#orte?Boolean

#

orte?

This method will feedback the “Orte” of all exams, as an Array. If no exam is registered then nil will be returned.

#

Returns:

  • (Boolean)


208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# File 'lib/studium/university_course/university_course.rb', line 208

def orte?
  _ = exams?
  if _.empty?
    return nil
  else
    regex_to_use = /Ort: (.+)$/
    return _.map {|entry|
      # Montag      30.01.2023, 08:30-09:30, Ort: HS TÜWI01 TÜWI-U1/02#
      entry = entry.dup if entry.frozen?
      if entry.include? 'Ort:'
        entry =~ regex_to_use
        entry = $1.to_s.dup 
      else
        opne tomato('No Ort: entry for the exam at '+entry)
      end
      entry
    } 
  end
end

#outdated_lecture?Boolean Also known as: is_this_course_outdated?

#

outdated_lecture?

#

Returns:

  • (Boolean)


138
139
140
# File 'lib/studium/university_course/university_course.rb', line 138

def outdated_lecture?
  hash? and hash?[:outdated_lecture]
end

#remote_URL?Boolean

#

remote_URL?

#

Returns:

  • (Boolean)


145
146
147
# File 'lib/studium/university_course/university_course.rb', line 145

def remote_URL?
  return_remote_URL(lecture_name?)
end

#resetObject

#

reset (reset tag)

#


40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/studium/university_course/university_course.rb', line 40

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === :lecture_name
  # ======================================================================= #
  @internal_hash[:lecture_name] = nil
  # ======================================================================= #
  # === :we_work_on_this_individual_curriculum
  # ======================================================================= #
  @internal_hash[:we_work_on_this_individual_curriculum] = nil
end

#runObject

#

run (run tag)

#


371
372
# File 'lib/studium/university_course/university_course.rb', line 371

def run
end

#semester?Boolean

#

semester?

#

Returns:

  • (Boolean)


269
270
271
# File 'lib/studium/university_course/university_course.rb', line 269

def semester?
  hash? and hash?[:semester]
end

#set_lecture_name(i) ⇒ Object

#

set_lecture_name

#


364
365
366
# File 'lib/studium/university_course/university_course.rb', line 364

def set_lecture_name(i)
  @internal_hash[:lecture_name] = i
end

#set_we_work_on_this_individual_curriculum(i) ⇒ Object

#

set_we_work_on_this_individual_curriculum

#


56
57
58
# File 'lib/studium/university_course/university_course.rb', line 56

def set_we_work_on_this_individual_curriculum(i)
  @internal_hash[:we_work_on_this_individual_curriculum] = i
end

#university?Boolean

#

university?

#

Returns:

  • (Boolean)


177
178
179
# File 'lib/studium/university_course/university_course.rb', line 177

def university?
  hash? and hash?[:university]
end

#upcoming_exams?Boolean Also known as: upcoming_exam?

#

upcoming_exams?

#

Returns:

  • (Boolean)


241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
# File 'lib/studium/university_course/university_course.rb', line 241

def upcoming_exams? # === upcoming_exams?
  today = ::Time.now
  _ = exams?
  # ======================================================================= #
  # Next, filter for upcoming exams:
  # ======================================================================= #
  _ = _.flatten.map {|entry|
    entry = entry.dup if entry.frozen?
    entry.squeeze!(' ')
    if entry.include? 'Ort: '
      entry = entry.split('Ort:').first.to_s
    end
    entry.delete!(',')
    entry = remove_german_days(entry)
    if entry.include? '-'
      entry = entry.split('-').first.to_s
    end
    ::Time.parse(entry)
  }
  possible_upcoming_exams = _.select {|entry|
    entry > today
  }
  return possible_upcoming_exams
end

#we_work_on_this_individual_curriculum?Boolean Also known as: which_individual_curriculum?

#

we_work_on_this_individual_curriculum?

#

Returns:

  • (Boolean)


110
111
112
# File 'lib/studium/university_course/university_course.rb', line 110

def we_work_on_this_individual_curriculum?
  @internal_hash[:we_work_on_this_individual_curriculum]
end