Class: Studium::Exams::UpcomingRegisteredExams

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

Overview

Studium::Exams::UpcomingRegisteredExams

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 = ARGV, run_already = true) ⇒ UpcomingRegisteredExams

#

initialize

#


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

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

Class Method Details

.[](i = ARGV) ⇒ Object

#

Studium::Exams::UpcomingRegisteredExams[]

#


249
250
251
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 249

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

Instance Method Details

#do_generate_a_HTML_fileObject

#

do_generate_a_HTML_file

This method can be used to generate a standalone .html file.

Usage example:

upcomingregisteredexams --html
#


233
234
235
236
237
238
239
240
241
242
243
244
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 233

def do_generate_a_HTML_file
  what = Cyberweb.html_template(
    title: 'Upcoming registered exams',
    body_css_style: 'padding: 4px; font-size: 1.4em;',
    body:  @internal_hash[:html_content]
  )
  into = "#{log_dir?}upcoming_registered_exams.html"
  write_what_into(what, into)
  if is_on_roebe?
    Open.in_browser(into)
  end
end

#do_handle_all_outdated_entries_from(i) ⇒ Object

#

do_handle_all_outdated_entries_from

#


136
137
138
139
140
141
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 136

def do_handle_all_outdated_entries_from(i)
  outdated_entries = return_outdated_entries(i)
  unless outdated_entries.empty?
    do_report_these_outdated_entries(outdated_entries)
  end
end

#do_report_these_outdated_entries(i) ⇒ Object

#

do_report_these_outdated_entries

#


102
103
104
105
106
107
108
109
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 102

def do_report_these_outdated_entries(i)
  e tomato('The following exam entries are outdated:')
  e
  i.keys.each {|this_entry|
    e "  #{lightblue(this_entry)}"
  }
  e
end

#generate_a_HTML_file?Boolean

#

generate_a_HTML_file?

#

Returns:

  • (Boolean)


95
96
97
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 95

def generate_a_HTML_file?
  @internal_hash[:shall_we_generate_a_HTML_file]
end
#

menu (menu tag)

#


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 61

def menu(
    i = commandline_arguments?
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i
    # ===================================================================== #
    # === --help
    # ===================================================================== #
    when /^-?-?help$/i
      show_help
      exit
    # ===================================================================== #
    # === --html
    # ===================================================================== #
    when /^-?-?html$/i
      @internal_hash[:shall_we_generate_a_HTML_file] = true
    end
  end
end

#resetObject

#

reset (reset tag)

#


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 40

def reset
  super()
  infer_the_namespace
  reset_the_internal_hash
  # ======================================================================= #
  # === :dataset
  # ======================================================================= #
  @internal_hash[:dataset] = dataset_from_file_lecture_information
  # ======================================================================= #
  # === :shall_we_generate_a_HTML_file
  # ======================================================================= #
  @internal_hash[:shall_we_generate_a_HTML_file] = false
  # ======================================================================= #
  # === :html_content
  # ======================================================================= #
  @internal_hash[:html_content] = nil
end

#return_outdated_entries(i) ⇒ Object

#

return_outdated_entries

#


114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 114

def return_outdated_entries(i)
  time_now = ::Time.now
  # ======================================================================= #
  # Now we have all valid entries. First check for outdated entries.
  # ======================================================================= #
  outdated_entries = i.select {|name_of_the_lecture, inner_hash|
    registered = inner_hash['registered']
    first_entry = registered.first
    first_entry.delete!(',')
    if first_entry.include? 'Ort:'
      first_entry = first_entry.split('Ort:').first
    end
    first_entry.strip!
    registered_time = ::Time.parse(first_entry)
    registered_time < time_now
  }
  return outdated_entries
end

#return_registered_exam_entries(i = ) ⇒ Object

#

return_registered_exam_entries

#


146
147
148
149
150
151
152
153
154
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 146

def return_registered_exam_entries(
    i = @internal_hash[:dataset]
  )
  _ = i.select {|name_of_the_lecture, inner_hash|
    inner_hash.has_key?('registered') and
   !inner_hash['registered'].empty?
  }
  return _
end

#runObject

#

run (run tag)

#


159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
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
# File 'lib/studium/exams/upcoming_registered_exams/upcoming_registered_exams.rb', line 159

def run
  menu
  html_content = ''.dup if generate_a_HTML_file?
  # ======================================================================= #
  # First, we will select all entries with a "registered:" entry.
  # ======================================================================= #
  _ = return_registered_exam_entries
  do_handle_all_outdated_entries_from(_)
  unless generate_a_HTML_file?
    e grey('The upcoming registered exams are:')
    e
  end
  index = 0
  # ======================================================================= #
  # We must sort these entries based on time
  # ======================================================================= #
  sorted_entries = _.sort_by {|name_of_the_lecture, inner_hash|
    exam_date = inner_hash['exams']
    if exam_date.is_a? Array
      exam_date = exam_date.first
    end
    if exam_date.include? 'Ort:'
      exam_date = exam_date.split('Ort:').first
    end
    exam_date.delete!(',') if exam_date.include?(',')
    ::Time.parse(exam_date)
  }
  sorted_entries.each {|name_of_the_lecture, inner_hash| index += 1
    exam_date = inner_hash['exams']
    remote_homepage = inner_hash[:homepage]
    remote_homepage = remote_homepage.first if remote_homepage.is_a?(Array)
    if exam_date.is_a? Array
      exam_date = exam_date.first
    end
    exam_date = exam_date.to_s
    if generate_a_HTML_file?
      html_content << '<div><h2 style="margin-top: 5px">'+
                      '<a href="'+remote_homepage.to_s+'">'+
                      name_of_the_lecture+'</a></h2>'
      html_content << '<span style="margin-left: 0.4em; color: darkblue; font-weight: bold;">'+
                      exam_date+'</span><br>'
      html_content << '</div>'
    else # this is the default, aka verbose output on the commandline.
      e "  #{lightblue(name_of_the_lecture.ljust(60))} "\
        "#{grey('#')}#{lightgreen(index)}"
      # =================================================================== #
      # The exam date will be a bit reformatted:
      # =================================================================== #
      if exam_date.include?(' ')
        splitted = exam_date.split(' ')
        splitted[0] = mediumslateblue(splitted[0].ljust('Donnerstag '.size))
        exam_date = splitted[0]+
                    tomato(splitted[1 .. -1].join(' '))
      end
      e "    #{exam_date}"
    end
  } 
  e
  if generate_a_HTML_file?
    @internal_hash[:html_content] = html_content
    do_generate_a_HTML_file
  end
end

#show_helpObject

#

show_help

#


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

def show_help
  e
  e '  --html # generate a standalone .html file'
  e
end