Class: RBT::Cookbooks::CheckValidityOfCookbooks

Inherits:
Base show all
Defined in:
lib/rbt/checks_and_validations/check_validity_of_cookbooks.rb

Overview

RBT::Cookbooks::CheckValidityOfCookbooks

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

Instance Method Summary collapse

Methods inherited from Base

#cat, #cd_back_to_the_current_working_directory, #consider_reporting_how_many_programs_are_registered, #cookbook_files?, #copy_recursively, #delete_code_of_conduct?, #determine_appdir_prefix_from_this_input, #directory_validation?, #do_not_show_names, #fast_return_file_size_of_this_program, #file_last_symlinked_program?, #file_programs_version_url, #gem_version, #is_a_64bit_system?, #is_ccache_available?, #is_porg_available?, #is_this_binary_registered?, #is_this_program_included?, #make_command?, #make_install_command?, #new_cookbook_instance_for, #program_exists?, #publish_list_of_all_programs_version, #rcp, registered_binaries?, #remove_symlink, #rename_kde_konsole_tab, #repackage, #report_n_programs, #report_working_directory, #return_compile_time_statistics, #return_n_random_characters, #return_version_of_this_program, #run_make_then_make_install, #sanitize_url1_entry, #set_source_directory, #show_overview_over_available_utility_scripts, #symlink_all_files_from_this_directory_to_that_directory, #system_tags?, #upload_list_of_all_programs_version, #use_yaml_database_for_tags?, #warn_and_exit, #wget

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(name_of_the_program_to_check = ARGV, run_already = true) ⇒ CheckValidityOfCookbooks

#

initialize

#


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/rbt/checks_and_validations/check_validity_of_cookbooks.rb', line 54

def initialize(
    name_of_the_program_to_check = ARGV,
    run_already                  = true
  )
  reset
  unless name_of_the_program_to_check.empty?
    set_available_files(name_of_the_program_to_check)
  end
  if block_given?
    yielded = yield
    case yielded
    # === :be_verbose
    when :be_verbose
      set_be_verbose
    end
  end
  run if run_already
end

Instance Method Details

#available_files?Boolean

#

available_files?

#

Returns:

  • (Boolean)


117
118
119
# File 'lib/rbt/checks_and_validations/check_validity_of_cookbooks.rb', line 117

def available_files?
  @hash[:available_files]
end

#hash?Boolean

#

hash?

#

Returns:

  • (Boolean)


93
94
95
# File 'lib/rbt/checks_and_validations/check_validity_of_cookbooks.rb', line 93

def hash?
  @hash
end

#obtain_all_available_filesObject

#

obtain_all_available_files

#


100
101
102
103
104
# File 'lib/rbt/checks_and_validations/check_validity_of_cookbooks.rb', line 100

def obtain_all_available_files
  set_available_files(
    Dir["#{cookbook_directory?}*.yml"].sort
  )
end

#resetObject

#

reset

#


76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/rbt/checks_and_validations/check_validity_of_cookbooks.rb', line 76

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @hash
  # ======================================================================= #
  @hash = {}
  # ======================================================================= #
  # === :be_verbose
  # ======================================================================= #
  set_be_quiet # By default, this class is not very verbose.
  obtain_all_available_files # Must come after @hash.
end

#runObject

#

run

#


228
229
230
# File 'lib/rbt/checks_and_validations/check_validity_of_cookbooks.rb', line 228

def run
  work_on_each_file
end

#set_available_files(i) ⇒ Object

#

set_available_files

#


109
110
111
112
# File 'lib/rbt/checks_and_validations/check_validity_of_cookbooks.rb', line 109

def set_available_files(i)
  i = [i].flatten.compact # Must always be an Array.
  @hash[:available_files] = i
end

#work_on_each_file(i = available_files? ) ⇒ Object

#

work_on_each_file

The input should be an Array.

#


