Class: Studium::Exams::UpcomingExamsDataset

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

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect
REGEX_FOR_DD_MM_YYYY_NOTATION =
#

REGEX_FOR_DD_MM_YYYY_NOTATION

#
/(\d{1,2}\.\d{1,2}\.\d{4}),/
REGEX_FOR_THE_EXACT_TIME_ON_THE_EXAM_DAY =
#

REGEX_FOR_THE_EXACT_TIME_ON_THE_EXAM_DAY

See this URL for checking:

http://rubular.com/r/82GZwIAkV9
#
/ (\d{1,2}:\d{1,2}-\d{1,2}:\d{1,2})/

Constants inherited from Base

Base::ARRAY_HTML_COLOURS_IN_USE, Base::CHECK_FOR_INCORRECT_ENTRIES_IN_THE_QUESTION_ANSWER_FILE_THAT_SHOULD_BE_COMMENTS, Base::COLOURS, Base::COMMON_YEAR_DAYS_IN_MONTH, Base::GRAY, Base::LEFT_PADDING, Base::N_CHARACTERS_PER_LINE, Base::UNICODE_RIGHT_ARROW

Constants included from Colours

Colours::COLOURS

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, #base_dir?, #be_silent, #be_verbose?, #beautiful_url, #change_directory, #cheering_person, #cliner, #colour_for_ects_points, #colourize_percentage, #commandline_arguments?, #commandline_arguments_joined, #commandline_arguments_with_hyphens?, #convert_this_array_of_lectures_into_the_full_dataset, #copy, #cpruby, #create_directory, #create_file, #csv_file?, #current_month?, #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?, #e, #ecomment, #editor?, #ee, #enable_colours, #enable_colours_globally, #enable_debug, #encoding?, #english_to_german_weekday, #ensure_main_encoding, #ensure_that_the_log_directory_exists, #eparse, #erev, #esystem, #etomato, #exit_program, #expand_topic, #extract_dd_mm_yyyy, #file_lecture_information?, #file_read_with_proper_encoding, #filter_away_invalid_questions, #find_corresponding_exam_topic, #first_argument?, #first_non_hyphen_argument?, #from_curriculum_id_to_university, #german_date_notation, #german_weekday?, #german_weekdays?, #has_a_bachelor_curriculum?, #has_a_master_curriculum?, #has_this_exam_topic_been_solved?, #has_year_entry?, #hh_mm_ss_dd_mm_yyyy, #horizontal_bar?, #html_log_directory?, #is_a_master_lecture?, #is_a_weekday?, #is_connected_to_the_www?, #is_on_roebe?, #is_prüfungsimmanent?, #is_this_a_valid_html_colour?, #is_this_day_today?, #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, #load_yaml_dataset, #move_file, #n_days_difference_from_today_to_this_day, #no_ext_name, #no_file_at, #number_to_month, #obtain, #obtain_lectures_from_this_curriculum, #open_in_editor, #opnn, #path_to_exam_topic?, #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, #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, #rev, #right_arrow?, #rinstall2, #roebe_exam_directory?, #ruby_src_dir_at_home?, #runmode?, #sanitize_this_topic, #sanitize_url, #select_lectures_with_this_key, #set_be_quiet, #set_be_verbose, #set_commandline_arguments, #set_commandline_mode, #set_runmode, #set_this_cd_alias_to, #set_www_mode, #sfancy, #shall_we_make_use_of_unicode_symbols?, #show_todays_date, #simp, #sort_these_lecture_names_by_time, #spacer, #swarn, #this_month_has_n_days?, #total_ects_points_passed, #translate_dd_mm_yyyy_to_weekday, #try_to_require_the_rcfiles, #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, #www_mode?, #yaml_dir?

Methods included from Colours

