Class: Studium::AutoStud

Inherits:
Base
  • Object
show all
Defined in:
lib/studium/utility_scripts/auto_stud/misc.rb,
lib/studium/utility_scripts/auto_stud/auto_stud.rb,
lib/studium/utility_scripts/auto_stud/constants.rb,
lib/studium/utility_scripts/auto_stud/initialize.rb

Overview

AutoStud.new

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect
REGEX_MATCH_INNER_NUMBER =
#

REGEX_MATCH_INNER_NUMBER

Match the inner number, such as (5) or (6), from the file exams.yml.

#
/^# === \((\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

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

#

initialize

#


14
15
16
17
18
19
20
21
# File 'lib/studium/utility_scripts/auto_stud/initialize.rb', line 14

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

Class Method Details

.[](i = '') ⇒ Object

#

Studium::AutoStud[]

#


14
15
16
# File 'lib/studium/utility_scripts/auto_stud/misc.rb', line 14

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

Instance Method Details

#guess_lva_numberObject

#

guess_lva_number

This method will try to guess the LVA number. Only call it if the user provided only numbers as input.

#


144
145
146
147
148
149
150
151
152
153
154
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 144

def guess_lva_number
  result = @original_exams_dataset.scan(/^# === \(#{user_input?}\).+$/)
  result = result.first # Grab the first entry there.
  # ======================================================================= #
  # Next we must identify the LVA number from the input above.
  # This will be a line such as:
  #   # === (2) 15.01.2018, 770152, 09:00-11:00, Montag, Allgemeine Chemie an der BOKU, Ort: somewhere
  # ======================================================================= #
  result = result.scan(/ (\d{2,3}\.?\d{2,3})( |,)/).flatten.first
  return result 
end

#input?Boolean Also known as: user_input?

#

input?

#

Returns:

  • (Boolean)


119
120
121
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 119

def input?
  @input
end
#

menu (menu tag)

#


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
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 201

def menu(
    i = @input
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i
    # ===================================================================== #
    # === astud --max
    # ===================================================================== #
    when /^-?-?max$/
      # =================================================================== #
      # Assume that the user wants to have the max range in this case.
      # =================================================================== #
      max_value = return_max_entry_from_file_exams
      opnn; e 'Assuming a max entry of `'+sfancy(max_value.to_s)+
              '` upcoming appointments/exams.'
      set_input('1-'+max_value.to_s)
    # ===================================================================== #
    # === astud --help
    # ===================================================================== #
    when /-?-?help/i
      show_help
      exit
    end
  end
end

#resetObject

#

reset (reset tag)

#


49
50
51
52
53
54
55
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 49

def reset
  super()
  # ======================================================================= #
  # === @namespace
  # ======================================================================= #
  @namespace = NAMESPACE
end

#runObject

#

run

#


69
70
71
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 69

def run
  menu
end

#sanitize_inputObject

#

sanitize_input

#


232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 232

def sanitize_input
  @input.compact!
  @input.map! {|entry|
    if entry.is_a?(String) and entry.include?('-') and
      (entry.count('-') == 1) and (entry =~ /\d{1,2}-\d{1,2}/)
      # =================================================================== #
      # We assume that the user input a range-like object, e. g. "2-12".
      # But only if there are two surrounding numbers.
      # =================================================================== #
      splitted = entry.split('-') # => ["2", "12"]
      entry = Range.new(splitted.first, splitted.last).to_a
    end
    entry
  }
  @input.flatten!
end

#set_input(i = '') ⇒ Object

#

set_input

#


60
61
62
63
64
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 60

def set_input(i = '')
  i = [i] unless i.is_a? Array
  @input = i
  sanitize_input
end

#show_helpObject

#

show_help (help tag)

#


126
127
128
129
130
131
132
133
134
135
136
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 126

def show_help
  opnn; e 'This class currently has these available commandline options:'
  e
  e '  <number> # a number such as 1, 2, 3 and so forth. This will try to'
  e '           # find the number in the exams.yml file accordingly'
  e '           # You can also pass in a range set such as 1-15, which'
  e '           # is synonymous to doing astud 1, astud 2, astud 3 and'
  e '           # so forth. '+sfancy('--max')+' to use the maximum number'
  e '           # possible'
  e
end

#try_to_find_a_match_comparing_it_to_the_cwdObject

#

try_to_find_a_match_comparing_it_to_the_cwd

This will match against the current working directory (cwd).

#


78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 78

def try_to_find_a_match_comparing_it_to_the_cwd
  # ======================================================================= #
  # First, check for the possible LVA number.
  # ======================================================================= #
  if user_provided_input_is_a_number?
    possible_lva_number = guess_lva_number
  else # else use the current working directory
    _ = return_pwd
    possible_lva_number = File.basename(_)
    # ======================================================================= #
    # Split it up on every '_' and then grab the first element. This does
    # NOT have to be done if the user supplied only a number.
    # ======================================================================= #
    possible_lva_number = possible_lva_number.split('_').first
  end
  selection = @exams_dataset.select {|line| line.include? possible_lva_number }
  unless selection.empty?
    # ===================================================================== #
    # This clause is entered when we have found at the least one match.
    # In this case, the next step is to determine how many selections
    # are matching. If we have only one match, then we can continue.
    # ===================================================================== #
    if selection.size > 1 # This is a more complicated case.
      opnn; e 'Something seems to be wrong with the dataset '\
              'as more than one result was found:'
      pp selection 
    elsif selection.size == 1
      # =================================================================== #
      # This here is the best outcome. Obtain the number.
      # =================================================================== #
      first = selection.first
      first =~ REGEX_MATCH_INNER_NUMBER
      number = $1.to_s.dup # <- This should be the correct number.
      Studium::NewStud[number]
    end
  end
end

#user_provided_input_is_a_number?Boolean Also known as: only_numbers?

#

user_provided_input_is_a_number?

#

Returns:

  • (Boolean)


159
160
161
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 159

def user_provided_input_is_a_number?
  (user_input? =~ /^\d+$/)
end

#work_through_the_given_inputObject

#

work_through_the_given_input

#


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
# File 'lib/studium/utility_scripts/auto_stud/auto_stud.rb', line 166

def work_through_the_given_input
  if @input.empty?
    opnn; e 'Please provide a number to this class.'
  else
    @input.each {|number|
      if number =~ /^\d+$/ # Really handle only numbers here.
        target_directory = Studium.determine_exam_directory(number)
        if target_directory.nil?
          opnn; e 'No match has been found.'
        elsif target_directory.is_a?(Array) and
          !target_directory.empty?
          cd_to_this_dir = target_directory.first
          if File.directory? cd_to_this_dir
            opnn; e "Changing directory into `#{sdir(cd_to_this_dir)}` next."
            cd(cd_to_this_dir)
            opnn; e 'Assuming the number `'+sfancy(number)+'`. '\
                    'Passing this into '+yellow('Studium::NewStud[]')+'.'
            Studium::NewStud[number]
          else
            opnn; e 'No directory exists at `'+sdir(cd_to_this_dir)+'`.'
          end
          if target_directory.size > 1
            opnn; e 'Note that there were at the least two '\
                    'entries for '+orange('target_directory')+'.'
            pp target_directory
          end
        end
      end
    }
  end
end