Class: Studium::ShowAllLectures

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

Overview

Studium::ShowAllLectures

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect
ALSO_SHOW_REMOTE_URL =
#

ALSO_SHOW_REMOTE_URL

If true then we will also show the remote URL on the terminal.

#
true
SAVE_FILE =
#

SAVE_FILE

#
Studium.html_log_directory?+'Vorlesungsverzeichnis.html'
CURRENT_YEAR =
#

CURRENT_YEAR

#
Time.now.year.to_s
CURRENT_SEMESTER =
#

CURRENT_SEMESTER

#
'S'+CURRENT_YEAR
REMOTE_URL =
#

REMOTE_URL

#
'http://online.univie.ac.at/vlvz?kapitel=3001&semester='+CURRENT_SEMESTER
REGEX_FOR_IDS =
#

REGEX_FOR_IDS

We need the ID of the lecture, the type of the lecture and the name of the lecture. This is what the following regex will obtain.

For the following regex, see this link:

http://rubular.com/r/IrKZKqfRAh
#
/<div class="vlvz_langtitel">(\d+) <abbr title=".+">(.*{1,2})<\/abbr><span class="vlvz_titel">(.+)<\/span><\/div>/

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(i = nil, run_already = true) ⇒ ShowAllLectures

#

initialize

#


83
84
85
86
87
88
89
90
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 83

def initialize(
    i           = nil,
    run_already = true
  )
  reset
  set_input(i)
  run if run_already
end

Instance Method Details

#analyze_big_lecture_chunk(i) ⇒ Object

#

analyze_big_lecture_chunk

#


291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 291

