Class: Studium::SolvedEcts

Inherits:
Base
  • Object
show all
Defined in:
lib/studium/ects/solved_ects/reset.rb,
lib/studium/ects/solved_ects/constants.rb,
lib/studium/ects/solved_ects/solved_ects.rb

Overview

Studium::SolvedEcts

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect
DEFAULT_ECTS_POINTS_TO_SEARCH_FOR =
#

DEFAULT_ECTS_POINTS_TO_SEARCH_FOR

By default, we will look for n ECTS points - usually being 3.0 ECTS points. Most lectures conform to that number.

#
3.0

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

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, #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(commandline_arguments = ARGV, run_already = true) ⇒ SolvedEcts

#

initialize

#


32
33
34
35
36
37
38
39
40
41
42
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 32

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

Class Method Details

.[](i = '') ⇒ Object

#

Studium::SolvedEcts[]

#


316
317
318
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 316

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

Instance Method Details

#check_for_help(i) ⇒ Object

#

check_for_help

#


94
95
96
97
98
99
100
101
102
103
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 94

def check_for_help(i)
  i = i.join(' ').strip if i.is_a? Array
  # ======================================================================= #
  # === solved_ects --help
  # ======================================================================= #
  if i =~ /-?-?help/
    show_help
    exit
  end
end

#dataset?Boolean Also known as: dataset

#

dataset?

#

Returns:

  • (Boolean)


236
237
238
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 236

def dataset?
  @dataset
end

#filter_away_incorrect_n_ects_pointsObject

#

filter_away_incorrect_n_ects_points

#


173
174
175
176
177
178
179
180
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 173

def filter_away_incorrect_n_ects_points
  _ = n_ects_points?
  @dataset.select! {|line|
    splitted = line.split('|').map(&:strip)
    n_ects_points = splitted[2].to_f
    n_ects_points == _
  }
end

#filter_away_non_bachelor_lecturesObject

#

filter_away_non_bachelor_lectures

This method will filter away all non-bachelor lectures.

#


200
201
202
203
204
205
206
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 200

def filter_away_non_bachelor_lectures
  @dataset.select! {|line|
    splitted = line.split('|').map(&:strip)
    type_of_lecture = splitted[5].strip
    type_of_lecture.include? 'B' # This is correct for now.
  }
end

#filter_away_non_master_lecturesObject

#

filter_away_non_master_lectures

This method will filter away all non-master lectures.

#


187
188
189
190
191
192
193
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 187

def filter_away_non_master_lectures
  @dataset.select! {|line|
    splitted = line.split('|').map(&:strip)
    type_of_lecture = splitted[5].strip
    type_of_lecture.include? 'M'
  }
end

#filter_only_at_this_university(at_this_university) ⇒ Object

#

filter_only_at_this_university

#


222
223
224
225
226
227
228
229
230
231
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 222

def filter_only_at_this_university(at_this_university)
  # ======================================================================= #
  # The filter will only select the proper university.
  # ======================================================================= #
  dataset.select! {|line|
    splitted = line.split('|').map(&:strip)
    this_university = splitted[4].downcase # Downcase it here.
    this_university == at_this_university.downcase # And also compare it with a downcased variant.
  }
end

#main_file?Boolean

#

main_file?

#

Returns:

  • (Boolean)


47
48
49
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 47

def main_file?
  FILE_PASSED_EXAMS_PER_MONTH
end

#parse_commandline_argumentsObject

#

parse_commandline_arguments

Note that this method must be invoked after @dataset has already been set.

#


127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 127

def parse_commandline_arguments
  @commandline_arguments.each {|entry|
    case entry # case tag
    # ===================================================================== #
    # === solved_ects 2.0
    #
    # Determine how many ECTS points to search for. By default we will 
    # use 3.0 ECTS points.
    # ===================================================================== #
    when /\d{1,2}.?\d{0,1}/
      set_search_for_n_ects_points(entry)
    # ===================================================================== #
    # === solved_ects --also-show-themes
    # ===================================================================== #
    when /^-?-?also-?show-?themes/
      @also_show_themes = true
    # ======================================================================= #
    # === solved_ects --only-at-the-BOKU
    # ======================================================================= #
    when /^-?-?only-?at-?the-?(.+)/
      _ = $1.to_s.dup
      filter_only_at_this_university(_) # ectszahl 3.0 --only-bachelor --only-at-the-BOKU
      @only_at_this_university = _
    # ===================================================================== #
    # === solved_ects --only-master
    # ===================================================================== #
    when /^-?-?only(-|_)?master$/,
         /^-?-?master/,
         :master
      filter_away_non_master_lectures
      @bachelor_or_master = 'master'
    # ===================================================================== #
    # === solved_ects --only-bachelor
    # ===================================================================== #
    when /^-?-?only(-|_)?bachelor/,
         /^-?-?bachelor$/,
         :bachelor
      filter_away_non_bachelor_lectures
      @bachelor_or_master = 'bachelor'
    end
  }
end

#report_resultObject Also known as: report

#

report_result

#


259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 259

