Class: RBT::QueryFileAssociation

Inherits:
Base show all
Defined in:
lib/rbt/utility_scripts/query_file_association.rb

Overview

RBT::QueryFileAssociation

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

#

initialize

#


37
38
39
40
41
42
43
44
45
46
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 37

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::QueryFileAssociation[]

#


479
480
481
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 479

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

Instance Method Details

#input_as_string?Boolean

#

input_as_string?

#

Returns:

  • (Boolean)


356
357
358
359
360
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 356

def input_as_string?
  _ = input?
  _ = _.first if _.is_a? Array
  _
end

#is_it_a_binary?(i = input_as_string?) ) ⇒ Boolean

#

is_it_a_binary

#

Returns:

  • (Boolean)


193
194
195
196
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 193

def is_it_a_binary?(i = input_as_string?)
  i = i.first if i.is_a? Array
  @dataset_binaries and @dataset_binaries.has_key?(i)
end

#is_it_a_gir_file?(i = input_as_string?) ) ⇒ Boolean

#

is_it_a_gir_file?

#

Returns:

  • (Boolean)


217
218
219
220
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 217

def is_it_a_gir_file?(i = input_as_string?)
  i = i.first if i.is_a? Array
  @dataset_gir_files and @dataset_gir_files.has_key?(i)
end

#is_it_a_header?(i = input_as_string?) ) ⇒ Boolean Also known as: is_it_a_header_file?

#

is_it_a_header?

#

Returns:

  • (Boolean)


185
186
187
188
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 185

def is_it_a_header?(i = input_as_string?)
  i = i.first if i.is_a? Array
  @dataset_headers and @dataset_headers.has_key?(i)
end

#is_it_a_library?(i = input_as_string?) ) ⇒ Boolean

#

is_it_a_library?

#

Returns:

  • (Boolean)


177
178
179
180
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 177

def is_it_a_library?(i = input_as_string?)
  i = i.first if i.is_a? Array
  @dataset_libraries and @dataset_libraries.has_key?(i)
end

#is_it_a_m4_file?(i = input_as_string?) ) ⇒ Boolean

#

is_it_a_m4_file?

#

Returns:

  • (Boolean)


209
210
211
212
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 209

def is_it_a_m4_file?(i = input_as_string?)
  i = i.first if i.is_a? Array
  @dataset_m4_files and @dataset_m4_files.has_key?(i)
end

#is_it_a_pkgconfig_file?(i = input_as_string?) ) ⇒ Boolean

#

is_it_a_pkgconfig_file?

#

Returns:

  • (Boolean)


201
202
203
204
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 201

def is_it_a_pkgconfig_file?(i = input_as_string?)
  i = i.first if i.is_a? Array
  @dataset_pkgconfig_files and @dataset_pkgconfig_files.has_key?(i)
end

#is_the_input_included?Boolean

#

is_the_input_included?

This method does the actual query-part, that is, it attempts to determine whether the input is registered.

#

Returns:

  • (Boolean)


263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 263

def is_the_input_included?
  input = input_as_string?
  if @hash.has_key? input
    opne 'The file '+sfancy(input)+' is included.'
    pointer = @hash[input]
    opne 'It belongs to the program called '+steelblue(pointer)+'. '
    # ======================================================================= #
    # === Library file
    # ======================================================================= #
    if is_it_a_library?
      report_that_this_is_a_library_file
    # ======================================================================= #
    # === Binary file
    # ======================================================================= #
    elsif is_it_a_binary?
      report_that_this_is_a_binary_file
    # ======================================================================= #
    # === Header file
    # ======================================================================= #
    elsif is_it_a_header?
      report_that_this_is_a_header_file
    # ======================================================================= #
    # === .gir file
    # ======================================================================= #
    elsif is_it_a_gir_file?
      report_that_this_is_a_gir_file
    # ======================================================================= #
    # === pkg-config file
    # ======================================================================= #
    elsif is_it_a_pkgconfig_file?
      report_that_this_is_a_pkgconfig_file
    # ======================================================================= #
    # === m4 file
    # ======================================================================= #
    elsif is_it_a_m4_file?
      report_that_this_is_a_m4_file
    else
      opne 'The file-type association for this program is unknown.'
    end
    the_input_is_included
    return pointer # We will return it here as well.
  end
end

#merge_this_dataset_onto_the_main_hash(i) ⇒ Object

#

merge_this_dataset_onto_the_main_hash

#


225
226
227
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 225

def merge_this_dataset_onto_the_main_hash(i)
  @hash.update(i)
end

#merge_together_the_available_filesObject

#

merge_together_the_available_files

