Class: RBT::Action::ShowAllAbout

Inherits:
RBT::Action show all
Defined in:
lib/rbt/actions/individual_actions/information/show_all_about.rb

Overview

RBT::Action::ShowAllAbout

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

#

initialize

#


38
39
40
41
42
43
44
45
46
47
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 38

def initialize(
    this_program = nil, # We specifically avoid using ARGV here.
    run_already  = true
  )
  reset
  set_program(
    this_program
  )
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Action::ShowAllAbout[]

#


381
382
383
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 381

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

Instance Method Details

#colourize_or_dont_colourize_in_steelblue(i) ⇒ Object

#

colourize_or_dont_colourize_in_steelblue

#


140
141
142
143
144
145
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 140

def colourize_or_dont_colourize_in_steelblue(i)
  if use_colours?
    i = steelblue(i).dup
  end
  return i
end

#determine_available_programsObject

#

determine_available_programs

#


133
134
135
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 133

def determine_available_programs
  @available_programs = available_programs?
end
#

menu (menu tag)

#


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 83

def menu(i)
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # case tag
    # ===================================================================== #
    # === --do-not-truncate
    #
    # Usage example:
    #
    #   show_all_about glibc --do-not-truncate
    #
    # ===================================================================== #
    when /^-?-?do(-|_| )?not(-|_| )?truncate$/i,
         /^-?-?no(-|_| )?truncate$/i,
         /^-?-?no(-|_| )?limits$/i
      @limit_to_n_headers   = nil
      @limit_to_n_libraries = nil
    # ===================================================================== #
    # === show_all_about --help
    # ===================================================================== #
    when /-?-?help/
      show_help
      exit
    end
  end
end

#program_name?Boolean

#

program_name?

#

Returns:

  • (Boolean)


126
127
128
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 126

def program_name?
  @program
end

#resetObject

#

reset (reset tag)

#


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
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 52

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @n_header_files_so_far
  # ======================================================================= #
  @n_header_files_so_far  = 0
  # ======================================================================= #
  # === @n_library_files_so_far
  #
  # This variable can also be used to determine how many library
  # files are in this dataset.
  # ======================================================================= #
  @n_library_files_so_far = 0
  # ======================================================================= #
  # === @limit_to_n_headers
  #
  # This variable is set to a low value initially, 10 right now.
  # ======================================================================= #
  @limit_to_n_headers = 10
  # ======================================================================= #
  # === @limit_to_n_libraries
  #
  # This variable is set to a low value initially, 10 right now.
  # ======================================================================= #
  @limit_to_n_libraries = 10
end

#return_n_headersObject

#

return_n_headers

#


325
326
327
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 325

def return_n_headers
  @cookbook_dataset.n_headers?
end

#return_n_librariesObject

#

return_n_libraries

#


332
333
334
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 332

def return_n_libraries
  @cookbook_dataset.n_libraries?
end

#runObject

#

run (run tag)

#


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
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 339

def run
  _ = program_name?.downcase # Must downcae it since as of Jan 2018.
  determine_available_programs
  if @available_programs.include? _
    opne "Now showing all about `#{seagreen(_)}#{rev}`.#{N}#{N}"
    cookbook_location = "#{individual_cookbooks_directory?}#{_}.yml"
    # ===================================================================== #
    # Check whether the cookbook .yml file exists.
    # ===================================================================== #
    if File.exist? cookbook_location
      # =================================================================== #
      # Since as of January 2018, we will also check this cookbook file
      # for errors.
      # =================================================================== #
      if Object.const_defined?(:RBT) and
         RBT.respond_to?(:does_this_cookbook_file_have_any_erroneous_entry?)
        if RBT.does_this_cookbook_file_have_any_erroneous_entry?(cookbook_location)
          opne "#{rev}Note that the file `#{sfile(cookbook_location)}#{rev}`"
          opne "#{rev}has at the least one erroneous entry."
          RBT.check_this_cookbook_file_for_errors(cookbook_location)
        end
      end
    end
    # ===================================================================== #
    # Simply use File.readlines() rather than YAML.load_file() next.
    # ===================================================================== #
    _ = File.basename(cookbook_location).
        delete_suffix('.yml')
    @cookbook_dataset = ::RBT.load_this_cookbook(_)
    dataset = readlines_with_proper_encoding(cookbook_location)
    dataset = sanitize_this_dataset(dataset)
    dataset = dataset.join
    cliner { e dataset }
  else
    opne "#{rev}No program called `#{seagreen(_)}#{rev}` appears "\
         "to be registered.#{N}"
  end
end

#sanitize_this_dataset(i) ⇒ Object

#

sanitize_this_dataset

This method will return the dataset, which is an Array.

#


218
219
220
221
222
223
224
225
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
258
259
260
261
262
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
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 218