def report_result
  if @dataset.empty?
    e "No matching result was found to have exactly "\
      "#{sfancy(n_ects_points.to_s)} ECTS points."
  else
    show_header
    @dataset.each_with_index {|line, index| index += 1
      splitted = line.split('|').map(&:strip)
      date_of_the_lecture = splitted.first
      name_of_the_lecture = splitted.last
      bachelor_or_master  = olivedrab(splitted[5].center(3))
      formatted_index = orange( "#{index}) ".rjust(5) )
      colourized_date_of_the_lecture = lightgreen(date_of_the_lecture)
      n_ects = splitted[2]
      colourized_n_ects = royalblue(" [#{n_ects} ECTS]")
      colourized_grade = dodgerblue(" #{splitted[3]}")
      # ===================================================================== #
      # Next display our findings to the user:
      # ===================================================================== #
      e formatted_index+
        sfancy(name_of_the_lecture.ljust(84))+
        darkgreen(' | ')+
        bachelor_or_master+' '+
        colourized_date_of_the_lecture+
        colourized_n_ects+
        colourized_grade
      # ===================================================================== #
      # Honour the showing of the associated lecture-themes next.
      # ===================================================================== #
      if @also_show_themes and @theme_of_exams
        key = "#{date_of_the_lecture}, #{name_of_the_lecture}"
        if @theme_of_exams.has_key? key
          array_associated_themes = @theme_of_exams[key]
          string_to_display = array_associated_themes.sort.join(', ').strip
          result = (' ' * 80)+
                   ' | '+
                   forestgreen("- #{string_to_display}")
          e result
        end
      end
    }; e
  end
end

#resetObject

#

reset

#


17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/studium/ects/solved_ects/reset.rb', line 17

def reset
  super()
  # ======================================================================= #
  # === @namespace
  # ======================================================================= #
  @namespace = NAMESPACE
  # ======================================================================= #
  # === @search_for_n_ects_points
  # ======================================================================= #
  @search_for_n_ects_points = nil # Default value.
  # ======================================================================= #
  # === Ensure that our main file exists before trying to load it.
  # ======================================================================= #
  if File.exist? main_file?
    @dataset = ::Studium.completed_exams?
  else
    e "No file called `#{sfile(main_file?)}` exists. We thus can "\
      "not continue to work and will exit as a consequence."
    exit
  end
  # ======================================================================= #
  # === @also_show_themes
  #
  # If the following variable is set to true then we will also show
  # the assorted theme.
  # ======================================================================= #
  @also_show_themes = false
  # ======================================================================= #
  # === @only_at_this_university
  # ======================================================================= #
  @only_at_this_university = nil
  # ======================================================================= #
  # === @bachelor_or_master
  # ======================================================================= #
  @bachelor_or_master = ''
end

#runObject

#

run (run tag)

#


306
307
308
309
310
311
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 306

def run
  parse_commandline_arguments
  safeguard_against_nil_values
  filter_away_incorrect_n_ects_points
  report_result
end

#safeguard_against_nil_valuesObject

#

safeguard_against_nil_values

Handle any potential nil values here.

#


213
214
215
216
217
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 213

def safeguard_against_nil_values
  if @search_for_n_ects_points.nil?
    @search_for_n_ects_points = DEFAULT_ECTS_POINTS_TO_SEARCH_FOR
  end
end

#search_for_n_ects_points?Boolean Also known as: n_ects_points?, n_ects_points

#

search_for_n_ects_points?

#

Returns:

  • (Boolean)


116
117
118
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 116

def search_for_n_ects_points?
  @search_for_n_ects_points
end

#set_search_for_n_ects_points(i) ⇒ Object

#

set_search_for_n_ects_points

#


108
109
110
111
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 108

def set_search_for_n_ects_points(i)
  i = i.first if i.is_a? Array
  @search_for_n_ects_points = i.to_f # This must be kept as a Float.
end

#show_headerObject

#

show_header

#


243
244
245
246
247
248
249
250
251
252
253
254
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 243

def show_header
  _ = rev+
      'Next showing all passed '+@bachelor_or_master+' exams that '\
      'have '+sfancy(n_ects_points.to_s)+' ECTS points'
  _.squeeze!(' ')
  if @only_at_this_university
    _ << " at the university #{@only_at_this_university}"
  end
  _ << ':'
  e _
  e
end

#show_helpObject

#

show_help (help tag)

To invoke this method from the commandline, do:

solved_ects --help

To invoke other combinations, do:

solved_ects 2.0 --only-bachelor
#


63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/studium/ects/solved_ects/solved_ects.rb', line 63

def show_help
  invoke_this_program_via_this_command = 'solved_ects'
  e
  opnn; e 'This class will specifically display all passed exams '\
          'that correspond'
  opnn; e 'to the given amount of ECTS points that were passed '\
          'as argument.'
  e
  opnn; e "For example, if your input is #{orange('2.0')}, then we "\
          "will display all"
  opnn; e 'exams that correspond to exactly 2.0 ECTS.'
  e
  opnn; e 'This thus allows you to, for instance, keep track of exams that'
  opnn; e 'may correspond to another exam in regards to its equivalency.'
  e
  opnn; e 'If you wish to show only Master exams, then use any of the '\
          '(synonymous) options containing the string "master",'
  opnn; e 'in the following display:'
  e
  e "  #{invoke_this_program_via_this_command} 2.0"
  e "  #{invoke_this_program_via_this_command} 2.0 --only-bachelor"
  e "  #{invoke_this_program_via_this_command} 2.0 --only-master"
  e "  #{invoke_this_program_via_this_command} 2.0 --bachelor"
  e "  #{invoke_this_program_via_this_command} 2.0 --master"
  e "  #{invoke_this_program_via_this_command} 3.0 --only-bachelor --only-at-the-BOKU"
  e
end