This method can be used to merge in the available dataset.

#


367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 367

def merge_together_the_available_files
  # ======================================================================= #
  # === Merge in the libraries
  # ======================================================================= #
  _ = RBT.file_registered_libraries # Add the registered libraries here.
  if File.exist? _
    @dataset_libraries = sanitize_the_keys_of_this_hash(load_yaml(_))
    merge_this_dataset_onto_the_main_hash(@dataset_libraries)
  end
  # ======================================================================= #
  # === Merge in the headers
  # ======================================================================= #
  _ = RBT.file_registered_headers # Add the registered headers here.
  if File.exist? _
    @dataset_headers = load_yaml(_)
    merge_this_dataset_onto_the_main_hash(@dataset_headers)
  end
  # ======================================================================= #
  # === Merge in the binaries
  # ======================================================================= #
  _ = RBT.file_registered_binaries # Add the registered binaries here.
  if File.exist? _
    @dataset_binaries = sanitize_the_keys_of_this_hash(load_yaml(_))
    merge_this_dataset_onto_the_main_hash(@dataset_binaries)
  end
  # ======================================================================= #
  # === Merge in the pkgconfig .pc files
  # ======================================================================= #
  _ = RBT.file_registered_pkgconfig_files # Add the registered pkgconfig files here.
  if File.exist? _
    @dataset_pkgconfig_files = sanitize_the_keys_of_this_hash(load_yaml(_))
    merge_this_dataset_onto_the_main_hash(@dataset_pkgconfig_files)
  end
  # ======================================================================= #
  # === Merge in the .m4 files
  # ======================================================================= #
  _ = RBT.file_registered_m4_files
  if File.exist? _
    @dataset_m4_files = sanitize_the_keys_of_this_hash(load_yaml(_))
    merge_this_dataset_onto_the_main_hash(@dataset_m4_files)
  end
  # ======================================================================= #
  # === Merge in the .gir files
  # ======================================================================= #
  _ = RBT.file_registered_gir_files # Add the registered gir files come here.
  if File.exist? _
    @dataset_gir_files = sanitize_the_keys_of_this_hash(load_yaml(_))
    merge_this_dataset_onto_the_main_hash(@dataset_gir_files)
  end
end

#reportObject

#

report (report tag)

#


444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 444

def report
  flat_include = is_the_input_included?
  if flat_include
    the_input_is_included
  else
    try_a_deep_included_query
  end
  unless @is_included
    # ===================================================================== #
    # Notify the user that the input was not found - it is not included.
    # ===================================================================== #
    result = "The file #{sfancy(input_as_string?)} is #{orangered('NOT')} included."
    if Object.const_defined?(:Roebe) and Roebe.respond_to?(:sad_smiley)
      result = result.dup if result.frozen?
      result << steelblue(" #{Roebe.sad_smiley}")
    end
    opne result
  end
end

#report_that_this_is_a_binary_fileObject

#

report_that_this_is_a_binary_file

#


232
233
234
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 232

def report_that_this_is_a_binary_file
  opne 'It is '+olivedrab('an executable file')+' (often also a binary file).'
end

#report_that_this_is_a_gir_fileObject

#

report_that_this_is_a_gir_file

#


239
240
241
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 239

def report_that_this_is_a_gir_file
  opne "It is #{olivedrab('a .gir file')}."
end

#report_that_this_is_a_header_file(use_opnn = true) ⇒ Object

#

report_that_this_is_a_header_file

#


428
429
430
431
432
433
434
435
436
437
438
439
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 428

def report_that_this_is_a_header_file(
    use_opnn = true
  )
  case use_opnn
  # ======================================================================= #
  # === :no_opnn
  # ======================================================================= #
  when :no_opnn
    use_opnn = false
  end
  opnn if use_opnn; e "It is #{olivedrab('a header file')}."
end

#report_that_this_is_a_library_fileObject

#

report_that_this_is_a_library_file

#


421
422
423
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 421

def report_that_this_is_a_library_file
  opne "It is #{olivedrab('a library file')}."
end

#report_that_this_is_a_m4_fileObject

#

report_that_this_is_a_m4_file

#


253
254
255
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 253

def report_that_this_is_a_m4_file
  opne "It is #{olivedrab('a .m4 file')}."
end

#report_that_this_is_a_pkgconfig_fileObject

#

report_that_this_is_a_pkgconfig_file

#


246
247
248
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 246

def report_that_this_is_a_pkgconfig_file
  opne "It is #{olivedrab('a pkg-config file')}."
end

#resetObject

#

reset (reset tag)

