Class: RBT::Action::Cookbooks::CheckForInvalidEntriesInThisCookbook

Inherits:
RBT::Action show all
Defined in:
lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb

Overview

RBT::Action::Cookbooks::CheckForInvalidEntriesInThisCookbook

Constant Summary

Constants inherited from LeanPrototype

LeanPrototype::ALL_COLOUR_METHODS, LeanPrototype::ARRAY_KDE_KONSOLE_COLOURS_IN_USE, LeanPrototype::DAY_NAMES, LeanPrototype::NAMESPACE, LeanPrototype::SILENT_REDIRECTION

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from LeanPrototype

#a_or_an?, #abbreviations?, #absolute_path, #action, #add_to_the_commandline_arguments, #all_binaries?, #all_files_from, #all_libraries?, #allowed_cookbook_entries?, #appdir_location_of?, #append_onto_the_internal_hash, #append_what_into, #archive_type_of?, #available_programs?, #be_quiet?, #be_verbose?, #begins_with_a_comment?, #capitalize_first_alphabetical_character, #cd_to_the_log_directory, #cd_to_the_temp_directory, #change_directory, #change_permission, #cheering_person?, #chmod, #chop_off_archive, #clear_commandline_arguments, #cliner, #coloured_and_padded_e, #coloured_and_padded_esystem, #coloured_esystem, #colourize_directory_for_system_results, #colourize_this_error, #colourize_this_file_path, #colourize_this_warning, #commandline_arguments?, #commandline_arguments_without_hyphens?, #comment, #convert_dd_mm_yyyy_to_its_long_variant, #convert_env_variable, #copy_directory, #copy_files, #cpr, #create_directory, #current_hour?, #dd_mmm_yyy, #debug, #debug?, #directory_expanded_cookbooks?, #disable_colours, #display_md5sum?, #do_not_debug, #does_the_cookbook_include_this_program?, #does_this_expanded_cookbook_file_exist_for_this_program?, #does_this_file_exist?, #does_this_file_exist_and_is_it_a_file?, #e, #eblue, #ecomment, #ecrimson, #edir, #editor?, #efancy, #eimp, #enable_colours, #enable_debug, #ensure_main_encoding_for, #eparse, #esystem, #esystem_gold, #etomato, #ewarn, #exit_program, #expanded_cookbooks_directory_exists?, #extract_this_archive, #extract_to?, #file_compiled_programs?, #file_dirname_retaining_trailing_slash, #file_predefined_installation_instructions?, #file_specification_of_registered_cookbook_entries, #find_cookbook_alias_for, #find_this_yaml_file, #first_argument?, #first_non_hyphen_argument?, #get_all_directories_from, #get_all_files_from, #get_all_programs, #get_date, #get_extended_date, #get_files_and_directories_from, #go_to_base_dir, #home_dir?, #host_system?, #infer_the_namespace, #internal_hash?, #internal_hash_set_commandline_arguments, #is_an_archive?, #is_directory?, #is_file?, #is_github_url?, #is_make_available?, #is_meson_installed?, #is_on_gobolinux?, #is_on_windows?, #is_roebe?, #is_superuser?, #is_symlink?, #is_this_a_header?, #is_this_a_library?, #is_this_program_included?, #iso_encoding?, #load_dataset_from_this_expanded_cookbook, #load_yaml, #load_yaml_file_from_the_cookbook_directory_for_this_program, #log_directory?, #main_encoding?, #meson_build_file_exists?, #months?, #move_file, #n_programs_are_available?, #n_programs_available?, #namespace?, #no_directory_exists_at, #no_directory_was_found_at, #no_opn, #no_such_file_exists, #open_in_browser, #open_in_editor, #opncomment, #opne, #opnef, #opnerev, #opnerror, #opnesystem, #opnewarn, #opnfancy, #opnn, #otomato, #packages_directory?, #path_to_this_expanded_cookbooks_dataset, #pkgconfig_directory?, #populate_the_internal_hash_with_default_values, #predefined_installation_instructions?, #prepend_this_commandline_argument, #program_version_of?, #project_base_directory?, #project_yaml_directory?, #query_path?, #rarrow?, #read_file, #read_file_in_default_encoding, #read_file_with_default_encoding, #readlines, #readlines_with_proper_encoding, #register_sigint, #registered_cookbook_entries?, #remove, #remove_archive_from_the_end, #remove_comments_from_each_line, #remove_directory, #remove_double_slashes, #remove_file, #remove_newlines, #remove_parens, #remove_symlink, #remove_the_first_commandline_argument, #remove_this_commandline_argument, #remove_this_entry_from_the_commandline_arguments, #remove_trailing_ANSII_escape_code, #remove_unnecessary_data_from_url, #rename, #report_pwd, #require_the_rbt_aliases, #reset_the_internal_hash, #return_all_archives_from_this_directory, #return_appdir_prefix, #return_commandline_arguments_with_leading_hyphens, #return_current_hour_minutes_second, #return_date, #return_day_of_the_month_based_on_utc, #return_full_time, #return_hours_minutes_seconds_based_on_utc, #return_location_to_this_programs_yaml_file, #return_month_based_on_this_number, #return_month_based_on_utc, #return_opnn, #return_program_name, #return_program_name_for_gobolinux_systems, #return_program_name_via_program_information, #return_pwd, #return_unicode_warning_symbol_or_empty_string, #return_utc, #return_utc_time_in_a_format_similar_to_slackware, #return_weekday_based_on_utc, #return_year_based_on_utc, #rev, #rpn, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #set_use_colours, #set_use_opn, #set_xorg_buffer, #sfancy, #sfile, #silent_redirection?, #silently_create_this_directory_if_it_does_not_yet_exist, #simp, #source_base_directory?, #ssym, #stderr, #store_into_this_directory?, #string_right_arrow?, #swarn, #symlink, #sysbin_directory?, #sysetc_directory?, #sysinclude_directory?, #syslib_directory?, #sysshare_directory?, #system_directory?, #temp_directory?, #to_bool, #to_camelcase, #to_iso_encoding, #to_unicode, #today?, #touch, #try_to_require_beautiful_url, #try_to_require_the_environment_information_gem, #try_to_require_the_extracter_gem, #try_to_require_the_open_gem, #try_to_require_the_xorg_buffer, #try_to_require_wget, #try_to_return_a_special_compile_component, #unicode_cliner, #unicode_middle_cliner, #use_colours=, #use_colours?, #use_opn=, #use_opn?, #utf_encoding?, #verbose_truth, #word_wrap, #write_what_into, #write_what_into_via_unicode, #yes_or_no

