Class: RBT::QueryFileAssociation

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

Overview

RBT::QueryFileAssociation

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect

Constants inherited from Base

Base::ALL_COLOUR_METHODS, Base::ARRAY_KDE_KONSOLE_COLOURS_IN_USE, Base::KONSOLE

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#abbreviations?, #add_to_the_commandline_arguments, #all_binaries?, #all_libraries?, #always_show_dependencies?, #appdir_location_of?, #append_what_into, #archive_type_of?, #available_programs?, #be_quiet?, #be_verbose?, #begins_with_a_comment?, #capitalize_first_alphabetical_character, #capitalize_program_names?, #cat, #cd_to_the_log_directory, #cd_to_the_temp_directory, #change_directory, #change_permission, #cheering_person?, #chmod, #chop_off_archive, #cliner, #colourize_directory_for_system_results, #colourize_this_error, #colourize_this_file_path, #colourize_this_warning, #commandline_arguments?, #commandline_arguments_without_hyphens?, #config?, #convert_env_variable, #cookbook_files?, #cookbooks_include_this_program?, #copy_directory, #copy_files, #copy_recursively, #cpr, #create_directory, #current_hour?, #dd_mmm_yyy, #debug, #debug?, #determine_appdir_prefix_from_this_input, #determine_archive_type, #directory_expanded_cookbooks?, #directory_validation?, #disable_colours, #display_md5sum?, #do_not_debug, #do_not_show_names, #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, #email?, #enable_colours, #enable_debug, #ensure_main_encoding_for, #eparse, #esystem, #esystem_gold, #etomato, #ewarn, #exit_on_unregistered_cookbook_entries?, #exit_program, #expanded_cookbooks_directory_exists?, #fast_return_file_size_of_this_program, #file_compiled_programs?, #file_last_symlinked_program?, #file_predefined_installation_instructions?, #file_programs_version_url, #file_specification_of_registered_cookbook_entries, #find_cookbook_alias_for, #find_this_yaml_file, #first_argument?, #gem_version, #get_all_directories_from, #get_all_files_from, #get_all_programs, #get_date, #get_files_and_directories_from, #go_to_base_dir, #home_dir?, #host_system?, #is_a_64bit_system?, #is_an_archive?, #is_ccache_available?, #is_file?, #is_on_gobolinux?, #is_on_windows?, #is_porg_available?, #is_roebe?, #is_this_a_header?, #is_this_a_library?, #is_this_program_included?, #load_dataset_from_this_expanded_cookbook, #load_yaml, #load_yaml_file_from_the_cookbook_directory_for_this_program, #log_directory?, #main_encoding?, #make_command?, make_command?, #make_install_command?, #move_file, #n_programs_available?, #new_cookbook_instance_for, #no_directory_exists_at, #no_opn, #no_such_file_exists, #open_in_browser, #open_in_editor, #opne, #opnef, #opnerror, #opnewarn, #opnn, #path_to_this_expanded_cookbooks_dataset, #play_song?, #predefined_installation_instructions?, #program_dir?, #program_exists?, #programs_dir?, #project_base_dir?, #project_yaml_directory?, #publish_list_of_all_programs_version, #rarrow?, #rbt_logs?, #read_file, #read_file_in_default_encoding, #readlines, #readlines_with_proper_encoding, #recipes_dir?, #register_sigint, registered_binaries?, #remove, #remove_archive_from_the_end, #remove_comments_from_each_line, #remove_directory, #remove_double_slashes, #remove_file, #remove_file_extension, #remove_newlines, #remove_parens, #remove_symlink, #remove_this_commandline_argument, #remove_trailing_ANSII_escape_code, #remove_unnecessary_data_from_url, #rename, #rename_kde_konsole_tab, #repackage, #report_n_programs, #report_pwd, #report_to_developers, #report_working_directory, #return_all_archives_from_this_directory, #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_n_random_characters, #return_opnn, #return_program_information, #return_program_name, #return_program_name_for_gobolinux_systems, #return_pwd, #return_unicode_warning_symbol_or_empty_string, #return_utc, #return_utc_time_in_a_format_similar_to_slackware, #return_version_of_this_program, #return_weekday_based_on_utc, #return_year_based_on_utc, #rev, #run_ldconfig?, #run_make_then_make_install, #run_simulation=, #run_simulation?, #sanitize_url1_entry, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_source_directory, #set_use_opn, #set_xorg_buffer, #sfancy, #sfile, #show_overview_over_available_utility_scripts, #silently_create_this_directory_if_it_does_not_yet_exist, #simp, #source_base_directory?, #ssym, #stderr, #store_into_this_directory?, #swarn, #symlink, #symlink_all_files_from_this_directory_to_that_directory, #sysbin_directory?, #sysetc_directory?, #sysinclude_directory?, #syslib_directory?, #sysshare_directory?, #system_directory?, #system_tags?, #temp_directory?, #to_bool, #to_camelcase, #to_unicode, #today?, #touch, #unicode_cliner, #unicode_middle_cliner, #upload_list_of_all_programs_version, #use_ccache?, #use_colours=, #use_colours?, #use_mrxvt?, #use_opn=, #use_opn?, #use_porg?, #use_stow?, #use_tags?, #use_yaml_database_for_tags?, #verbose_truth, #warn_and_exit, #wget, #word_wrap, #write_what_into, #write_what_into_via_unicode, #yes_or_no