#


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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 51

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @is_included
  #
  # This variable keeps track as to whether the input is included or
  # whether it is not.
  # ======================================================================= #
  @is_included = false
  # ======================================================================= #
  # === @dataset_libraries
  # ======================================================================= #
  @dataset_libraries = nil
  # ======================================================================= #
  # === @dataset_headers
  # ======================================================================= #
  @dataset_headers = nil
  # ======================================================================= #
  # === @dataset_binaries
  # ======================================================================= #
  @dataset_binaries = nil
  # ======================================================================= #
  # === @dataset_pkgconfig_files
  # ======================================================================= #
  @dataset_pkgconfig_files = nil
  # ======================================================================= #
  # === @dataset_m4_files
  # ======================================================================= #
  @dataset_m4_files = nil
  # ======================================================================= #
  # === @dataset_gir_files
  # ======================================================================= #
  @dataset_gir_files = nil
  # ======================================================================= #
  # === @hash
  #
  # This is the main hash. It will contain all files, and point them
  # to the corresponding program at hand.
  #
  # We must of course properly "initialize" it with the correct data.
  # ======================================================================= #
  @hash = {}
end

#runObject

#

run (run tag)

#


467
468
469
470
471
472
473
474
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 467

def run
  if commandline_arguments?.empty?
    opne 'Please provide an argument to this class.'
  else
    merge_together_the_available_files
    report
  end
end

#sanitize_the_commandline_argumentsObject

#

sanitize_the_commandline_arguments

This method will, at the least presently, only change entries that contain a ‘/’ character. The method assumes that such an input would be invalid.

Since as of January, trailing ‘:’ will be removed too, as will trailing ‘.’.

#


116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 116

def sanitize_the_commandline_arguments
  commandline_arguments?.map! {|entry|
    if entry.include? '/'
      entry = File.basename(entry)
    end
    if entry.end_with? ':'
      entry = entry.dup if entry.frozen?
      entry.chop!
    end
    if entry.end_with? '.'
      entry.sub!(/\.+$/,'')
    end
    entry
  }
end

#sanitize_the_keys_of_this_hash(i) ⇒ Object

#

sanitize_the_keys_of_this_hash

This method essentially turns the keys of a Hash into the short variant, without any ‘/’ as their part. This should not be done for several of the Hashes, though - in particular not for the header files.

#


158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 158

def sanitize_the_keys_of_this_hash(i)
  # ======================================================================= #
  # We are only interested in short keys, so let's do that:
  # ======================================================================= #
  dataset = i.transform_keys {|key|
    unless key.is_a? String
      e swarn('An error occurred: the key is not a string.')
      e swarn('This ought to be fixed.')
      pp key
      exit
    end
    File.basename(key)
  }
  dataset
end

#set_commandline_arguments(i = '') ⇒ Object

#

set_commandline_arguments

#


99
100
101
102
103
104
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 99

def set_commandline_arguments(i = '')
  i = [i].flatten.compact
  i = simplify_these_arguments(i)
  @internal_hash[:commandline_arguments] = i
  sanitize_the_commandline_arguments
end

#simplify_these_arguments(i) ⇒ Object

#

simplify_these_arguments

#


135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 135

def simplify_these_arguments(i)
  i.map {|entry|
    if entry.is_a? Hash
      if entry.has_key? :of
        entry = entry.delete(:of)
      elsif entry.has_key? :of_this_file
        entry = entry.delete(:of_this_file)
      else
        opne "Unknown key given: #{steelblue(i)}"
      end
    end
    entry
  }
end

#the_input_is_includedObject Also known as: input_is_included

#

the_input_is_included

#


317
318
319
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 317

def the_input_is_included
  @is_included = true
end

#the_input_is_not_includedObject

#

the_input_is_not_included

#


310
311
312
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 310

def the_input_is_not_included
  @is_included = false
end

#try_a_deep_included_queryObject

#

try_a_deep_included_query (deep tag)

This method is used specifically to try a deep include.

#


326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 326

def try_a_deep_included_query
  input = input_as_string?
  selection = @hash.select {|key, value|
    key.end_with? "/#{input}"
  }
  if selection.empty?
    # ===================================================================== #
    # Do nothing.
    # ===================================================================== #
  else
    input_is_included
    e "#{rev}The following associations were found:"
    e
    selection.each_pair {|key, name_of_the_program|
      print '  '+steelblue(key.ljust(16))+' → belongs to '\
        'the program called `'+royalblue(name_of_the_program)+'`. '+
        ''.ljust(6 - name_of_the_program.size)
      if key.end_with? '.h'
        report_that_this_is_a_header_file(:no_opnn)
      else
        e
      end
    }
    e
  end
end