#bold_blue, #bold_red, #bold_yellow, #cadetblue, #chartreuse, crimson, #darkgray, darkgreen, darkseagreen, deepskyblue, #deepskyblue, default_colour, #dimgray, disable_colours, #dodgerblue, e, #efancy, enable_colours, #ewarn, #forestgreen, gold, #grey, lightblue, lightgreen, #lightslategray, #lightsteelblue, #mediumorchid, #mediumseagreen, #oldlace, #olivedrab, orange, orangered, #orchid, palevioletred, #papayawhip, rev, royalblue, sdir, #sdir, sfancy, #sfancy, sfile, #sfile, simp, #simp, slateblue, steelblue, #steelblue, #swarn, swarn, #teal, turquoise, use_colours?, use_this_colour_for_exam_answers, use_this_colour_for_exam_questions, #yellow

Constructor Details

#initialize(run_already = true) ⇒ UpcomingExamsDataset

#

initialize

#


56
57
58
59
60
61
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 56

def initialize(
    run_already = true
  )
  reset
  run if run_already
end

Instance Method Details

#[](i) ⇒ Object

#

[]

#


168
169
170
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 168

def [](i)
  @hash_exam_dates[i]
end

#exam_dates?Boolean

#

exam_dates?

#

Returns:

  • (Boolean)


132
133
134
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 132

def exam_dates?
  @hash_exam_dates
end

#exam_on_this_day?(i = '08.03.2018') ⇒ Boolean

#

exam_on_this_day?

This method will return a Boolean - thus either true or false.

It must return true if there is any (at the least one) exam on the given date - otherwise it will return false.

The recommended format is in the dd.mm.yyyy notation.

#

Returns:

  • (Boolean)


182
183
184
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 182

def exam_on_this_day?(i = '08.03.2018')
  @array_containing_exam_dates.include? i
end

#has_key?(this_key) ⇒ Boolean

#

has_key?

#

Returns:

  • (Boolean)


139
140
141
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 139

def has_key?(this_key)
  @hash_exam_dates.has_key?(this_key)
end

#load_dataset_from_the_exams_fileObject

#

load_dataset_from_the_exams_file

Note that this depends on the file

"/home/x/STUDIUM/YAML/exams.yml"
#


86
87
88
89
90
91
92
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 86

def load_dataset_from_the_exams_file
  if File.exist? FILE_EXAMS
    @dataset = read_file(FILE_EXAMS)
  else
    opnn; e "Can not load from file `#{sfile(FILE_EXAMS)}`."
  end
end

#purge_this_line(line) ⇒ Object

#

purge_this_line

This will remove the line from the Hash.

#


99
100
101
102
103
104
105
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 99

def purge_this_line(line)
  if @hash_exam_dates.has_value?(line)
    @hash_exam_dates.reject! {|key, value|
      value == line
    }
  end
end

#resetObject

#

reset

#


66
67
68
69
70
71
72
73
74
75
76
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 66

def reset
  super()
  # ========================================================================= #
  # === @array_containing_exam_dates
  # ========================================================================= #
  @array_containing_exam_dates = []
  # ========================================================================= #
  # === @hash_exam_dates
  # ========================================================================= #
  @hash_exam_dates = {}
end

#return_date_and_time_of(line) ⇒ Object

#

return_date_and_time_of

This method shall return a String such as:

08.03.2018, 17:00-18:45
#


151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 151

def return_date_and_time_of(line)
  _ = ''.dup
  # ========================================================================= #
  # First, find the dd.mm.yyyy notation.
  # ========================================================================= #
  _ << line.scan(REGEX_FOR_DD_MM_YYYY_NOTATION).flatten.first.to_s
  _ << ', '
  # ========================================================================= #
  # Next, find the exam-time on that particular day.
  # ========================================================================= # 
  _ << line.scan(REGEX_FOR_THE_EXACT_TIME_ON_THE_EXAM_DAY).flatten.first.to_s
  _
end

