Class: Studium::Exams::UploadExamTopics

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

Overview

Studium::UploadExamTopics.new

Constant Summary collapse

REMOTE_EXAM_TOPICS_DIR =
#

Studium::Exams::UploadExamTopics::REMOTE_EXAM_TOPICS_DIR

#
"#{REMOTE_PERSONAL_WEBSITE_URL}exam_topics/"
DEFAULT_REMOTE_HOST =
#

DEFAULT_REMOTE_HOST

#
ENV['MY_FTP_SITE'].to_s.dup
DEFAULT_LOGIN_PASSWORD =
#

DEFAULT_LOGIN_PASSWORD

#
ENV['MY_FTP_PASSWORD'].to_s.dup
DEFAULT_LOGIN_NAME =
#

DEFAULT_LOGIN_NAME

#
ENV['MY_FTP_USER_NAME'].to_s.dup

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::NAMESPACE, 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(remote_host = DEFAULT_REMOTE_HOST, use_this_login_name = DEFAULT_LOGIN_NAME, use_this_login_password = DFAULT_LOGIN_PASSWORD, run_already = true) ⇒ UploadExamTopics

#

initialize

#


49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/studium/exams/upload_exam_topics.rb', line 49

def initialize(
    remote_host             = DEFAULT_REMOTE_HOST,
         = DEFAULT_LOGIN_NAME,
     = DFAULT_LOGIN_PASSWORD,
    run_already             = true
  )
  reset
  # ======================================================================= #
  # Next, use three different setters, for the remote
  # host, the login name and the login password.
  # ======================================================================= #
  set_remote_host(
    remote_host
  )
  (
    
  )
  (
    
  ) # <- Must come after we set the remote host.
  if block_given?
    yielded = yield
    case yielded
    when :do_not_run_yet
      run_already = false
    when :be_verbose
      @be_verbose = true
    end
  end
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

Studium::Exams::UploadExamTopics[]

#


327
328
329
# File 'lib/studium/exams/upload_exam_topics.rb', line 327

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

Instance Method Details

#ftp?Boolean

#

ftp?

#

Returns:

  • (Boolean)


300
301
302
# File 'lib/studium/exams/upload_exam_topics.rb', line 300

def ftp?
  @ftp
end

#initialize_ftp_connectionObject

#

initialize_ftp_connection

#


207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
# File 'lib/studium/exams/upload_exam_topics.rb', line 207

def initialize_ftp_connection
  unless Object.const_defined? :FtpParadise
    begin # Protect requiring the ftp_paradise project.
      require 'ftp_paradise'
    rescue LoadError; end
  end
  use_this_password = password?
  if use_this_password.end_with? '_'
    use_this_password = use_this_password.dup if use_this_password.frozen?
    use_this_password.chop!
  end
  # ======================================================================= #
  # Delegate towards FtpParadise next. We will use only the default
  # dataset for now, hardcoded.
  # ======================================================================= #
  @ftp = FtpParadise.new { :use_default_dataset }
  # ======================================================================= #
  # Next, cd to the remote directory keeping our exames:
  # ======================================================================= #
  target = File.basename(remote_dir?)
  # ======================================================================= #
  # For bplaced-URLs we will cd into the directory called www/.
  # ======================================================================= #
  if @ftp.remote_url?.include? 'bplaced'
    target.prepend('www/')
  end
  e "Changing the remote directory into `#{sdir(target)}`."
  @ftp.remote_cd(target)
  if @set_binary_mode
    @ftp.set_binary_mode
  end
end

#keep_track_of_when_we_last_uploaded_the_exam_topics_filesObject

#

keep_track_of_when_we_last_uploaded_the_exam_topics_files

#


279
280
281
282
283
284
285
# File 'lib/studium/exams/upload_exam_topics.rb', line 279

def keep_track_of_when_we_last_uploaded_the_exam_topics_files
  what = Time.now.to_s
  into = "#{log_dir?}last_uploaded_the_exam_topics_files_at.md"
  opnn; e 'Also keeping track of when we last uploaded the files, in the file'
  opnn; e "  #{sfile(into)}"
  write_what_into(what, into)
end

#login_password?Boolean Also known as: password?

#

login_password?

#

Returns:

  • (Boolean)


180
181
182
# File 'lib/studium/exams/upload_exam_topics.rb', line 180

def 
  @login_password
end

#remote_cd(i) ⇒ Object Also known as: rcd

#

remote_cd

#


243
244
245
# File 'lib/studium/exams/upload_exam_topics.rb', line 243

def remote_cd(i)
  @ftp.remote_cd(i)
end

#remote_dir?Boolean

#

remote_dir?

#

Returns:

  • (Boolean)


187
188
189
# File 'lib/studium/exams/upload_exam_topics.rb', line 187

def remote_dir?
  @remote_dir
end

#remote_host?Boolean

#

remote_host?

#

