Class: Studium::Exams::Cycle

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

Overview

Studium::Exams::Cycle

Constant Summary collapse

STORE_WHERE =
#

Cycle::STORE_WHERE

Where we store our results, that is, the last exam topic.

cat /root/Studium/last_exam_topic.md
#
"#{Studium.log_dir?}last_exam_topic.md"

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

#

initialize

#


46
47
48
49
50
51
52
53
54
55
# File 'lib/studium/exams/cycle.rb', line 46

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

Class Method Details

.main_file?Boolean

#

Studium::Exams::Cycle.main_file?

#

Returns:

  • (Boolean)


283
284
285
# File 'lib/studium/exams/cycle.rb', line 283

def self.main_file?
  Studium.file_current_exams
end

Instance Method Details

#ask_the_question(use_this_topic = topic? ) ⇒ Object

#

ask_the_question

#


230
231
232
233
234
# File 'lib/studium/exams/cycle.rb', line 230

def ask_the_question(
    use_this_topic = topic?
  )
  ::Studium::Exams::ExamQuestion.new(use_this_topic)
end

#check_commandline(i = @commandline) ⇒ Object Also known as: menu

#

check_commandline (menu tag)

#


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
222
223
224
225
# File 'lib/studium/exams/cycle.rb', line 191

def check_commandline(
    i = @commandline
  )
  case i # case tag
  # ======================================================================= #
  # === report_where_the_main_yaml_file_is
  # ======================================================================= #
  when /report(_|-)?where(_|-)?the(_|-)?main(_|-)?yaml(_|-)?file(_|-)?is/
    report_where_the_main_yaml_file_is
    exit
  # ======================================================================= #
  # === cycle --help
  # ======================================================================= #
  when /help/
    show_available_commandline_options
    e
    report_where_the_main_yaml_file_is
    exit
  # ======================================================================= #
  # === cycle --size
  # ======================================================================= #
  when /-?-?size/
    report_how_many_entries_are_available
    exit
  # ======================================================================= #
  # === cycle --open
  # ======================================================================= #
  when /-?-?open/,'OPEN'
    begin
      require 'open'
    rescue LoadError; end
    open_in_editor(yaml_file?)
    exit # Exit after we have opened it.
  end
end

#data?Boolean Also known as: data

#

data

#

Returns:

  • (Boolean)


130
131
132
# File 'lib/studium/exams/cycle.rb', line 130

def data?
  @data
end

#debug?Boolean

#

debug?

#

Returns:

  • (Boolean)


137
138
139
# File 'lib/studium/exams/cycle.rb', line 137

def debug?
  false
end

#determine_which_topic_to_useObject

#

determine_which_topic_to_use

We determine the ivar @last_topic_used here.

#


97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/studium/exams/cycle.rb', line 97

def determine_which_topic_to_use
  # ======================================================================= #
  # If the File exists then we won't have to use .shuffle. 
  # ======================================================================= #
  if File.exist? STORE_WHERE
    @last_topic_used = File.read(STORE_WHERE).strip
  else # Else we grab the first entry and continue from there.
    @last_topic_used = data?.first
  end
  if debug? # Feedback more information if we are debugging this.
    e 'DEBUG: The last topic used was: '+sfancy(@last_topic_used)
  end
end

#index?Boolean

#

index?

Returns the index of the current topic.

#

Returns:

  • (Boolean)


116
117
118
# File 'lib/studium/exams/cycle.rb', line 116

def index?
  data?.find_index(@last_topic_used)
end

#load_datasetObject

#

load_dataset

The current exams will be stored in @data.

#


74
75
76
77
78
79
80
81
82
83
# File 'lib/studium/exams/cycle.rb', line 74

def load_dataset
  _ = yaml_file?
  if File.exist? _
    @data = File.readlines(_) # This defaults to: /home/x/STUDIUM/YAML/current_exams.yml
    @data.select! {|line| line.start_with? '-'}
    @data.map! {|entry| entry.chomp.delete('-').strip }
  else
    opnn; e 'No file exists at `'+sfile(_)+'`.'
  end 
end

#report_how_many_entries_are_availableObject

#

report_how_many_entries_are_available

Tell the user how many different entries are available.

#


162
163
164
165
166
167
# File 'lib/studium/exams/cycle.rb', line 162

def report_how_many_entries_are_available
  _ = yaml_file?
  n_entries = YAML.load_file(_).size.to_s
  e 'We currently use `'+simp(n_entries)+'` entries. (From file '+sfile(_)+')'
  report_which_entries_are_used
end

#report_where_the_main_yaml_file_isObject

#

report_where_the_main_yaml_file_is

#


184
185
186
# File 'lib/studium/exams/cycle.rb', line 184

def report_where_the_main_yaml_file_is
  e 'The main yaml file is at: '+sfile(yaml_file?)
end

#report_which_entries_are_usedObject

#

report_which_entries_are_used

#


172
173
174
175
176
177
178
179
# File 'lib/studium/exams/cycle.rb', line 172

def report_which_entries_are_used
  these_entries = YAML.load_file(yaml_file?)
  e
  e 'We will use the following entries:'
  e
  print '  '; e these_entries.join(', ').strip.chop
  e
end

#resetObject

#

reset

#


60
61
62
63
64
65
66
67
# File 'lib/studium/exams/cycle.rb', line 60

def reset
  super()
  # ======================================================================= #
  # === @debug
  # ======================================================================= #
  @debug = true
  @last_topic_used = nil
end

#runObject

#

run

#


272
273
274
275
276
277
278
# File 'lib/studium/exams/cycle.rb', line 272

def run
  load_dataset
  check_commandline
  determine_which_topic_to_use
  ask_the_question
  store_last_topic_asked
end

#show_available_commandline_optionsObject

#

show_available_commandline_options (help tag)

Invoke this method like so:

cycle --help
#


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

def show_available_commandline_options
  e
  e 'These commandline-options are available:'
  e
  e '  --open                               # To open the .yml file in your editor'
  e '  --size                               # Show how many entries are available'
  e '  --report_where_the_main_yaml_file_is # show where the main .yml file is'
  e
end

#store_last_topic_asked(what = @last_topic_used, where = STORE_WHERE) ⇒ Object

#

store_last_topic_asked

#


249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
# File 'lib/studium/exams/cycle.rb', line 249

def store_last_topic_asked(
    what  = @last_topic_used,
    where = STORE_WHERE
  )
  index = index?
  index = 0 if index.nil? # Safeguard.
  # ======================================================================= #
  # Now, we grab the next topic.
  # ======================================================================= #
  index += 1
  if (index+1) > data?.size
    index = 0 # Reset it in this case.
  end
  what = data?[index]
  if debug?
    e 'Next storing `'+what.to_s+'` into `'+sfile(store_where?)+'`.'
  end
  write_what_into(what, where)
end

#store_where?Boolean

#

store_where?

#

Returns:

  • (Boolean)


88
89
90
# File 'lib/studium/exams/cycle.rb', line 88

def store_where?
  STORE_WHERE
end

#topic?Boolean

#

topic?

#

Returns:

  • (Boolean)


123
124
125
# File 'lib/studium/exams/cycle.rb', line 123

def topic?
  @last_topic_used
end

#yaml_file?Boolean

#

yaml_file?

This may point to a file such as “/home/x/programming/ruby/src/studium/lib/studium/yaml/current_exams.yml”

#

Returns:

  • (Boolean)


242
243
244
# File 'lib/studium/exams/cycle.rb', line 242

def yaml_file?
  ::Studium.file_current_exams
end