#return_most_likely_lecture_name_from_this_line(i = '# === (3) 16.03.2018, 300707, Freitag, Molekulare Infektionsbiologie, Ort: Hörsaal C1 UniCampus Hof 2,Spitalgasse 2,1090 Wien,Beginnzeit(zw. 15-18 Uhr) wird am Dienstag davor bekanntgegeben!') ⇒ Object

#

return_most_likely_lecture_name_from_this_line

This method will try to return the most likely name of the lecture at hand.

It will then be able to return a String such as “Molekulare Infektionsbiologie”, which represents the name of the lecture.

#


195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 195

def return_most_likely_lecture_name_from_this_line(
    i = '# === (3) 16.03.2018, 300707, Freitag, Molekulare Infektionsbiologie, Ort: Hörsaal C1 UniCampus Hof 2,Spitalgasse 2,1090 Wien,Beginnzeit(zw. 15-18 Uhr) wird am Dienstag davor bekanntgegeben!'
  )
  most_likely_lecture_name = i.dup.delete('#').sub(/ === /,'')
  # ========================================================================= #
  # Chop off entries such as (3) or (11)
  # ========================================================================= #
  most_likely_lecture_name.sub!(/\(\d{1,2}\)/,'')
  most_likely_lecture_name.strip!
  most_likely_lecture_name.delete!(',')
  most_likely_lecture_name.squeeze!(' ')
  if most_likely_lecture_name.include? 'Ort'
    most_likely_lecture_name = most_likely_lecture_name[0 .. (most_likely_lecture_name.index('Ort') -1)]
    most_likely_lecture_name.strip!
  end
  most_likely_lecture_name = remove_weekname_from(most_likely_lecture_name)
  # ========================================================================= #
  # Remove the time on that day next, such as 15:00-18:00.
  # ========================================================================= #
  most_likely_lecture_name.sub!(/\d{1,2}:\d{1,2}-\d{1,2}:\d{1,2}/,'')
  most_likely_lecture_name.squeeze!(' ')
  # ========================================================================= #
  # Next, remove date-information.
  # ========================================================================= #
  most_likely_lecture_name.sub!(/\d{1,2}\.\d{1,2}.\d{4}/,'')
  most_likely_lecture_name.squeeze!(' ')
  most_likely_lecture_name.strip!
  # ========================================================================= #
  # Now the input may look like this → "300707 Molekulare Infektionsbiologie"
  # So we just have to get rid of the numbers and there we go. But some
  # lectures may include a number as part of their name, so we can not
  # remove all numbers easily.
  # ========================================================================= #
  most_likely_lecture_name.gsub!(/^\d{1,3}\.?\d{1,3}/,'')
  most_likely_lecture_name.strip!
  most_likely_lecture_name
end

#runObject

#

run

#


236
237
238
239
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 236

def run
  load_dataset_from_the_exams_file
  scan_for_exam_entries_in_the_exams_file
end

#scan_for_exam_entries_in_the_exams_fileObject

#

scan_for_exam_entries_in_the_exams_file

#


110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/studium/exams/upcoming_exams_dataset.rb', line 110

def scan_for_exam_entries_in_the_exams_file
  use_this_regex = /^# === \(\d{1,2}\) .+$/ # See: http://rubular.com/r/UfwBiWDOqg
  regex_for_inner_date = /\)? (\d{1,2}\.\d{1,2}\.\d{4,4}),/
  scanned = @dataset.scan(use_this_regex)
  # ========================================================================= #
  # Next, determine on which day we will have exams, into an Array.
  # ========================================================================= #
  scanned.each {|line|
    # ======================================================================= #
    # The line can be:
    #   "# === (3) 05.03.2018, Strukturbiologie I, 14:00-15:30, Ort: STB/Hörsaal A Campus Vienna Biocenter 5, 1030 Wien"
    # ======================================================================= #
    the_date = line.scan(regex_for_inner_date).flatten.first # See: http://rubular.com/r/h40qQ9a3Nv
    @hash_exam_dates[the_date] = line
    @array_containing_exam_dates << the_date
    @array_containing_exam_dates.uniq!
  }
end