126
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
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
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
# File 'lib/rbt/checks_and_validations/check_validity_of_cookbooks.rb', line 126

def work_on_each_file(
    i = available_files?
  )
  i.each {|file|
    program_short_name = File.basename(file).
                              delete_suffix('.yml')
    # ===================================================================== #
    # Ok, read in the dataset next. We assume that the input is either
    # a file or a string.
    # ===================================================================== #
    possible_location_of_the_yaml_file =
      "#{individual_cookbooks_dir?}#{program_short_name}.yml"
    if File.exist? possible_location_of_the_yaml_file
      dataset = File.read(possible_location_of_the_yaml_file)
    else
      dataset = file
    end
    # ===================================================================== #
    # Now we determine "component a", which is the program name.
    # ===================================================================== #
    regex_to_use = /^(\w+):/ # See https://rubular.com/r/8hKCAYXZqY
    dataset =~ regex_to_use
    a = $1.to_s.dup
    # ===================================================================== #
    # Next, we grab the entry for "b". This can work if we have an entry
    # called url1, or a program_name. Since the entry program_name is
    # more important, we will check on it first.
    # ===================================================================== #
    if dataset.include?('program_name_and_program_version') and
      !dataset.include?('use_this_program_name') and
      !dataset.include?('use_this_program_name_on_gobolinux')
      regex_to_use = /^ program_name_and_program_version: ([a-zA-Z\-_\d\.]+)$/ # See: https://rubular.com/r/AVdsMgDyme1qvw
      dataset =~ regex_to_use
      b = $1.to_s.dup
      case b # case tag
      when 'URL_REPLACE_UNDERSCORE',
           'URL_CONVERT_UNDERSCORE',
           'USE_URL_SANITIZED',
           'USE_URL_DOWNCASE',
           'USE_URL'
        b = program_short_name
      # =================================================================== #
      # === FIRST_UNDERSCORE_IS_HYPHEN
      # =================================================================== #
      when 'FIRST_UNDERSCORE_IS_HYPHEN'
        b = File.basename(url1?)
      end
      b = ProgramInformation.return_real_short_name(b.strip)
      if b
        b.chop! if b.end_with?('-')
        b.delete!('-') if b.include? '-'
      end
    # ===================================================================== #
    # Ok, now we can check for the url1 entry, as there was no entry
    # called program_name in that particular yaml file.
    # ===================================================================== #
    elsif dataset.include? 'url1'
      regex_to_use = /^ url1: (.+)\w/ # See: http://rubular.com/r/SOdBdhGXgw
      dataset =~ regex_to_use
      b = $1.to_s.dup
      # =================================================================== #
      # Ok, we still have to do some sanitizing to do, such as ignoring
      # all past a '#' token:
      # =================================================================== #
      if b.include? '#'
        b = b[0..b.index('#')]
      end
      if b.include? 'URL_REPLACE_UNDERSCORE'
        b = program_short_name
      else
        b = ProgramInformation.return_real_short_name(b.strip)
        b = b.first.downcase if b.is_a? Array
      end
    else
      opne 'Neither "program_name:" nor an "url1:" entry were '\
           'found for `'+simp(file)+rev+'`.'
      opne 'This is not allowed, thus we will exit now.'
      exit
    end
    a.downcase!
    b.downcase!
    b.delete!('.') if b.include? '.'
    if a == b # Everything is ok here, thus we do not have to report anything at all in this case.
      if be_verbose?
        opne "#{rev}All is fine for the program "\
             "`#{royalblue(program_short_name)}`#{rev}."
      end
      # ^^^ Enabling the above by default may be too verbose.
    else
      # =================================================================== #
      # Compare the two names.
      # =================================================================== #
      opne "#{rev}We found an invalid program file at #{sfile(file)}#{rev}."
      opne "#{rev}The names are not the same: "\
           "#{orange(a)} != #{orange(b)}#{rev}."
    end
  }
end