def analyze_big_lecture_chunk(i)
  i.delete(N) if i.include? N # We don't like newlines here.
  # ======================================================================= #
  # Next, find out the name of the lecturer(s).
  # ======================================================================= #
  if i.include? '<div class="vlvz_vortragende">N.N.</div>'
    name_of_lecturers = [ swarn('unknown lecturers') ]
  else
    name_of_lecturers =
      #i.scan(/<div class="vlvz_vortragende">(<a href=".*">.* <\/a>)/).flatten.first
      i.scan(/<div class="vlvz_vortragende"><a href="pers\?pkey=\d+">(.+) <\/a>/).flatten.first
  end
  # ======================================================================= #
  # Next comes a slight hack. We will chop to the first '</a></div>'
  # if it exists.
  # ======================================================================= #
  if name_of_lecturers.include? '</a></div>'
    name_of_lecturers = name_of_lecturers[0..(name_of_lecturers.index('</a></div>')-1)]
  end
  name_of_lecturers = remove_html(name_of_lecturers)
  name_of_lecturers = name_of_lecturers.split(',').map(&:strip)
  regex_for_hours_and_ects_points = 
    /<div class="vlvz_wochenstunden">(\d+ Stunde\(n\),\s+\d+,\d+ ECTS) credits<\/div>/
  hours_and_ects_points  = i.scan(regex_for_hours_and_ects_points).flatten.first.squeeze(' ')
  n_hours, n_ects_points = hours_and_ects_points.split('),').map(&:strip)  
  lecture_id, lecture_type, name_of_lecture = i.scan(REGEX_FOR_IDS).flatten
  original_lecture_id = lecture_id.to_s.dup
  lecture_id          = lecture_id.center(10)
  lecture_id          = colourize_lecture_id(lecture_id)
  name_of_lecture     = sanitize_encoding(name_of_lecture).strip
  name_of_lecturers   = name_of_lecturers.join(', ')
  name_of_lecturers   = sanitize_encoding(name_of_lecturers)
  name_of_lecturers   = name_of_lecturers.center(16)
  lecture_type        = lecture_type.center(5)
  lecture_type        = colourize_lecture_type(lecture_type)
  n_hours             = n_hours.gsub(/Stunde\(n/,'').to_f.to_s.center(5)
  n_hours             = colourize_hours_per_week(n_hours)
  show_main_header # Show the main header first.
  e lecture_id+' | '+lecture_type+' |   '+
    colourize_name_of_lecture(name_of_lecture.ljust(50-2))+' | '+
    colourize_lecturers(name_of_lecturers)+' | '+
    n_hours+' | '+
    colourize_ects(n_ects_points.gsub(/ECTS/,'').tr(',','.'))
  if show_remote_url?
    remote_url = '                     http://online.univie.ac.at/vlvz?&lvnr='+
                 original_lecture_id+'&semester='+CURRENT_SEMESTER
    e
    e yellow(remote_url)
    e
  end
end

#colourize_ects(i) ⇒ Object

#

colourize_ects

#


248
249
250
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 248

def colourize_ects(i)
  orange(i)
end

#colourize_hours_per_week(i) ⇒ Object

#

colourize_hours_per_week

#


379
380
381
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 379

def colourize_hours_per_week(i)
  dodgerblue(i)
end

#colourize_lecture_id(i) ⇒ Object

#

colourize_lecture_id

#


226
227
228
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 226

def colourize_lecture_id(i)
  paleturquoise(i)
end

#colourize_lecture_type(i) ⇒ Object

#

colourize_lecture_type

#


372
373
374
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 372

def colourize_lecture_type(i)
  lawngreen(i)
end

#colourize_lecturers(i) ⇒ Object

#

colourize_lecturers

#


255
256
257
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 255

def colourize_lecturers(i)
  slateblue(i)
end

#colourize_name_of_lecture(i) ⇒ Object

#

colourize_name_of_lecture

#


219
220
221
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 219

def colourize_name_of_lecture(i)
  mediumorchid(i)
end

#dataset?Boolean

#

dataset?

#

Returns:

  • (Boolean)


193
194
195
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 193

def dataset?
  @dataset
end

#display_main_headerObject Also known as: show_main_header

#

display_main_header

This method will display the header for a given lecture at hand.

#


355
356
357
358
359
360
361
362
363
364
365
366
367
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 355

def display_main_header
  e colourize_lecture_id('Lecture ID')+
    ' | '+
    colourize_lecture_type('Type'.ljust(5))+
    ' | '+
    colourize_name_of_lecture('Name of Lecture'.ljust(50))+
    ' | '+
    colourize_lecturers('Lecturers'.center(16))+
    ' | '+
    colourize_hours_per_week('hours per week')+
    ' | '+
    colourize_ects('ECTS credits')
end

#do_update_save_file(i = SAVE_FILE) ⇒ Object

#

do_update_save_file

#


149
150
151
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 149

def do_update_save_file(i = SAVE_FILE)
  File.delete(i) if File.exist? i
end

#download_remote_pageObject

#

download_remote_page

#


163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 163

def download_remote_page
  # ======================================================================= #
  # Here, we either read from the already downloaded dataset, or we
  # will download again.
  # ======================================================================= #
  if File.exist? SAVE_FILE
    opnn; e 'We will read from the file `'+sfile(SAVE_FILE)+'`.'
    @dataset = File.read(SAVE_FILE)
  else
    _ = remote_url?
    opnn; e 'We will read from the remote URL `'+sfancy(_)+'`.'
    @dataset = open(_).read
  end
  @original_dataset = @dataset.dup # Keep a reference copy.
  # ======================================================================= #
  # Also save the original dataset.
  # ======================================================================= #
  save_original_dataset
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


156
157
158
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 156

def input?
  @input
end
#

menu (menu tag)

#


129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 129

def menu(i)
  case i # case tag
  # ======================================================================= #
  # === show_all_lectures --help
  # ======================================================================= #
  when /-?-?help/
    show_help
    exit
  # ======================================================================= #
  # === show_all_lectures --update
  # ======================================================================= #
  when /-?-?update/
    opnn; e 'Updating main entry.'
    do_update_save_file
  end
end

#obtain_name_of_lecturer_amount_of_hours_and_ects_pointsObject

#

obtain_name_of_lecturer_amount_of_hours_and_ects_points

Here we have to re-scan the dataset, in order to extract more information from the original dataset.

#


265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 265

def obtain_name_of_lecturer_amount_of_hours_and_ects_points
  @original_dataset.split(N).each {|line|
    if line =~ REGEX_FOR_IDS
      if @usher.open? # In this case it must be a new line.
        analyze_big_lecture_chunk(@usher.string?)
        @usher.reset
      else # It must be in closed-state past here.
        @usher.do_open
      end
      @usher << line
    else
      @usher << line
    end
  }
end

#remote_url?Boolean

#

remote_url?

#

Returns:

  • (Boolean)


104
105
106
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 104

def remote_url?
  REMOTE_URL
end

#remove_html(i) ⇒ Object

#

remove_html

#


346
347
348
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 346

def remove_html(i)
  Roebe.remove_html(i)
end

#resetObject

#

reset (reset tag)

#


95
96
97
98
99
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 95

def reset
  super()
  @hash_for_ids = {}
  @namespace = NAMESPACE
end

#runObject

#

run (run tag)

#


386
387
388
389
390
391
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 386

def run
  download_remote_page
  scan_for_all_ids
  sanitize_dataset
  obtain_name_of_lecturer_amount_of_hours_and_ects_points
end

#sanitize_datasetObject

#

sanitize_dataset

Currently we only strip the second entry.

#


209
210
211
212
213
214
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 209

def sanitize_dataset
  @dataset.map! {|entry|
    entry[2].strip! # This is the right entry to strip.
    entry
  }
end

#sanitize_encoding(i) ⇒ Object

#

sanitize_encoding

#


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

def sanitize_encoding(i)
  case i.encoding.to_s
  when ENCODING_UTF
    # ===================================================================== #
    # Convert to ISO then.
    # ===================================================================== #
    i = i.force_encoding(ENCODING_ISO)
  end
  require 'cyberweb/toplevel_methods/umlaute.rb'
  WebObject.convert_back_german_umlauts(i) # Cyberweb will handle this for us.
end

#save_original_datasetObject

#

save_original_dataset

#


186
187
188
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 186

def save_original_dataset
  write_what_into(@dataset, SAVE_FILE) 
end

#scan_for_all_idsObject

#

scan_for_all_ids

#


200
201
202
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 200

def scan_for_all_ids
  @dataset = @dataset.scan(REGEX_FOR_IDS)
end

#set_input(i = '') ⇒ Object

#

set_input

#


111
112
113
114
115
116
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 111

def set_input(i = '')
  i = i.first if i.is_a? Array
  i = i.to_s.dup
  @input = i
  menu(@input)
end

#show_helpObject

#

show_help (help tag)

#


121
122
123
124
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 121

def show_help
  require 'class_docu_shower'
  ClassDocuShower.new(__FILE__) { :do_not_report_the_filename }
end

#show_remote_url?Boolean

#

show_remote_url?

#

Returns:

  • (Boolean)


284
285
286
# File 'lib/studium/utility_scripts/show_all_lectures.rb', line 284

def show_remote_url?
  ALSO_SHOW_REMOTE_URL
end