Constructor Details

#initialize(commandline_arguments = nil, run_already = true) ⇒ QueryFileAssociation

#

initialize

#

42
43
44
45
46
47
48
49
50
51
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 42

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

Class Method Details

.[](i = '') ⇒ Object

#

RBT::QueryFileAssociation[]

#

481
482
483
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 481

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

Instance Method Details

#input_as_string?Boolean

#

input_as_string?

#

Returns:

  • (Boolean)

363
364
365
366
367
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 363

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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
306
307
308
309
310
311
312
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 270

def is_the_input_included?
  input = input_as_string?
  if @hash.has_key? input
    opnn; e 'The file '+sfancy(input)+' is included.'
    pointer = @hash[input]
    opnn; e '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
      opnn; e '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

#

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

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.

#

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
417
418
419
420
421
422
423
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 374

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)

#

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

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
    opnn; e result
  end
end

#report_that_this_is_a_binary_fileObject

#

report_that_this_is_a_binary_file

#

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

def report_that_this_is_a_binary_file
  opnn; e '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

#

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

def report_that_this_is_a_gir_file
  opnn; e "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

#

435
436
437
438
439
440
441
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 435

def report_that_this_is_a_header_file(use_opnn = true)
  case use_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

#

428
429
430
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 428

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

#report_that_this_is_a_m4_fileObject

#

report_that_this_is_a_m4_file

#

260
261
262
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 260

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

#report_that_this_is_a_pkgconfig_fileObject

#

report_that_this_is_a_pkgconfig_file

#

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

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

#resetObject

#

reset (reset tag)

#

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
95
96
97
98
99
100
101
102
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 56

def reset
  super()
  # ======================================================================= #
  # === @namespace
  # ======================================================================= #
  @namespace = 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)

#

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

def run
  if @commandline_arguments.empty?
    opnn; e '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 '.'.

#

124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 124

def sanitize_the_commandline_arguments
  @commandline_arguments.map! {|entry|
    if entry.include? '/'
      entry = File.basename(entry)
    end
    if entry.end_with? ':'
      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.

#

165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 165

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

#

107
108
109
110
111
112
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 107

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

#simplify_these_arguments(i) ⇒ Object

#

simplify_these_arguments

#

142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 142

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
        opnn; e "Unknown key given: #{steelblue(i)}"
      end
    end
    entry
  }
end

#the_input_is_includedObject Also known as: input_is_included

#

the_input_is_included

#

324
325
326
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 324

def the_input_is_included
  @is_included = true
end

#the_input_is_not_includedObject

#

the_input_is_not_included

#

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

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.

#

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
# File 'lib/rbt/utility_scripts/query_file_association.rb', line 333

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