def sanitize_this_dataset(i)
  i.map! {|entry|
    entry = entry.dup if entry.frozen?
    # ===================================================================== #
    # Build up our temporary string next.
    # ===================================================================== #
    result = ''.dup
    # ===================================================================== #
    # Only deal with entries that could start with " - ".
    # ===================================================================== #
    if entry.chomp == ' headers:'
      entry.chomp!
      entry << colourize_or_dont_colourize_in_steelblue(
        "  [#{return_n_headers} headers]#{rev}\n".dup
      )+rev
    elsif entry.chomp == ' libraries:'
      entry.chomp!
      entry = rev+entry
      entry << rev+colourize_or_dont_colourize_in_steelblue(
        "  [#{return_n_libraries} libraries]#{rev}\n".dup
      )+rev
    end
    if entry.start_with?(' - ')
      # =================================================================== #
      # === Handle library files
      #
      # Handle library files (.so files and .a files) next:
      # =================================================================== #
      if is_this_a_library?(entry)
        @n_library_files_so_far += 1
        if @limit_to_n_libraries
          if @n_library_files_so_far < @limit_to_n_libraries
            # Pass through.
          elsif @n_library_files_so_far == @limit_to_n_libraries
            add_this = "   [Truncated ... no more .so / .a files shown "\
                       "past the #{@limit_to_n_libraries} .so / .a files limit.]#{rev}\n".dup
            if use_colours?
              add_this = steelblue(add_this).dup
            end
            next_line = "   [You can use --do-not-truncate to ignore the above limit.]#{rev}\n" 
            if use_colours?
              splitted = next_line.split('--do-not-truncate')
              next_line = steelblue(splitted[0])+
                          tomato('--do-not-truncate')+
                          steelblue(splitted[1])+
                          rev
            end
            add_this << next_line
            entry << add_this
          else
            entry = ''
          end
        end
      # =================================================================== #
      # === Handle header files
      #
      # Handle header files, such as .h in particular, next:
      # =================================================================== #
      elsif is_this_a_header?(entry)
        @n_header_files_so_far += 1
        if @limit_to_n_headers
          if @n_header_files_so_far < @limit_to_n_headers
            # Pass through.
          elsif @n_header_files_so_far == @limit_to_n_headers
            add_this = "   [Truncated ... no more .h files shown "\
                       "past the #{@limit_to_n_headers} .h files limit.]\n".dup
            add_this << "#{rev}   [You can use --do-not-truncate to "\
                        "ignore the above limit.]\n" 
            if use_colours?
              add_this = steelblue(add_this)
            end
            entry << add_this
          else
            entry = ''
          end
        end
      else # else we don't need to modify anything.
      end
    # ===================================================================== #
    # === Check if we have the homepage: entry here
    #
    # If so then we will modify this a bit, in the sense of
    # colourizing the homepage: entry in the colour orange.
    # ===================================================================== #
    elsif entry.start_with? ' homepage: '
      entry = "#{orange(entry)}#{rev}"
    # ===================================================================== #
    # === git_url:
    # ===================================================================== #
    elsif entry.start_with? ' git_url: '
      entry = mediumslateblue(entry)+rev
    end
    # ===================================================================== #
    # Pad it with two ' ' on the left side a bit.
    # ===================================================================== #
    result << "  #{entry}" unless entry.empty?
    # ===================================================================== #
    # Return this result.
    # ===================================================================== #
    result
  }
  i
end

#set_program(i) ⇒ Object

#

set_program

This method will set the program name.

#


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
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 152

def set_program(i)
  if i.is_a? Array
    menu(
      i[1 .. -1]
    )
    i = i.first
  end
  if i.nil?
    # ===================================================================== #
    # In this case, if the user did not provide anything useful, we will
    # simply try to use a name inferred from the current working directory.
    # ===================================================================== #
    possible_name = ::ProgramInformation.return_program_name(
      File.basename(return_pwd)
    )
    i = possible_name if possible_name
  end
  original_input = i.dup
  # ======================================================================= #
  # The input may include '_', '-' or '.', which are not a valid name
  # for a cookbook-recipe, so we get rid of these characters.
  # ======================================================================= #
  i = i.dup if i.frozen?
  i.delete!('-') if i.include? '-'
  i.delete!('_') if i.include? '_'
  i.delete!('.') if i.include? '.' # <- Trailing '.' are disallowed.
  i = RBT.return_alias_program_name_for(i)
  if original_input != i
    opne "#{rev}Using the alias name `#{sfancy(i)}#{rev}` rather "\
         "than `#{royalblue(original_input)}#{rev}`."
  end
  # ======================================================================= #
  # Make use of Cookbook-aliases next, so that "libatomic" is a valid
  # alias for "libatomic_ops".
  # ======================================================================= #
  unless RBT.does_include?(i)
    # ===================================================================== #
    # Ok the program is not there.
    # ===================================================================== #
    possible_new_name = RBT.return_alias_program_name_for(i)
    unless possible_new_name == i
      i = possible_new_name
    end
    unless RBT.does_include?(i)
      # =================================================================== #
      # Try to prepend 'lib' there and try again.
      # =================================================================== #
      if RBT.does_include?("lib#{i}")
        i = i.dup if i.frozen?
        i.prepend('lib')
        opne 'We found another program name ('+sfancy(i)+rev+
             ') - will use this one instead.'
      elsif i.start_with?('lib') and RBT.does_include?(i[3..-1])
        i = i[3..-1]
      end
    end
  end
  @program = i
  menu(i)
end

#show_helpObject

#

show_help (help tag)

#


114
115
116
117
118
119
120
121
# File 'lib/rbt/actions/individual_actions/information/show_all_about.rb', line 114

def show_help
  unless Object.const_defined? :ClassDocuShower
    require 'class_docu_shower'
  end
  opne 'This is what this class will do:'
  e
  ClassDocuShower[__FILE__]
end