Constructor Details

#initialize(check_these_entries = ARGV, run_already = true, &block) ⇒ CheckForInvalidEntriesInThisCookbook

#

initialize

#


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 42

def initialize(
    check_these_entries = ARGV,
    run_already         = true,
    &block
  )
  reset
  set_commandline_arguments(
    check_these_entries
  )
  set_check_these_entries(
    check_these_entries
  )
  # ======================================================================= #
  # === Handle blocks next
  # ======================================================================= #
  if block_given?
    yielded = yield
    case yielded
    when :do_not_run_yet
      run_already = false
    end
  end
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Action::Cookbooks::RawCookbook[]

#


394
395
396
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 394

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

Instance Method Details

#all_fineObject

#

all_fine

#


120
121
122
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 120

def all_fine
  mediumslateblue('      All fine. ')
end

#array_registered_and_valid_cookbook_entries?(i = file_specification_of_registered_cookbook_entries) ⇒ Boolean

#

array_registered_and_valid_cookbook_entries?

#

Returns:

  • (Boolean)


262
263
264
265
266
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 262

def array_registered_and_valid_cookbook_entries?(
    i = file_specification_of_registered_cookbook_entries
  )
  YAML.load_file(i)
end

#batch_process_the_entriesObject

#

batch_process_the_entries

#


330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 330