Returns:

  • (Boolean)


135
136
137
# File 'lib/studium/exams/upload_exam_topics.rb', line 135

def remote_host?
  @remote_host
end

#report_how_many_files_were_uploadedObject

#

report_how_many_files_were_uploaded

Show a short summary as to how many files were uploaded successfully.

#


266
267
268
269
270
271
272
273
274
# File 'lib/studium/exams/upload_exam_topics.rb', line 266

def report_how_many_files_were_uploaded
  _ = @ftp.uploaded_these_files?
  if _.size > 0
    if @be_verbose
      opnn; e teal(_.size.to_s)+' files were uploaded successfully.'
    end
    keep_track_of_when_we_last_uploaded_the_exam_topics_files
  end
end

#resetObject

#

reset (reset tag)

#


84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/studium/exams/upload_exam_topics.rb', line 84

def reset
  super()
  # ======================================================================= #
  # === @namespace
  # ======================================================================= #
  @namespace        = NAMESPACE
  # ======================================================================= #
  # === @remote_dir
  # ======================================================================= #
  @remote_dir       = REMOTE_EXAM_TOPICS_DIR
  # ======================================================================= #
  # === @use_this_dataset
  # ======================================================================= #
  @use_this_dataset = Dir["#{DIRECTORY_EXAM_TOPICS}*"]
  # ======================================================================= #
  # === @set_binary_mode
  # ======================================================================= #
  @set_binary_mode  = false
end

#runObject

#

run (run tag)

#


307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
# File 'lib/studium/exams/upload_exam_topics.rb', line 307

def run
  opnn; e 'We will batch-upload the exam questions next, via FTP.'
  initialize_ftp_connection
  # ======================================================================= #
  # Next obtain all exam topics from my home directory. These files
  # are the ones that will be uploaded.
  # ======================================================================= #
  all_local_exams = @use_this_dataset
  if all_local_exams.empty?
    e "We did not find any files in the "\
      "directory #{sdir(DIRECTORY_EXAM_TOPICS)}."
  else
    upload(all_local_exams) # <- Upload the files here.
    report_how_many_files_were_uploaded
  end
end

#set_binary_modeObject

#

set_binary_mode

#


257
258
259
# File 'lib/studium/exams/upload_exam_topics.rb', line 257

def set_binary_mode
  @set_binary_mode = true
end

#set_login_name(i = :default) ⇒ Object

#

set_login_name

#


142
143
144
145
146
147
148
149
150
151
# File 'lib/studium/exams/upload_exam_topics.rb', line 142

def (
    i = :default
  )
  case i
  when :default,
       :default_login_name
    i = DEFAULT_LOGIN_NAME
  end
  @login_name = i
end

#set_login_password(i = :default) ⇒ Object

#

set_login_password

#


156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/studium/exams/upload_exam_topics.rb', line 156

def (
    i = :default
  )
  case i
  # ======================================================================= #
  # === :default
  # ======================================================================= #
  when :default,
       :default_login_password,
       :default_password
    i = DEFAULT_LOGIN_PASSWORD
  end
  i = i.to_s.dup
  if i.end_with?('_') and
     ( remote_host?.include?('square') or
       remote_host?.include?('bplaced.net') )
    i.chop! if i.end_with? '_'
  end
  @login_password = i
end

#set_remote_dir(i = :default) ⇒ Object

#

set_remote_dir

#


194
195
196
197
198
199
200
201
202
# File 'lib/studium/exams/upload_exam_topics.rb', line 194

def set_remote_dir(
    i = :default
  )
  case i
  when :default
    i = REMOTE_PERSONAL_WEBSITE_URL
  end
  @remote_dir = i
end

#set_remote_host(i = :default) ⇒ Object

#

set_remote_host

#


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

def set_remote_host(
    i = :default
  )
  if i.is_a? Array and i.empty?
    i = :default
  end
  case i
  # ======================================================================= #
  # === :default
  # ======================================================================= #
  when :default,
       :default_remote_host,
       :default_host
    i = DEFAULT_REMOTE_HOST
  end
  @remote_host = i
end

#set_use_this_dataset(i) ⇒ Object

#

set_use_this_dataset

#


107
108
109
# File 'lib/studium/exams/upload_exam_topics.rb', line 107

def set_use_this_dataset(i)
  @use_this_dataset = i
end

#upload(i = @use_this_dataset) ⇒ Object Also known as: do_upload

#

upload

#


290
291
292
293
294
295
# File 'lib/studium/exams/upload_exam_topics.rb', line 290

def upload(
    i = @use_this_dataset
  )
  e 'In the method upload(), this will be uploaded next: '+sfancy(i)
  @ftp.upload(i)
end

#use_default_datasetObject

#

use_default_dataset

#


250
251
252
# File 'lib/studium/exams/upload_exam_topics.rb', line 250

def use_default_dataset
  @ftp.use_default_dataset
end