def batch_process_the_entries
  check_these_entries?.each {|this_cookbook_entry|
    if this_cookbook_entry.frozen?
      this_cookbook_entry = this_cookbook_entry.dup
    end
    unless this_cookbook_entry.end_with? '.yml'
      this_cookbook_entry << '.yml'
    end
    unless File.exist? this_cookbook_entry
      this_cookbook_entry = cookbooks_dir?+this_cookbook_entry
    end
    # ===================================================================== #
    # Read in the full dataset next.
    # ===================================================================== #
    @internal_hash[:work_on_this_file] = this_cookbook_entry
    @internal_hash[:dataset] = readlines_with_proper_encoding(this_cookbook_entry).reject {|line|
      line.start_with? '#'
    }.join(N)
    @internal_hash[:first_line] = @internal_hash[:dataset].split(N).first.strip.delete(':')
    if @internal_hash[:first_line].include? ' #'
      @internal_hash[:first_line] = @internal_hash[:first_line].split(' #').first.strip
    end
    # ===================================================================== #
    # We have to check for registered entries.
    # ===================================================================== #
    e "#{rev}Working on the file #{sfile(this_cookbook_entry)} #{rev}next."
    e
    e return_the_main_counter_then_increment_it+
      rev+' Checking whether '+
      steelblue('the first entry is the name of the file')+':'
    result = check_if_the_first_entry_is_the_name_of_the_file(this_cookbook_entry)
    consider_to_exit_now(result)
    e all_fine+steelblue(cheering_person)
    e return_the_main_counter_then_increment_it+
      rev+' Checking whether the yaml file has two url1 entries:'
    result = check_whether_this_yaml_file_has_two_url1_entries(dataset?, this_cookbook_entry)
    consider_to_exit_now(result)
    e "      #{mediumslateblue('All fine here. There are no two url1 entries in that file.')} "\
      "#{steelblue(cheering_person)}"
    e return_the_main_counter_then_increment_it+
      rev+' Checking whether all left entries are valid:'
    result = check_whether_all_left_entries_are_valid
    consider_to_exit_now(result)
    e all_fine+steelblue(cheering_person)
    e "#{return_the_main_counter_then_increment_it}"\
      "#{rev} Checking whether there is more than one "\
      "program_name_and_program_version entry:"
    result = check_whether_there_is_more_than_one_program_name_and_program_version_entry
    consider_to_exit_now(result)
    e "#{all_fine}#{steelblue(cheering_person)}"
    e
  }
end

#check_if_the_first_entry_is_the_name_of_the_file(i) ⇒ Object

#

check_if_the_first_entry_is_the_name_of_the_file

#


271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 271

def check_if_the_first_entry_is_the_name_of_the_file(i)
  i = File.basename(i)
  name_of_the_file_without_extension = i.sub(/#{File.extname(i)}$/,'')
  if first_line? == name_of_the_file_without_extension
  else
    opnn { :no_colon}
    e
    e crimson('The name of the file is not the same as the filename.')
    e crimson('This should be corrected.')
    e
    e slateblue(first_line?)+
      lightgreen(' != ')+
      royalblue(name_of_the_file_without_extension)
    e
    return :error
  end
end

#check_these_entries?Boolean

#

check_these_entries?

#

Returns:

  • (Boolean)


188
189
190
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 188

def check_these_entries?
  @internal_hash[:check_these_entries]
end

#check_whether_all_left_entries_are_validObject

#

check_whether_all_left_entries_are_valid

This method will check whether the left entries of the file are all valid.

#


226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 226

def check_whether_all_left_entries_are_valid
  # ======================================================================= #
  # Get a handle towards all valid cookbook-entries next. This will
  # include Strings such as "tags" or "url1" and so forth.
  # ======================================================================= #
  valid_entries = array_registered_and_valid_cookbook_entries?
  splitted = dataset?.split(N)
  these_entries_were_found = splitted.select {|entry|
    entry.start_with?(' ') and
   !entry.start_with?(' #') and
   !entry.start_with?(' - ') and
   !entry.start_with?('  ')
  }.map {|line|
    line.strip!
    if line.include? ':'
      line = line.split(':').first
    end
    line.strip!
    line
  }
  # ======================================================================= #
  # Next, check each of these entries:
  # ======================================================================= #
  these_entries_were_found.each {|check_this_entry|
    if valid_entries.include? check_this_entry
    else
      opne crimson('Not registered entry called `')+
           sfancy(check_this_entry)+
           crimson('`.')
    end
  }
end

#check_whether_there_is_more_than_one_program_name_and_program_version_entry(i = dataset? ) ⇒ Object

#

check_whether_there_is_more_than_one_program_name_and_program_version_entry

#


196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 196

def check_whether_there_is_more_than_one_program_name_and_program_version_entry(
    i = dataset?
  )
  this_file = @internal_hash[:work_on_this_file]
  # ======================================================================= #
  # We can simply scan() here. The faulty entry may look like this:
  #
  #   program_name_and_program_version: mafft-7.467
  #   program_name_and_program_version: mafft-7.310
  #
  # ======================================================================= #
  scanned = i.scan(/ program_name_and_program_version: /)
  if scanned.size > 1
    opne swarn('There are too many')+
         steelblue(' program_name_and_program_version: ')+
         swarn('entries in that file.')
    opne swarn('Please fix this issue, in the following file:')
    e
    e sfile("  #{this_file}")
    e
    return :error
  end
end

#check_whether_this_yaml_file_has_two_url1_entries(i = dataset?, , this_file = nil) ⇒ Object

#

check_whether_this_yaml_file_has_two_url1_entries

This method will return a boolean value - true if the .yml file has two url1 entries, and false otherwise.

#


146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 146

def check_whether_this_yaml_file_has_two_url1_entries(
    i         = dataset?,
    this_file = nil
  )
  this_file = this_file.first if this_file.is_a? Array
  if this_file
    unless this_file.include? '/'
      this_file = File.absolute_path(this_file)
    end
  end
  case i
  # ======================================================================= #
  # === :default
  # ======================================================================= #
  when :default,
       nil
    if File.exist? this_file
      i = @internal_hash[:dataset] = read_file_with_default_encoding(this_file)
    end
  end
  begin
    n_url1_entries = i.scan(/^ url1: /).size
  rescue ArgumentError => error
    e "#{rev}Error for: #{sfile(this_file)}"
    pp error
  end
  if n_url1_entries > 1
    opne swarn('There are too many')+
         steelblue(' url1: ')+
         swarn('entries in that file.')
    opne swarn('Please fix this issue, in the following file:')
    e
    e sfile("  #{this_file}")
    e
    return :error
  end
  return false
end

#consider_to_exit_now(i) ⇒ Object

#

consider_to_exit_now

#


316
317
318
319
320
321
322
323
324
325
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 316

def consider_to_exit_now(i)
  case i
  # ======================================================================= #
  # === :error
  # ======================================================================= #
  when :error
    opne 'Please fix this error before we can continue.'
    exit
  end
end

#dataset?Boolean

#

dataset?

#

Returns:

  • (Boolean)


105
106
107
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 105

def dataset?
  @internal_hash[:dataset]
end

#first_line?Boolean

#

first_line?

#

Returns:

  • (Boolean)


98
99
100
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 98

def first_line?
  @internal_hash[:first_line]
end

#main_counter?Boolean

#

main_counter?

#

Returns:

  • (Boolean)


127
128
129
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 127

def main_counter?
  @internal_hash[:main_counter]
end

#resetObject

#

reset (reset tag)

#


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 70

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === :main_counter
  # ======================================================================= #
  @internal_hash[:main_counter] = 1
  # ======================================================================= #
  # === :work_on_this_file
  #
  # This variable keeps track on which file we are currently working on.
  # ======================================================================= #
  @internal_hash[:work_on_this_file] = nil
  # ======================================================================= #
  # === :dataset
  #
  # This variable must be nil initially.
  # ======================================================================= #
  @internal_hash[:dataset] = nil
  # ======================================================================= #
  # === :first_line
  # ======================================================================= #
  @internal_hash[:first_line] = nil
end

#return_the_main_counter_then_increment_itObject

#

return_the_main_counter_then_increment_it

#


134
135
136
137
138
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 134

def return_the_main_counter_then_increment_it
  result = "  #{rev}(#{royalblue(main_counter?)}#{rev})"
  @internal_hash[:main_counter] += 1
  return result
end

#runObject

#

run (run tag)

#


387
388
389
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 387

def run
  batch_process_the_entries
end

#sanitize_the_main_entriesObject

#

sanitize_the_main_entries

#


292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 292

def sanitize_the_main_entries
  case @internal_hash[:check_these_entries].first # case tag
  # ======================================================================= #
  # === --everything
  # ======================================================================= #
  when /^-?-?everything$/i
    @internal_hash[:check_these_entries] = available_programs?.map {|line| "#{line}.yml" }
  end
  # ======================================================================= #
  # Work through the .yml files next:
  # ======================================================================= #
  @internal_hash[:check_these_entries].map! {|entry|
    if entry.end_with? '.yml'
      unless File.exist? entry
        entry = return_location_to_this_programs_yaml_file(entry)
      end
    end
    entry
  }
end

#set_check_these_entries(i) ⇒ Object

#

set_check_these_entries

#


112
113
114
115
# File 'lib/rbt/actions/individual_actions/checks_and_validations/check_for_invalid_entries_in_this_cookbook.rb', line 112

def set_check_these_entries(i)
  @internal_hash[:check_these_entries] = [i].flatten.compact
  sanitize_the_main_entries
end