environment_information 1.4.124 → 1.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +91 -15
  3. data/doc/README.gen +42 -14
  4. data/doc/todo/TODO_FOR_THE_ENVIRONMENT_INFORMATION_PROJECT.md +16 -12
  5. data/lib/environment_information/base/base.rb +483 -99
  6. data/lib/environment_information/colours/colours.rb +92 -66
  7. data/lib/environment_information/commandline/commandline.rb +137 -0
  8. data/lib/environment_information/constants/constants.rb +372 -11
  9. data/lib/environment_information/project/project.rb +1 -1
  10. data/lib/environment_information/query/constants.rb +46 -0
  11. data/lib/environment_information/query/help.rb +88 -0
  12. data/lib/environment_information/query/menu.rb +487 -0
  13. data/lib/environment_information/query/misc.rb +2006 -0
  14. data/lib/environment_information/query/query.rb +245 -0
  15. data/lib/environment_information/query/reset.rb +202 -0
  16. data/lib/environment_information/query/run.rb +70 -0
  17. data/lib/environment_information/requires/require_the_environment_information_project.rb +2 -7
  18. data/lib/environment_information/requires/require_the_toplevel_methods.rb +1 -3
  19. data/lib/environment_information/toplevel_methods/toplevel_methods.rb +2258 -0
  20. data/lib/environment_information/version/version.rb +2 -2
  21. data/lib/environment_information/www/sinatra_interface.rb +20 -17
  22. data/lib/environment_information/www/webobject_interface.cgi +6 -7
  23. data/lib/environment_information/yaml/colours.yml +3 -3
  24. data/lib/environment_information/yaml/query_to_use_for_all_components.yml +284 -0
  25. data/lib/environment_information/yaml/{array_tracked_programs.yml → track_these_components.yml} +77 -11
  26. metadata +18 -60
  27. data/lib/environment_information/class/class.rb +0 -2580
  28. data/lib/environment_information/class/colours.rb +0 -282
  29. data/lib/environment_information/colours/sfancy.rb +0 -19
  30. data/lib/environment_information/colours/simp.rb +0 -19
  31. data/lib/environment_information/constants/array_tracked_components.rb +0 -210
  32. data/lib/environment_information/constants/encoding.rb +0 -21
  33. data/lib/environment_information/constants/error_line.rb +0 -17
  34. data/lib/environment_information/constants/file_constants.rb +0 -102
  35. data/lib/environment_information/constants/misc.rb +0 -86
  36. data/lib/environment_information/constants/namespace.rb +0 -14
  37. data/lib/environment_information/constants/newline.rb +0 -16
  38. data/lib/environment_information/constants/regex.rb +0 -30
  39. data/lib/environment_information/constants/temp_directory.rb +0 -52
  40. data/lib/environment_information/misc_components/README.md +0 -3
  41. data/lib/environment_information/misc_components/cflags.rb +0 -36
  42. data/lib/environment_information/misc_components/cpuinfo.rb +0 -64
  43. data/lib/environment_information/misc_components/operating_system.rb +0 -54
  44. data/lib/environment_information/misc_components/operating_system_bit_type.rb +0 -42
  45. data/lib/environment_information/misc_components/ram.rb +0 -30
  46. data/lib/environment_information/misc_components/rubygems_installation_directory.rb +0 -54
  47. data/lib/environment_information/misc_components/screen_resolution.rb +0 -50
  48. data/lib/environment_information/queries/README.md +0 -2
  49. data/lib/environment_information/queries/complex_version.rb +0 -273
  50. data/lib/environment_information/queries/pkg_config.rb +0 -125
  51. data/lib/environment_information/queries/simple_version.rb +0 -272
  52. data/lib/environment_information/requires/require_the_individual_misc_components.rb +0 -30
  53. data/lib/environment_information/toplevel_methods/autogenerate_all_relevant_methods.rb +0 -153
  54. data/lib/environment_information/toplevel_methods/cd.rb +0 -16
  55. data/lib/environment_information/toplevel_methods/e.rb +0 -43
  56. data/lib/environment_information/toplevel_methods/hash.rb +0 -65
  57. data/lib/environment_information/toplevel_methods/internet_is_available.rb +0 -30
  58. data/lib/environment_information/toplevel_methods/is_on_roebe.rb +0 -16
  59. data/lib/environment_information/toplevel_methods/menu.rb +0 -90
  60. data/lib/environment_information/toplevel_methods/misc.rb +0 -324
  61. data/lib/environment_information/toplevel_methods/n_subcommands.rb +0 -31
  62. data/lib/environment_information/toplevel_methods/prefix_to_use.rb +0 -39
  63. data/lib/environment_information/toplevel_methods/register_this_component_is_missing.rb +0 -61
  64. data/lib/environment_information/toplevel_methods/remote_url_of_this_program.rb +0 -45
  65. data/lib/environment_information/toplevel_methods/replay_from_the_stored_file.rb +0 -84
  66. data/lib/environment_information/toplevel_methods/return_alias_to.rb +0 -30
  67. data/lib/environment_information/toplevel_methods/return_pkgconfig_based_programs.rb +0 -28
  68. data/lib/environment_information/toplevel_methods/return_remote_gtk2_version.rb +0 -54
  69. data/lib/environment_information/toplevel_methods/return_simple_version_based_programs.rb +0 -28
  70. data/lib/environment_information/toplevel_methods/return_version_of_this_program.rb +0 -182
  71. data/lib/environment_information/toplevel_methods/show_all_available_components.rb +0 -192
  72. data/lib/environment_information/toplevel_methods/write_what_into.rb +0 -24
  73. data/lib/environment_information/yaml/array_default_programs_on_linux.yml +0 -15
  74. data/lib/environment_information/yaml/array_lfs_core_programs.yml +0 -37
  75. data/lib/environment_information/yaml/array_science_cluster.yml +0 -12
  76. data/lib/environment_information/yaml/array_tracked_non_programs.yml +0 -13
  77. data/lib/environment_information/yaml/array_tracked_xorg_components.yml +0 -37
  78. data/lib/environment_information/yaml/query_to_use_for_the_individual_components.yml +0 -284
@@ -0,0 +1,2006 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # ============================================================================ #
5
+ # require 'environment_information/query/misc.rb'
6
+ # ============================================================================ #
7
+ require 'environment_information/base/base.rb'
8
+
9
+ module EnvironmentInformation
10
+
11
+ class Query < ::EnvironmentInformation::Base # === EnvironmentInformation::Query
12
+
13
+ # ========================================================================== #
14
+ # === do_show_everything (everything tag, full tag)
15
+ #
16
+ # This method can be used when the user wishes to enable seeing
17
+ # full information about his local environment (on the computer).
18
+ #
19
+ # This will always display EVERY registered component.
20
+ #
21
+ # Commandline invocation:
22
+ #
23
+ # envi --everything
24
+ #
25
+ # ========================================================================== #
26
+ def add_everything
27
+ add(:everything) # Simply add everything.
28
+ end; alias do_show_full_information add_everything # === do_show_full_information
29
+ alias show_full_information add_everything # === show_full_information
30
+ alias do_show_everything add_everything # === do_show_everything
31
+
32
+ # ========================================================================== #
33
+ # === check_for_nil_values
34
+ # ========================================================================== #
35
+ def check_for_nil_values(
36
+ i,
37
+ this_program = nil
38
+ )
39
+ case i
40
+ # ======================================================================== #
41
+ # Register some errors next:
42
+ # ======================================================================== #
43
+ when nil,'',
44
+ /: command not found/,
45
+ /^options$/,
46
+ /was not found in the pkg-?config search path./,
47
+ /was not found in the pkg-?conf/,
48
+ /error while loading shared libraries/
49
+ i = NOT_FOUND
50
+ ::EnvironmentInformation.register_this_component_is_missing(this_program)
51
+ end
52
+ return i
53
+ end
54
+
55
+ # ========================================================================== #
56
+ # === display_this_component
57
+ #
58
+ # This method may NOT work on Arrays.
59
+ #
60
+ # This method is allowed to make modifications to the given input.
61
+ # ========================================================================== #
62
+ def display_this_component(
63
+ name_of_the_component,
64
+ hash = the_primary_hash?,
65
+ use_padding = true
66
+ )
67
+ version = hash[name_of_the_component.to_sym].strip
68
+ original_version = version.to_s.dup.strip
69
+ # ======================================================================== #
70
+ # This used to be called "report_left_right". The right side
71
+ # constitutes the program-version, shortened towards just "version".
72
+ # ======================================================================== #
73
+ case name_of_the_component
74
+ # ======================================================================== #
75
+ # === cpuinfo
76
+ # ======================================================================== #
77
+ when :cpuinfo,
78
+ /^cpuinfo$/i
79
+ name_of_the_component = 'CPU Model'
80
+ # ======================================================================== #
81
+ # === :operating_system
82
+ # ======================================================================== #
83
+ when :operating_system,
84
+ /^operating(_|-)?system$/i,
85
+ /^operating(_|-)?system(_|-)?in(_|-)?use$/i
86
+ name_of_the_component = 'Operating system'
87
+ # ======================================================================== #
88
+ # === operating_system_bit_type
89
+ # ======================================================================== #
90
+ when :operating_system_bit_type,
91
+ /^operating(_|-)?system(_|-)?bit(_|-)?type$/i
92
+ name_of_the_component = 'Operating system bit type'
93
+ # ======================================================================== #
94
+ # === :ram
95
+ # ======================================================================== #
96
+ when :ram, /^ram$/i
97
+ name_of_the_component = 'RAM'
98
+ # ======================================================================== #
99
+ # === :cflags
100
+ # ======================================================================== #
101
+ when :cflags,
102
+ /^cflags$/i
103
+ name_of_the_component = 'CFLAGS in use'
104
+ # ======================================================================== #
105
+ # === screen_resolution
106
+ #
107
+ # This is a bit "special" in the sense that this class will colourize
108
+ # the middle 'x', if found, and if colours are used.
109
+ # ======================================================================== #
110
+ when :screen_resolution,
111
+ /^screen( |_)?resolution$/i
112
+ name_of_the_component = 'Screen Resolution:'
113
+ if use_padding
114
+ name_of_the_component = name_of_the_component.ljust(N_LEFT_PAD)
115
+ end
116
+ if version.include?('x') and use_colours?
117
+ splitted = version.split('x')
118
+ version = colourize_this_in_the_right_side_colour(splitted.first)+
119
+ royalblue('x')+
120
+ colourize_this_in_the_right_side_colour(splitted.last)
121
+ end
122
+ end
123
+ if name_of_the_component.is_a?(String) and name_of_the_component.include?(':')
124
+ the_left_side = "#{name_of_the_component}"
125
+ else
126
+ the_left_side = "#{name_of_the_component}:"
127
+ end
128
+ if use_padding
129
+ the_left_side = the_left_side.ljust(N_LEFT_PAD)
130
+ end
131
+ if version.include?(NOT_FOUND)
132
+ version = lightseagreen(version, use_colours?)
133
+ else
134
+ version = right_side(version)
135
+ end
136
+ the_right_side = version.dup.strip
137
+ # ======================================================================== #
138
+ # === @internal_hash[:report_the_remote_urls]
139
+ #
140
+ # Next, honour @internal_hash[:report_the_remote_urls] if it is
141
+ # set to true.
142
+ # ======================================================================== #
143
+ if report_the_remote_urls? and
144
+ is_rbt_available? and
145
+ RBT.respond_to?(:remote_url_for?)
146
+ _ = this_component.to_s.delete('-').downcase.strip.to_sym
147
+ # ====================================================================== #
148
+ # Query whether RBT keeps track of that program:
149
+ # ====================================================================== #
150
+ if RBT.does_include?(_)
151
+ # ==================================================================== #
152
+ # Next we will obtain the remote URL:
153
+ # ==================================================================== #
154
+ remote_URL = RBT.remote_url_for?(_, :return_as_string)
155
+ if is_a_registered_component? _
156
+ the_right_side = the_right_side.ljust(58, ' ')
157
+ the_right_side << " #{olive('→')} #{lightgreen(remote_URL)}" # Colourize the URL in olive.
158
+ end
159
+ end
160
+ end
161
+ # ======================================================================== #
162
+ # Next compare the program versions with the local versions.
163
+ # ======================================================================== #
164
+ if compare_program_versions? and
165
+ is_rbt_available_and_may_we_try_to_use_rbt? and
166
+ RBT.respond_to?(:swift_return_version_of_this_program) and
167
+ RBT.does_include?(name_of_the_component.to_s.strip.delete(':'))
168
+ # ====================================================================== #
169
+ # Example:
170
+ #
171
+ # RBT.swift_return_version_of_this_program(:gettext)
172
+ #
173
+ # ====================================================================== #
174
+ registered_local_version = RBT.swift_return_version_of_this_program(
175
+ name_of_the_component.to_s.strip.delete(':').to_sym
176
+ ).to_s
177
+ # ====================================================================== #
178
+ # We ignore gtk2 when it comes to the version-check.
179
+ # ====================================================================== #
180
+ return if name_of_the_component.to_sym == :gtk2
181
+ # ====================================================================== #
182
+ # Next use Gem::Version to compare them, but not if the version
183
+ # is nil.
184
+ # ====================================================================== #
185
+ unless version.nil? or (version.to_s.include?(NOT_FOUND))
186
+ # ==================================================================== #
187
+ # The .delete('v') is specifically for libuv or node.
188
+ # ==================================================================== #
189
+ registered_local_version = registered_local_version.to_s.dup.
190
+ delete('v').
191
+ tr('_','.')
192
+ a = compare_via_gem_version(registered_local_version)
193
+ b = compare_via_gem_version(original_version)
194
+ if a and b and (a > b)
195
+ result = ''.dup
196
+ if use_one_line_to_show_the_result?
197
+ result << mediumaquamarine(' ← ')
198
+ else # else this is the default.
199
+ result << lightblue(' ^^^^ ')
200
+ end
201
+ result << slateblue('This program could be '\
202
+ 'upgraded, to the version ')+
203
+ steelblue(registered_local_version)+
204
+ ' (original_version was: '+original_version.to_s+')'
205
+ e result
206
+ end if registered_local_version =~ /\d+/
207
+ end
208
+ end
209
+ display_left_side_then_the_right_side(
210
+ the_left_side,
211
+ the_right_side
212
+ )
213
+ end; alias do_report_this_component display_this_component # === do_report_this_component
214
+
215
+ # ========================================================================== #
216
+ # === display_left_side_then_the_right_side
217
+ #
218
+ # This method will simply display what is passed into it. It is NOT
219
+ # allowed to do ANY modifications to the given input.
220
+ # ========================================================================== #
221
+ def display_left_side_then_the_right_side(
222
+ the_left_side = nil,
223
+ the_right_side = nil
224
+ )
225
+ e "#{left_side(the_left_side)}#{the_right_side}"
226
+ end
227
+
228
+ # ========================================================================== #
229
+ # === display_these_components (report tag)
230
+ #
231
+ # This method operates on an Array at all times.
232
+ # ========================================================================== #
233
+ def display_these_components(
234
+ array = array_work_on_these_components?
235
+ )
236
+ unless do_exit_the_program?
237
+ # ====================================================================== #
238
+ # === Report step
239
+ #
240
+ # We may only display the components if display_result? is true.
241
+ # ====================================================================== #
242
+ return unless display_result?
243
+ array = [array].flatten.compact
244
+ if array.empty?
245
+ notify_the_user_that_there_are_no_components_that_can_be_displayed # And this ends here.
246
+ else
247
+ array.each {|name_of_the_program|
248
+ display_this_component(name_of_the_program)
249
+ }
250
+ end
251
+ end
252
+ end; alias do_work_through_all_the_specified_components display_these_components # === do_work_through_all_the_specified_components
253
+ alias report display_these_components # === report
254
+ alias report_result display_these_components # === report_result
255
+ alias build_up_the_main_string display_these_components # === build_up_the_main_string
256
+ alias register_the_available_components_and_show_them_at_once display_these_components # === register_the_available_components_and_show_them_at_once
257
+ alias display_the_components display_these_components # === display_the_components
258
+ alias display_the_dataset display_these_components # === display_the_dataset
259
+ alias display_the_main_components display_these_components # === build_up_the_main_string
260
+ alias report_the_findings_from_this display_these_components # === report_the_findings_from_this
261
+
262
+
263
+ def ___report_the_findings_from_this
264
+ hash.each_pair {|name, version|
265
+ do_report_this_component(name, hash, use_padding)
266
+ case the_left_side.to_s
267
+ when /^RAM:/
268
+ # ================================================================== #
269
+ # Append 'MB RAM' in orange colour next, with some padding.
270
+ # This is just a small visual "enhancement" that I quite like.
271
+ # ================================================================== #
272
+ the_right_side = the_right_side.dup if the_right_side.frozen?
273
+ # the_right_side = (the_right_side.to_f / 1028.0).round(0).to_s # If we want GB.
274
+ the_right_side << orange(' MB RAM')
275
+ end
276
+ display_left_side_then_the_right_side(the_left_side, the_right_side)
277
+ }
278
+ end
279
+
280
+ # ========================================================================== #
281
+ # === return_operating_system_bit_type
282
+ #
283
+ # We could also use "lscpu" and check for the substring 'CPU op-mode'.
284
+ # ========================================================================== #
285
+ def return_operating_system_bit_type
286
+ return ::EnvironmentInformation.operating_system_bit_type_information
287
+ end; alias bit_type? return_operating_system_bit_type # === bit_type?
288
+
289
+ # ========================================================================== #
290
+ # === add (add tag)
291
+ #
292
+ # This method can be used to add individual entries to the main Hash
293
+ # called @internal_hash[:the_primary_hash].
294
+ #
295
+ # The format for add() works on both Symbols as well as Arrays as
296
+ # input. This will be shown on the left side, and denotes the name of
297
+ # the program or component that we wish to query, such as "php" or
298
+ # "ruby" and so forth.
299
+ #
300
+ # Some Symbols will be used as a "pointer" towards an Array of
301
+ # registered programs.
302
+ #
303
+ # Note that (1) will be converted into a Symbol if it is a String.
304
+ #
305
+ # If the second entry (2) is nil, then the version will be inferred
306
+ # at "runtime" within the method display(). Otherwise display()
307
+ # will simply use the passed version (which should be a String in
308
+ # that case, then).
309
+ #
310
+ # Before we can add an entry to the main dataset, we have to check
311
+ # whether it is a registered entry altogether. If it is not
312
+ # registered, the user has to be notified about this fact.
313
+ # This notification will ONLY happen if the associated version is nil;
314
+ # if a specific version is supplied then this method will assume
315
+ # that the program should be displayed anyway.
316
+ #
317
+ # An Array can also be supplied to this method, if necessary.
318
+ #
319
+ # On 11.04.2024 the behaviour of this method changed. It will now always
320
+ # register the correct version in the primary hash.
321
+ # ========================================================================== #
322
+ def add(
323
+ i = nil,
324
+ primary_hash = primary_hash?
325
+ )
326
+ if i
327
+ case i
328
+ # ====================================================================== #
329
+ # === :everything
330
+ #
331
+ # This entry point will add every available component.
332
+ # ====================================================================== #
333
+ when :everything
334
+ add(return_all_available_components)
335
+ # ====================================================================== #
336
+ # === :pkgconfig_entries
337
+ # ====================================================================== #
338
+ when :pkgconfig_entries
339
+ add(::EnvironmentInformation.return_pkgconfig_based_programs)
340
+ # ====================================================================== #
341
+ # === :all_xorg_components
342
+ # ====================================================================== #
343
+ when :all_xorg_components
344
+ add(return_all_xorg_components)
345
+ # ====================================================================== #
346
+ # === envi --science
347
+ # ====================================================================== #
348
+ when :science_cluster
349
+ add(science_cluster?)
350
+ # ====================================================================== #
351
+ # === envi --lfs_core_programs
352
+ # ====================================================================== #
353
+ when :lfs,
354
+ :lfs_core_programs
355
+ add(::EnvironmentInformation.lfs_core_programs?)
356
+ # ====================================================================== #
357
+ # === :linux_kernel
358
+ # ====================================================================== #
359
+ when :linux_kernel
360
+ add(:linux)
361
+ else
362
+ result = nil
363
+ # ====================================================================== #
364
+ # === Handle Arrays as input first
365
+ # ====================================================================== #
366
+ if i.is_a? Array
367
+ i.flatten.compact.each {|this_component|
368
+ add(this_component, primary_hash)
369
+ }
370
+ # ====================================================================== #
371
+ # === Handle Strings containing ',' next
372
+ # ====================================================================== #
373
+ elsif i.is_a?(String) and i.include?(',')
374
+ # ==================================================================== #
375
+ # Strings containing ',' will be split accordingly.
376
+ # ==================================================================== #
377
+ entry = i.split(',')
378
+ add(entry)
379
+ else
380
+ # ==================================================================== #
381
+ # === Handle Strings containing '-' next
382
+ # ==================================================================== #
383
+ if i.is_a?(String) and i.include?('-')
384
+ i = i.dup if i.frozen?
385
+ i.delete!('-')
386
+ end
387
+ i = i.to_sym unless i.is_a?(Symbol) # i will always be a Symbol past this point.
388
+ unless primary_hash.has_key?(i)
389
+ case i
390
+ # ================================================================== #
391
+ # === :rubygems_installation_directory
392
+ # ================================================================== #
393
+ when :rubygems_installation_directory,
394
+ /^rubygems( |_)?installation( |_)?directory\??$/i
395
+ result = return_rubygems_installation_directory
396
+ # ================================================================== #
397
+ # === :operating_system_bit_type
398
+ # ================================================================== #
399
+ when :operating_system_bit_type,
400
+ /^operating(_|-| )?system(_|-| )?bit(_|-| )?type$/i
401
+ result = return_operating_system_bit_type
402
+ # ================================================================== #
403
+ # === :operating_system
404
+ # ================================================================== #
405
+ when :operating_system,
406
+ /^Operating(_|-| )?system$/i,
407
+ /^operating(_|-)?system(_|-)?in(_|-)?use$/i
408
+ result = return_operating_system
409
+ # ================================================================== #
410
+ # === :ram
411
+ # ================================================================== #
412
+ when :ram,
413
+ /^RAM$/i
414
+ result = ram?
415
+ # ================================================================== #
416
+ # === :cflags
417
+ # ================================================================== #
418
+ when :cflags,
419
+ /^cflags$/i,
420
+ /^cflags(_|-| )?in(_|-| )?use$/i
421
+ result = cflags_in_use?
422
+ # ================================================================== #
423
+ # === :cpuinfo
424
+ # ================================================================== #
425
+ when :cpuinfo,
426
+ /^cpuinfo$/i,
427
+ /^CPU(_|-| )?Model/
428
+ result = return_cpuinfo
429
+ # ================================================================== #
430
+ # === :screen_resolution
431
+ # ================================================================== #
432
+ when :screen_resolution,
433
+ /^screen( |_)?resolution$/i
434
+ result = screen_resolution?
435
+ else
436
+ i = ::EnvironmentInformation.return_alias_to(i)
437
+ cmd = QUERY_TO_USE_FOR_ALL_COMPONENTS[i.to_s]
438
+ case cmd.to_s # case tag
439
+ # ================================================================ #
440
+ # === special_entry_for_doubleconversion
441
+ # ================================================================ #
442
+ when /special_entry_for_doubleconversion/
443
+ result = ::EnvironmentInformation.return_version_of_doubleconversion
444
+ # ================================================================ #
445
+ # === custom_boost
446
+ # ================================================================ #
447
+ when 'custom_boost'
448
+ result = ::EnvironmentInformation.return_version_of_boost
449
+ # ================================================================ #
450
+ # === custom_mpc
451
+ # ================================================================ #
452
+ when 'custom_mpc'
453
+ result = ::EnvironmentInformation.return_version_of_mpc
454
+ # ================================================================ #
455
+ # === short_version
456
+ # ================================================================ #
457
+ when 'short_version'
458
+ result = silent_query("#{i} -v")
459
+ # ================================================================ #
460
+ # === custom_xvid
461
+ # ================================================================ #
462
+ when /custom_xvid/
463
+ result = return_xvid_version
464
+ # ================================================================ #
465
+ # === custom_busybox
466
+ # ================================================================ #
467
+ when 'custom_busybox'
468
+ result = ::EnvironmentInformation.return_version_of_busybox
469
+ # ================================================================ #
470
+ # === custom_xrandr
471
+ # ================================================================ #
472
+ when /custom_xrandr/
473
+ result = ::EnvironmentInformation.return_version_of_xrandr
474
+ # ================================================================ #
475
+ # === pkgconfig
476
+ # ================================================================ #
477
+ when /pkgconfig$/
478
+ # ============================================================== #
479
+ # In this case we do a default pkgconfig run, using the name
480
+ # of the entry at hand.
481
+ # ============================================================== #
482
+ intermediate_result = ::EnvironmentInformation.query_pkgconfig_version_for(i)
483
+ result = intermediate_result.strip
484
+ # ============================================================== #
485
+ # And we can "exit" here, aka call the next element.
486
+ # ============================================================== #
487
+ # ================================================================ #
488
+ # === version
489
+ #
490
+ # This is, for instance, "ruby --version".
491
+ # ================================================================ #
492
+ when /^version$/i
493
+ intermediate_result = silent_query("#{i} --version")
494
+ result = sanitize_this_version_string(intermediate_result)
495
+ else
496
+ result = sanitize_this_version_string(silent_query(cmd))
497
+ end
498
+ # ================================================================ #
499
+ # Do some post-processing next:
500
+ # ================================================================ #
501
+ if result.include?("\n")
502
+ splitted = result.split("\n")
503
+ if splitted.first == "\n"
504
+ result = splitted[1 .. -1].join("\n")
505
+ end
506
+ end
507
+ if result.include? 'no version information available (required by '
508
+ # ============================================================== #
509
+ # In this case we have some external problem which will be
510
+ # ignored by environment_information.
511
+ # ============================================================== #
512
+ splitted = result.split("\n")
513
+ splitted.reject! {|entry| entry.include? 'no version information available (required by ' }
514
+ result = splitted.join("\n")
515
+ end
516
+ result = ::EnvironmentInformation.sanitize_this_program_version(result)
517
+ if result.include? 'ruby '
518
+ new_match = result.scan(/ruby (\d{1,2}\.\d{1,2}\.\d{1,2})/).flatten.first
519
+ result = new_match if new_match
520
+ end
521
+ if result.include? 'RELION version: '
522
+ result = result.split(/RELION version: /).flatten.last
523
+ end
524
+ if result.include? 'Make'
525
+ result.sub!(/Make/,'')
526
+ end
527
+ if result.include? "#{entry}-" # The entry includes itself and a '-'.
528
+ result.sub!(/#{entry.to_s}-/,'')
529
+ elsif result.include? entry.to_s # The entry includes itself.
530
+ result.sub!(/#{entry.to_s}/,'')
531
+ end
532
+ if result.count("\n") > 0
533
+ result = result.split("\n").first
534
+ end
535
+ if result.include? ', version' # This is specifically for Bash.'
536
+ # GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
537
+ new_value = result.scan(
538
+ /, version (\d{1,2}\.\d{1,2}\.\d{1,2})/ # See: https://rubular.com/r/t3Ma5fpSPyGjqR
539
+ ).flatten.first
540
+ result = new_value if new_value
541
+ end
542
+ if result.include?('(') and result.include?(')')
543
+ result = result.split(')').last
544
+ end
545
+ if result.include?('(') # Such as for 'XTerm(390'
546
+ result = result.split('(').last
547
+ end
548
+ if result.include? 'paper '
549
+ result.sub!(/paper /,'')
550
+ end
551
+ if result.include? 'version '
552
+ result.sub!(/version/,'')
553
+ end
554
+ if result.include? ' - ' # For lighttpd.
555
+ result = result.split(/ - /).first
556
+ end
557
+ if result.include? '--'
558
+ result.delete!('-')
559
+ end
560
+ if result.include? '/' # e. g. "nginx/1.24.0"
561
+ result = result.split('/').last
562
+ end
563
+ result[0,1] = '' if result.start_with?('/')
564
+ result.rstrip!
565
+ result = check_for_nil_values(result, i)
566
+ end
567
+ if result
568
+ # if result.include?(' ')
569
+ # result = result.split(' ').last
570
+ # end
571
+ i = i.to_sym
572
+ # ============================================================== #
573
+ # Always register it directly here:
574
+ # ============================================================== #
575
+ @internal_hash[:the_primary_hash][i] = result
576
+ if display_the_results_at_once?
577
+ display_this_component(i)
578
+ end
579
+ end
580
+ end
581
+ end
582
+ end
583
+ end
584
+ end; alias show_these_entries add # === show_these_entries
585
+ alias set_additional add # === set_additional
586
+ alias update_version_for add # === update_version_for
587
+ alias append add # === append
588
+ alias append_this_to_main_string add # === append_this_to_main_string
589
+
590
+ # ========================================================================== #
591
+ # === check_this_hash_for_unavailable_programs
592
+ # ========================================================================== #
593
+ def check_this_hash_for_unavailable_programs(
594
+ hash
595
+ )
596
+ # ======================================================================== #
597
+ # Register that this program is not available.
598
+ # ======================================================================== #
599
+ register_unavailable_program(
600
+ hash.select {|key, value|
601
+ value.include?(NOT_FOUND)
602
+ }.keys
603
+ )
604
+ end
605
+
606
+ # ========================================================================== #
607
+ # === remove_these_components
608
+ #
609
+ # This method can be used to remove registered components again.
610
+ # ========================================================================== #
611
+ def remove_these_components(
612
+ i
613
+ )
614
+ # ======================================================================== #
615
+ # === Handle Strings containing ',' first
616
+ # ======================================================================== #
617
+ if i.is_a?(String) and i.include?(',')
618
+ splitted = i.split(',')
619
+ remove_these_components(splitted)
620
+ # ======================================================================== #
621
+ # === Handle Arrays next
622
+ # ======================================================================== #
623
+ elsif i.is_a? Array
624
+ i.flatten.each {|entry|
625
+ remove_these_components(entry)
626
+ }
627
+ else
628
+ i = i.to_sym
629
+ primary_hash = primary_hash?
630
+ if primary_hash.has_key? i
631
+ primary_hash.delete(i)
632
+ end
633
+ end
634
+ end
635
+
636
+ # ========================================================================== #
637
+ # === right_side
638
+ # ========================================================================== #
639
+ def right_side(i)
640
+ if use_colours?
641
+ return send(::EnvironmentInformation.colour_for_the_right_side, i)
642
+ else
643
+ return i
644
+ end
645
+ end; alias colourize_this_in_the_right_side_colour right_side # === colourize_this_in_the_right_side_colour
646
+
647
+ # ========================================================================== #
648
+ # === clear_hash_and_missing_components
649
+ # ========================================================================== #
650
+ def clear_hash_and_missing_components
651
+ clear_toplevel_hash
652
+ clear_missing_components
653
+ end
654
+
655
+ # ========================================================================== #
656
+ # === show_the_registered_components
657
+ # ========================================================================== #
658
+ def show_the_registered_components(
659
+ i = tracked_programs?
660
+ )
661
+ e
662
+ e "#{rev}The following components are currently tracked:"
663
+ e
664
+ use_one_line_to_show_the_result = use_one_line_to_show_the_result?
665
+ i.each_with_index {|this_program, index| index += 1
666
+ if use_one_line_to_show_the_result
667
+ padded_index = index.to_s+') '
668
+ else
669
+ padded_index = ' '+(index.to_s+') ').rjust(5)
670
+ end
671
+ colourized_and_padded_index = seagreen(padded_index)
672
+ e colourized_and_padded_index+
673
+ steelblue(this_program)
674
+ }
675
+ e
676
+ end
677
+
678
+ # ========================================================================== #
679
+ # === consider_storing_which_programs_are_not_up_to_date
680
+ # ========================================================================== #
681
+ def consider_storing_which_programs_are_not_up_to_date(
682
+ temp_dir = temp_dir?,
683
+ array_programs_that_are_not_up_to_date = array_these_programs_not_up_to_date?
684
+ )
685
+ if shall_we_really_store_which_programs_are_not_up_to_date? # This also checks for a roebe-system.
686
+ into = FILE_THESE_PROGRAMS_CAN_BE_UPGRADED
687
+ what = YAML.dump(array_programs_that_are_not_up_to_date)
688
+ if File.directory?(temp_dir)
689
+ into = "#{temp_dir}#{File.basename(into)}"
690
+ else
691
+ into = "#{temp_dir}#{File.basename(into)}"
692
+ end
693
+ opne "#{rev}We will also store which programs are not up to date."
694
+ opne "These will be stored into the file "\
695
+ "at `#{sfile(into)}#{rev}`."
696
+ ::EnvironmentInformation.write_what_into(what, into)
697
+ end
698
+ end
699
+
700
+ # ========================================================================== #
701
+ # === do_not_run_already
702
+ # ========================================================================== #
703
+ def do_not_run_already
704
+ @internal_hash[:run_already] = false
705
+ end; alias do_not_run do_not_run_already # === do_not_run
706
+
707
+ # ========================================================================== #
708
+ # === run_already?
709
+ # ========================================================================== #
710
+ def run_already?
711
+ @internal_hash[:run_already]
712
+ end
713
+
714
+ # ========================================================================== #
715
+ # === set_array_work_on_these_components
716
+ # ========================================================================== #
717
+ def set_array_work_on_these_components(
718
+ i
719
+ )
720
+ hash = primary_hash?
721
+ i = [i].flatten
722
+ i.each {|this_entry|
723
+ hash[this_entry.to_sym] = nil
724
+ }
725
+ end; alias set_main_array set_array_work_on_these_components # === set_main_array
726
+ alias set_display_these_components set_array_work_on_these_components # === set_display_these_components
727
+ alias set_use_this_as_main_input set_array_work_on_these_components # === set_use_this_as_main_input
728
+ alias set_report_these_programs set_array_work_on_these_components # === set_report_these_programs
729
+ alias show_only_the_components_from_this_dataset set_array_work_on_these_components # === show_only_the_components_from_this_dataset
730
+
731
+ # ========================================================================== #
732
+ # === do_sort_alphabetically (sort tag)
733
+ #
734
+ # Some entries are Symbols, which is why we have to call .to_s in the
735
+ # method here.
736
+ # ========================================================================== #
737
+ def do_sort_alphabetically(
738
+ i = work_on_which_components?
739
+ )
740
+ _ = i.sort_by {|name, version| name.to_s }
741
+ set_main_array(_)
742
+ end
743
+
744
+ # ========================================================================== #
745
+ # === query_this_version
746
+ # ========================================================================== #
747
+ def query_this_version(
748
+ i,
749
+ query_hash = return_hash_query_to_use_for_all_components
750
+ )
751
+ use_this_query = query_hash[i]
752
+ # ======================================================================== #
753
+ # Next, feed it to the main query-code:
754
+ # ======================================================================== #
755
+ result = silent_query(use_this_query)
756
+ if result
757
+ result.strip
758
+ else
759
+ nil
760
+ end
761
+ end
762
+
763
+ # ========================================================================== #
764
+ # === main_hash?
765
+ # ========================================================================== #
766
+ def main_hash?
767
+ ::EnvironmentInformation.hash?
768
+ end
769
+
770
+ # ========================================================================== #
771
+ # === generate_a_html_file?
772
+ # ========================================================================== #
773
+ def generate_a_html_file?
774
+ @internal_hash[:generate_a_html_file]
775
+ end
776
+
777
+ # ========================================================================== #
778
+ # === do_generate_a_html_file (html tag)
779
+ #
780
+ # The action-method that will generate the html file. This depends
781
+ # on the gem html_tags, with module HtmlTags though.
782
+ #
783
+ # To invoke this method, do:
784
+ #
785
+ # envi --generate-html-file
786
+ #
787
+ # ========================================================================== #
788
+ def do_generate_a_html_file(
789
+ styling_instructions = :none
790
+ )
791
+ # ======================================================================== #
792
+ # === Ensure that the html_tags project is available
793
+ # ======================================================================== #
794
+ unless Object.const_defined? :HtmlTags
795
+ begin
796
+ require 'html_tags'
797
+ rescue LoadError
798
+ e 'html_tags is not available. Considering installing it via:'
799
+ e
800
+ e ' gem install html_tags'
801
+ e
802
+ end
803
+ end
804
+ # ======================================================================== #
805
+ # === Define where to store the .html file in question
806
+ # ======================================================================== #
807
+ this_html_file = "#{temp_directory?}environment_information.html"
808
+ # ======================================================================== #
809
+ # Obtain the main dataset next.
810
+ # ======================================================================== #
811
+ what = dataset_as_string
812
+ case styling_instructions
813
+ # ======================================================================== #
814
+ # === :bold
815
+ # ======================================================================== #
816
+ when :bold
817
+ what = HtmlTags.b(what)
818
+ end
819
+ what = HtmlTags.html(
820
+ HtmlTags.title('Information about the local environment')+
821
+ HtmlTags.body(
822
+ HtmlTags.h1(
823
+ 'Your environment',
824
+ css_style: 'margin-top: 0.5em; margin-bottom: 0.5em; '\
825
+ 'padding: 2px;'
826
+ )+
827
+ HtmlTags.pre(
828
+ what,
829
+ css_style: 'font-weight: bold; font-size: 2em; '\
830
+ 'padding-left: 1.0em; margin-top:2px;'
831
+ )
832
+ )
833
+ )
834
+ ::EnvironmentInformation.write_what_into(what, this_html_file)
835
+ # ======================================================================== #
836
+ # Notify the user what has been done.
837
+ # ======================================================================== #
838
+ if File.exist? this_html_file
839
+ opne "#{rev}Generated a HTML file at"
840
+ opne "`#{sfile(this_html_file)}#{rev}`."
841
+ end
842
+ end
843
+
844
+ # ========================================================================== #
845
+ # === do_really_create_a_html_file
846
+ # ========================================================================== #
847
+ def do_really_create_a_html_file
848
+ @internal_hash[:generate_a_html_file] = true
849
+ end
850
+
851
+ # ========================================================================== #
852
+ # === store_this_hash_into_a_local_file
853
+ # ========================================================================== #
854
+ def store_this_hash_into_a_local_file(
855
+ hash = the_primary_hash?,
856
+ this_file = ::EnvironmentInformation.return_path_to_all_programs_file
857
+ )
858
+ unless hash.empty?
859
+ e
860
+ e "#{rev}Storing these results into the local file at"
861
+ e "`#{sfile(this_file)}#{rev}`."
862
+ e
863
+ ::EnvironmentInformation.store_this_hash_into_a_local_file(hash, this_file)
864
+ end
865
+ end; alias consider_storing_the_components_that_were_displayed store_this_hash_into_a_local_file # === consider_storing_the_components_that_were_displayed
866
+ alias consider_storing_which_components_were_displayed store_this_hash_into_a_local_file # === consider_storing_which_components_were_displayed
867
+
868
+ # ========================================================================== #
869
+ # === clear_the_main_dataset
870
+ # ========================================================================== #
871
+ def clear_the_main_dataset
872
+ clear_the_old_dataset
873
+ do_not_display_the_ruby_components
874
+ end; alias clear_main_dataset clear_the_main_dataset # === clear_main_dataset
875
+ alias empty_main_dataset clear_the_main_dataset # === empty_main_dataset
876
+ alias empty_main_array clear_the_main_dataset # === empty_main_array
877
+
878
+ # ========================================================================== #
879
+ # === do_show_only_the_operating_system
880
+ #
881
+ # To invoke this method, try:
882
+ #
883
+ # envi --os?
884
+ #
885
+ # ========================================================================== #
886
+ def do_show_only_the_operating_system
887
+ clear_old_dataset
888
+ add(:operating_system)
889
+ end
890
+
891
+ # ========================================================================== #
892
+ # === open_this_file_in_editor
893
+ # ========================================================================== #
894
+ def open_this_file_in_editor
895
+ _ = "geany #{THIS_FILE}"
896
+ e _; system _; exit
897
+ end
898
+
899
+ # ========================================================================== #
900
+ # === cflags_in_use?
901
+ # ========================================================================== #
902
+ def cflags_in_use?
903
+ ::EnvironmentInformation.cflags?
904
+ end; alias cflags? cflags_in_use? # === cflags?
905
+
906
+ # ========================================================================== #
907
+ # === is_a_registered_component?
908
+ # ========================================================================== #
909
+ def is_a_registered_component?(i)
910
+ ::EnvironmentInformation.is_this_component_included?(i)
911
+ end; alias is_an_allowed_entry? is_a_registered_component? # === is_an_allowed_entry?
912
+
913
+ # ========================================================================== #
914
+ # === return_version_of_awk?
915
+ # ========================================================================== #
916
+ def return_version_of_awk?
917
+ ::EnvironmentInformation.send(__method__)
918
+ end; alias return_version_of_awk return_version_of_awk? # === return_version_of_awk
919
+
920
+ # ========================================================================== #
921
+ # === return_version_of_binutils?
922
+ # ========================================================================== #
923
+ def return_version_of_binutils?
924
+ ::EnvironmentInformation.send(__method__)
925
+ end; alias return_version_of_binutils return_version_of_binutils? # === return_version_of_binutils
926
+
927
+ # ========================================================================== #
928
+ # === return_version_of_coreutils?
929
+ # ========================================================================== #
930
+ def return_version_of_coreutils?
931
+ ::EnvironmentInformation.send(__method__)
932
+ end; alias return_version_of_coreutils return_version_of_coreutils? # === return_version_of_coreutils
933
+
934
+ # ========================================================================== #
935
+ # === return_version_of_diffutils?
936
+ # ========================================================================== #
937
+ def return_version_of_diffutils?
938
+ ::EnvironmentInformation.send(__method__)
939
+ end; alias return_version_of_diffutils return_version_of_diffutils? # === return_version_of_diffutils
940
+
941
+ # ========================================================================== #
942
+ # === return_version_of_gcc?
943
+ # ========================================================================== #
944
+ def return_version_of_gcc?
945
+ ::EnvironmentInformation.send(__method__)
946
+ end; alias return_version_of_gcc return_version_of_gcc? # === return_version_of_gcc
947
+
948
+ # ========================================================================== #
949
+ # === return_version_of_linux_kernel?
950
+ # ========================================================================== #
951
+ def return_version_of_linux_kernel?
952
+ ::EnvironmentInformation.send(__method__)
953
+ end; alias return_version_of_linux_kernel return_version_of_linux_kernel? # === return_version_of_linux_kernel
954
+
955
+ # ========================================================================== #
956
+ # === is_this_program_included?
957
+ # ========================================================================== #
958
+ def is_this_program_included?(i)
959
+ ::EnvironmentInformation.is_this_program_included?(i)
960
+ end
961
+
962
+ # ========================================================================== #
963
+ # === return_version_of_glibc?
964
+ # ========================================================================== #
965
+ def return_version_of_glibc?
966
+ ::EnvironmentInformation.send(__method__)
967
+ end; alias return_version_of_glibc return_version_of_glibc? # == return_version_of_glibc
968
+
969
+ # ========================================================================== #
970
+ # === screen_resolution?
971
+ # ========================================================================== #
972
+ def screen_resolution?
973
+ ::EnvironmentInformation.screen_resolution?
974
+ end
975
+
976
+ # ========================================================================== #
977
+ # === return_hash_query_to_use_for_all_components
978
+ # ========================================================================== #
979
+ def return_hash_query_to_use_for_all_components
980
+ _ = QUERY_TO_USE_FOR_ALL_COMPONENTS
981
+ _.transform_keys! {|entry| entry.to_sym }
982
+ return _
983
+ end
984
+
985
+ # ========================================================================== #
986
+ # === result_as_array
987
+ #
988
+ # The lines that we will have inside of this method, may look like this:
989
+ #
990
+ # " operating_system: GNU/Linux\n"
991
+ #
992
+ # ========================================================================== #
993
+ def result_as_array
994
+ _ = dataset_as_string
995
+ splitted = _.split("\n")
996
+ splitted.map! {|inner_line|
997
+ inner_line.split(': ').map {|entry| entry.strip }
998
+ }
999
+ return splitted
1000
+ end; alias result result_as_array # === result
1001
+
1002
+ # ========================================================================== #
1003
+ # === do_not_save_anything
1004
+ # ========================================================================== #
1005
+ def do_not_save_anything
1006
+ do_not_store_anything_into_a_local_file
1007
+ # ======================================================================== #
1008
+ # We will also avoid saving the results into a local yaml file.
1009
+ # ======================================================================== #
1010
+ do_not_store_anything_into_a_local_file
1011
+ end; alias do_not_store_anything do_not_save_anything # === do_not_store_anything
1012
+
1013
+ # ========================================================================== #
1014
+ # === disable_colours
1015
+ #
1016
+ # Call this method when you wish to disable the colours. Note that
1017
+ # this will disable colours on the toplevel.
1018
+ # ========================================================================== #
1019
+ def disable_colours
1020
+ super()
1021
+ ::EnvironmentInformation.use_colours = false
1022
+ end; alias no_colours disable_colours # === no_colours()
1023
+
1024
+ # ========================================================================== #
1025
+ # === enable_colours
1026
+ # ========================================================================== #
1027
+ def enable_colours
1028
+ super()
1029
+ ::EnvironmentInformation.use_colours = true
1030
+ end
1031
+
1032
+ # ========================================================================== #
1033
+ # === clear_the_main_hash
1034
+ # ========================================================================== #
1035
+ def clear_the_main_hash
1036
+ @internal_hash[:the_primary_hash].clear
1037
+ end
1038
+
1039
+ # ========================================================================== #
1040
+ # === add_this_to_the_toplevel_hash
1041
+ # ========================================================================== #
1042
+ def add_this_to_the_toplevel_hash(a, b)
1043
+ a = a.to_sym unless a.is_a? Symbol
1044
+ ::EnvironmentInformation.hash?[a] = b
1045
+ end; alias register_onto_the_main_hash add_this_to_the_toplevel_hash # === register_onto_the_main_hash
1046
+
1047
+ # ========================================================================== #
1048
+ # === return_all_available_components
1049
+ # ========================================================================== #
1050
+ def return_all_available_components
1051
+ _ = dataset_containing_all_tracked_programs?
1052
+ # ======================================================================== #
1053
+ # === The mate-desktop
1054
+ #
1055
+ # Since as of 31.03.2019 we will also try to show the mate-desktop
1056
+ # components if the RBT project is available/installed.
1057
+ # ======================================================================== #
1058
+ if can_we_query_the_mate_desktop?
1059
+ # ====================================================================== #
1060
+ # Keep in mind that this Array is nested, so the name is
1061
+ # included as well as the version.
1062
+ # ====================================================================== #
1063
+ array = RBT.return_mate_desktop_version_array
1064
+ array.each {|a,b|
1065
+ # array << [a, b]
1066
+ _ << a
1067
+ the_primary_hash?[a.to_sym] = b
1068
+ }
1069
+ end
1070
+ result = _.flatten
1071
+ return result
1072
+ end; alias return_every_registered_component return_all_available_components # === return_every_registered_component
1073
+
1074
+ # ========================================================================== #
1075
+ # === clear_missing_components
1076
+ # ========================================================================== #
1077
+ def clear_missing_components
1078
+ ::EnvironmentInformation.clear_missing_components
1079
+ end
1080
+
1081
+ # ========================================================================== #
1082
+ # === shall_we_really_store_which_programs_are_not_up_to_date?
1083
+ #
1084
+ # This method will also honour whether the user is on a roebe-like
1085
+ # system or whether the user is not.
1086
+ # ========================================================================== #
1087
+ def shall_we_really_store_which_programs_are_not_up_to_date?
1088
+ is_on_roebe? and !array_these_programs_not_up_to_date?.empty?
1089
+ end
1090
+
1091
+ # ========================================================================== #
1092
+ # === array_these_programs_not_up_to_date?
1093
+ # ========================================================================== #
1094
+ def array_these_programs_not_up_to_date?
1095
+ @internal_hash[:array_these_programs_not_up_to_date]
1096
+ end
1097
+
1098
+ # ========================================================================== #
1099
+ # === store_the_results_into_local_files?
1100
+ # ========================================================================== #
1101
+ def store_the_results_into_local_files?
1102
+ @internal_hash[:store_the_results_into_local_files]
1103
+ end; alias shall_we_store_the_main_hash_into_a_local_file? store_the_results_into_local_files? # === alias shall_we_store_the_main_hash_into_a_local_file?
1104
+ alias store_the_results_into_local_files? store_the_results_into_local_files? # === store_the_results_into_local_files?
1105
+
1106
+ # ========================================================================== #
1107
+ # === dataset_as_string
1108
+ #
1109
+ # This method must return the dataset in String format. That String
1110
+ # must already be properly "formatted".
1111
+ # ========================================================================== #
1112
+ def dataset_as_string(
1113
+ main_hash = the_primary_hash?
1114
+ )
1115
+ _ = ''.dup # Put the information onto that String here.
1116
+ main_dataset?.each {|entry|
1117
+ if entry.is_a? Array
1118
+ entry = entry.first # The second entry is ignored in that event.
1119
+ end
1120
+ # ====================================================================== #
1121
+ # Before we can use .send() we have to check whether EnvironmentInformation
1122
+ # actually responds to that method. If not then we will simply skip
1123
+ # this snippet for now; but this may have to be changed at some
1124
+ # point in the future, to more elegantly handle failure. (Sep 2019).
1125
+ # ====================================================================== #
1126
+ use_this_method = "return_version_of_#{entry}".to_sym
1127
+ if main_hash.has_key?(entry.to_sym)
1128
+ _ << " #{entry}: #{main_hash[entry.to_sym]}#{N}"
1129
+ elsif ::EnvironmentInformation.respond_to? use_this_method
1130
+ program_version = ::EnvironmentInformation.send(
1131
+ use_this_method
1132
+ )
1133
+ entry = " #{entry}:"
1134
+ _ << "#{entry} #{program_version}#{N}"
1135
+ else # Try a self-query here
1136
+ case entry.to_sym
1137
+ when 'pkgconfig'
1138
+ entry = ::EnvironmentInformation.query_pkgconfig_version_for(entry)
1139
+ end
1140
+ result = query_this_version(entry.to_sym)
1141
+ if result and !result.empty?
1142
+ entry = " #{entry}:"
1143
+ _ << "#{entry} #{result}#{N}"
1144
+ end
1145
+ end
1146
+ }
1147
+ return _ # And return the generated String.
1148
+ end; alias string? dataset_as_string # === string?
1149
+ alias string dataset_as_string # === string
1150
+ alias main_string? dataset_as_string # === main_string?
1151
+ alias stringified dataset_as_string # === stringified
1152
+
1153
+ # ========================================================================== #
1154
+ # === compare_via_gem_version
1155
+ # ========================================================================== #
1156
+ def compare_via_gem_version(i)
1157
+ begin
1158
+ Gem::Version.new(i)
1159
+ rescue ArgumentError => error
1160
+ e Colours.tomato(error)
1161
+ e "#{rev}We will continue nonetheless (#{i})"
1162
+ return nil
1163
+ end
1164
+ end
1165
+
1166
+ # ========================================================================== #
1167
+ # === return_version_of_busyboxy?
1168
+ # ========================================================================== #
1169
+ def return_version_of_busyboxy?
1170
+ ::EnvironmentInformation.send(__method__)
1171
+ end; alias return_version_of_busyboxy return_version_of_busyboxy? # == return_version_of_busyboxy
1172
+
1173
+ # ========================================================================== #
1174
+ # === return_version_of_boost?
1175
+ # ========================================================================== #
1176
+ def return_version_of_boost?
1177
+ ::EnvironmentInformation.send(__method__)
1178
+ end; alias return_version_of_boost return_version_of_boost? # == return_version_of_boost
1179
+
1180
+ # ========================================================================== #
1181
+ # === return_version_of_xvid?
1182
+ # ========================================================================== #
1183
+ def return_version_of_xvid?
1184
+ ::EnvironmentInformation.send(__method__)
1185
+ end; alias return_version_of_xvid return_version_of_xvid? # == return_version_of_xvid
1186
+
1187
+ # ========================================================================== #
1188
+ # === start_gtk_component
1189
+ #
1190
+ # To invoke this method from the commandline, do:
1191
+ #
1192
+ # envi --start-gtk
1193
+ #
1194
+ # ========================================================================== #
1195
+ def start_gtk_component
1196
+ require 'environment_information/gui/gtk3/environment_information.rb'
1197
+ ::EnvironmentInformation.run_gtk
1198
+ @internal_hash[:do_exit_the_program] = true
1199
+ end
1200
+
1201
+ # ========================================================================== #
1202
+ # === do_show_almost_everything_excluding_the_default_linux_programs
1203
+ #
1204
+ # This is similar to do_show_everything() but it will not show
1205
+ # the default linux programs.
1206
+ # ========================================================================== #
1207
+ def do_show_almost_everything_excluding_the_default_linux_programs
1208
+ these_programs = return_every_registered_component
1209
+ default_programs = return_default_programs
1210
+ # ======================================================================== #
1211
+ # Next subtract those that are part in the default_programs.
1212
+ # ======================================================================== #
1213
+ these_programs.reject! {|entry|
1214
+ default_programs.include? entry
1215
+ }
1216
+ add(these_programs)
1217
+ end
1218
+
1219
+ # ========================================================================== #
1220
+ # === display_the_results_at_once?
1221
+ # ========================================================================== #
1222
+ def display_the_results_at_once?
1223
+ @internal_hash[:display_the_results_at_once]
1224
+ end; alias insta_show? display_the_results_at_once? # === insta_show?
1225
+
1226
+ # ========================================================================== #
1227
+ # === can_we_query_the_mate_desktop?
1228
+ # ========================================================================== #
1229
+ def can_we_query_the_mate_desktop?
1230
+ is_rbt_available? and
1231
+ RBT.const_defined?(:Action) and
1232
+ RBT::Action.const_defined?(:ReportMateDesktopVersion)
1233
+ end
1234
+
1235
+ # ========================================================================== #
1236
+ # === report_the_installed_KDE_software_suite (KDE tag)
1237
+ # ========================================================================== #
1238
+ def report_the_installed_KDE_software_suite
1239
+ begin
1240
+ require 'rbt/toplevel_methods/toplevel_methods.rb'
1241
+ require 'rbt/toplevel_methods/try_to_return_a_special_compile_component.rb'
1242
+ require 'rbt/toplevel_methods/swift_return_version_of_this_program.rb'
1243
+ array = RBT.return_kde_apps
1244
+ append_this = ''.dup
1245
+ if array and !array.empty?
1246
+ e "#{rev}Now working through all registered KDE applications, "\
1247
+ "trying to"
1248
+ e 'show their version on the commandline:'
1249
+ e
1250
+ array.each {|this_program|
1251
+ append_this.clear
1252
+ # ================================================================= #
1253
+ # The next line of code was added in August 2022 because ksmoothdock
1254
+ # is misbehaving. At a later time we may have to review this;
1255
+ # ideally we should not need any such ad-hoc exceptions ever.
1256
+ # ================================================================= #
1257
+ next if this_program == 'ksmoothdock'
1258
+ print gold(
1259
+ (' '+this_program+':').ljust(40)
1260
+ )
1261
+ cmd_to_use = "#{this_program} --version"
1262
+ version = swift_query(cmd_to_use)
1263
+ if version.include?(NOT_FOUND) or version.include?('not found')
1264
+ version = NOT_FOUND
1265
+ else
1266
+ if version
1267
+ # Remove the name of the program here e. g. "kcachegrind 21.12.1"
1268
+ version.sub!(/#{this_program}/,'')
1269
+ most_recent_version = ::RBT.swift_return_version_of_this_program(this_program.strip.downcase)
1270
+ if RBT.is_this_version_higher_than_that_version?(
1271
+ most_recent_version.to_s,
1272
+ version.to_s,
1273
+ :do_not_report_any_errors
1274
+ )
1275
+ append_this << orange(
1276
+ "\n ^^^ This program could "\
1277
+ "be updated to version "+
1278
+ most_recent_version.to_s
1279
+ )
1280
+ end
1281
+ end
1282
+ end
1283
+ version.strip! unless version.frozen?
1284
+ if version.include?('The program is not installed') or
1285
+ version.include?(NOT_FOUND)
1286
+ e lightblue(version)+append_this
1287
+ else
1288
+ e steelblue(version)+append_this
1289
+ end
1290
+ }
1291
+ e
1292
+ else
1293
+ e 'The array appears to be empty.'
1294
+ end
1295
+ exit
1296
+ rescue LoadError; end
1297
+ end
1298
+
1299
+ # ========================================================================== #
1300
+ # === sync_the_primary_hash_onto_the_toplevel_hash
1301
+ # ========================================================================== #
1302
+ def sync_the_primary_hash_onto_the_toplevel_hash(
1303
+ i = the_primary_hash?
1304
+ )
1305
+ ::EnvironmentInformation.clear_hash
1306
+ i.each_pair {|key, value|
1307
+ ::EnvironmentInformation.add_to_hash(key, value.to_s.strip)
1308
+ }
1309
+ end
1310
+
1311
+ # ========================================================================== #
1312
+ # === do_compare_the_program_version
1313
+ #
1314
+ # This method can be used if the user wishes to also compare the
1315
+ # program version of the installed programs. This functionality
1316
+ # depends on the rbt gem, and the RBT namespace.
1317
+ # ========================================================================== #
1318
+ def do_compare_the_program_version(
1319
+ be_verbose = false
1320
+ )
1321
+ if be_verbose
1322
+ e "#{rev}The program versions will also be compared."
1323
+ end
1324
+ @internal_hash[:compare_program_versions] = true
1325
+ end
1326
+
1327
+ # ========================================================================== #
1328
+ # === start_the_sinatra_interface
1329
+ # ========================================================================== #
1330
+ def start_the_sinatra_interface
1331
+ require 'environment_information/www/sinatra_interface.rb'
1332
+ ::EnvironmentInformation.start_sinatra_interface
1333
+ end
1334
+
1335
+ # ========================================================================== #
1336
+ # === clear_toplevel_hash
1337
+ # ========================================================================== #
1338
+ def clear_toplevel_hash
1339
+ ::EnvironmentInformation.clear_hash
1340
+ end
1341
+
1342
+ # ========================================================================== #
1343
+ # === the_primary_hash?
1344
+ # ========================================================================== #
1345
+ def the_primary_hash?
1346
+ @internal_hash[:the_primary_hash]
1347
+ end; alias primary_hash? the_primary_hash? # === primary_hash?
1348
+
1349
+ # ========================================================================== #
1350
+ # === work_on_these_components?
1351
+ # ========================================================================== #
1352
+ def work_on_these_components?
1353
+ primary_hash?.keys
1354
+ end; alias components? work_on_these_components? # === components?
1355
+ alias main_dataset? work_on_these_components? # === main_dataset?
1356
+ alias main_entry? work_on_these_components? # === main_entry?
1357
+ alias dataset? work_on_these_components? # === dataset?
1358
+ alias result work_on_these_components? # === result
1359
+ alias result? work_on_these_components? # === result?
1360
+ alias array_obtain_these_programs? work_on_these_components? # === array_obtain_these_programs?
1361
+ alias array_with_entries? work_on_these_components? # === array_with_entries?
1362
+ alias main_array? work_on_these_components? # === main_array?
1363
+ alias programs? work_on_these_components? # === programs?
1364
+ alias show_these_components? work_on_these_components? # === show_these_components?
1365
+ alias array_display_these_components work_on_these_components? # === array_display_these_components
1366
+ alias array_work_on_these_components? work_on_these_components? # === array_work_on_these_components?
1367
+ alias display_these_components? work_on_these_components? # === display_these_components?
1368
+ alias display_which_components? work_on_these_components? # === display_which_components?
1369
+ alias display work_on_these_components? # === display
1370
+ alias work_on_which_components? work_on_these_components? # === work_on_which_components?
1371
+
1372
+ # ========================================================================== #
1373
+ # === set_runmode_gui
1374
+ # ========================================================================== #
1375
+ def set_runmode_gui
1376
+ @internal_hash[:runmode] = :gui
1377
+ end
1378
+
1379
+ # ========================================================================== #
1380
+ # === set_runmode_html
1381
+ # ========================================================================== #
1382
+ def set_runmode_html
1383
+ @internal_hash[:runmode] = :html
1384
+ end
1385
+
1386
+ # ========================================================================== #
1387
+ # === gui?
1388
+ # ========================================================================== #
1389
+ def gui?
1390
+ runmode? == :gui
1391
+ end
1392
+
1393
+ # ========================================================================== #
1394
+ # === commandline?
1395
+ #
1396
+ # Whether we run in the "commandline mode" or whether we run in the
1397
+ # GUI or WWW/HTML mode.
1398
+ # ========================================================================== #
1399
+ def commandline?
1400
+ runmode? == :commandline
1401
+ end
1402
+
1403
+ # ========================================================================== #
1404
+ # === runmode?
1405
+ # ========================================================================== #
1406
+ def runmode?
1407
+ @internal_hash[:runmode]
1408
+ end
1409
+
1410
+ # ========================================================================== #
1411
+ # === work_on_the_programs_directory_only
1412
+ #
1413
+ # This works on the /home/Programs/ directory directly.
1414
+ #
1415
+ # Invocation example:
1416
+ #
1417
+ # envi --work-on-programs-directory-only
1418
+ #
1419
+ # ========================================================================== #
1420
+ def work_on_the_programs_directory_only(
1421
+ use_this_as_programs_directory = '/home/Programs/'
1422
+ )
1423
+ # ======================================================================== #
1424
+ # 1) First, we have to determine which programs are available.
1425
+ # ======================================================================== #
1426
+ e "#{rev}Determining which programs are available at the prefix "\
1427
+ "#{steelblue(use_this_as_programs_directory)}:"
1428
+ array_these_programs_are_available = []
1429
+ tracked_programs?.each {|entry|
1430
+ target = "#{use_this_as_programs_directory}#{entry.capitalize}"
1431
+ if File.directory?(target)
1432
+ # ======================================================================== #
1433
+ # In this case we know that this target exists.
1434
+ # ======================================================================== #
1435
+ array_these_programs_are_available << entry
1436
+ end
1437
+ }
1438
+ # ======================================================================== #
1439
+ # 2) Checking these programs next.
1440
+ # ======================================================================== #
1441
+ clear_main_dataset
1442
+ add(array_these_programs_are_available)
1443
+ ::EnvironmentInformation.set_prefix_to_use(use_this_as_programs_directory)
1444
+ end
1445
+
1446
+ # ========================================================================== #
1447
+ # === do_report_the_remote_urls
1448
+ #
1449
+ # This method will enable the reporting of the remote URLs, if
1450
+ # available.
1451
+ # ========================================================================== #
1452
+ def do_report_the_remote_urls
1453
+ @internal_hash[:report_the_remote_urls] = true
1454
+ end
1455
+
1456
+ # ========================================================================== #
1457
+ # === report_the_remote_urls?
1458
+ # ========================================================================== #
1459
+ def report_the_remote_urls?
1460
+ @internal_hash[:report_the_remote_urls]
1461
+ end
1462
+
1463
+ # ========================================================================== #
1464
+ # === dont_show_ruby_stuff
1465
+ #
1466
+ # Disable showing ruby + gem information.
1467
+ # ========================================================================== #
1468
+ def dont_show_ruby_stuff # Dont show ruby stuff.
1469
+ @internal_hash[:show_ruby_version_and_gem_version] = false
1470
+ end; alias show_no_ruby dont_show_ruby_stuff # === show_no_ruby
1471
+ alias do_not_show_the_ruby_components dont_show_ruby_stuff # === do_not_show_the_ruby_components
1472
+ alias do_not_display_the_ruby_components dont_show_ruby_stuff # === do_not_display_the_ruby_components
1473
+
1474
+ # ========================================================================== #
1475
+ # === return_rubygems_installation_directory
1476
+ # ========================================================================== #
1477
+ def return_rubygems_installation_directory
1478
+ return ::EnvironmentInformation.rubygems_installation_directory
1479
+ end; alias rubygems_installation_directory? return_rubygems_installation_directory # === rubygems_installation_directory?
1480
+
1481
+ # ========================================================================== #
1482
+ # === return_version_of_rubygems?
1483
+ #
1484
+ # This method will return the rubygems-version at hand.
1485
+ # ========================================================================== #
1486
+ def return_version_of_rubygems?
1487
+ ::EnvironmentInformation.send(__method__)
1488
+ end; alias return_version_of_rubygems return_version_of_rubygems? # == return_version_of_rubygems
1489
+
1490
+ # ========================================================================== #
1491
+ # === return_version_of_ruby?
1492
+ # ========================================================================== #
1493
+ def return_version_of_ruby?
1494
+ ::EnvironmentInformation.send(__method__)
1495
+ end; alias return_version_of_ruby return_version_of_ruby? # == return_version_of_ruby
1496
+
1497
+ # ========================================================================== #
1498
+ # === may_we_try_to_use_rbt?
1499
+ # ========================================================================== #
1500
+ def may_we_try_to_use_rbt?
1501
+ @internal_hash[:may_we_try_to_use_rbt]
1502
+ end
1503
+
1504
+ # ========================================================================== #
1505
+ # === show_n_registered_entries
1506
+ #
1507
+ # Invoke this via:
1508
+ #
1509
+ # envi --n_entries
1510
+ #
1511
+ # ========================================================================== #
1512
+ def show_n_registered_entries
1513
+ e "#{true_rev}The EnvironmentInformation project contains "\
1514
+ "#{sfancy(tracked_programs?.size)} "\
1515
+ "#{true_rev}registered entries."
1516
+ end
1517
+
1518
+ # ========================================================================== #
1519
+ # === program_not_found
1520
+ # ========================================================================== #
1521
+ def program_not_found(
1522
+ i,
1523
+ use_colours = use_colours?
1524
+ )
1525
+ if use_colours
1526
+ return send(::EnvironmentInformation.colour_for_program_not_found, i)
1527
+ else
1528
+ return i
1529
+ end
1530
+ end
1531
+
1532
+ # ========================================================================== #
1533
+ # === RAM?
1534
+ # ========================================================================== #
1535
+ def RAM?
1536
+ return ::EnvironmentInformation.ram?
1537
+ end; alias ram? RAM? # === ram?
1538
+
1539
+ # ========================================================================== #
1540
+ # === return_xvid_version
1541
+ # ========================================================================== #
1542
+ def return_xvid_version
1543
+ ::EnvironmentInformation.return_version_of_xvid
1544
+ end
1545
+
1546
+ # ========================================================================== #
1547
+ # === return_remote_gtk2_version
1548
+ #
1549
+ # Be wary when using this method, as it may slow down the whole
1550
+ # application, due to making remote web-based queries.
1551
+ # ========================================================================== #
1552
+ def return_remote_gtk2_version
1553
+ ::EnvironmentInformation.return_remote_gtk2_version
1554
+ end
1555
+
1556
+ # ========================================================================== #
1557
+ # === return_operating_system
1558
+ # ========================================================================== #
1559
+ def return_operating_system
1560
+ return ::EnvironmentInformation.operating_system
1561
+ end; alias operating_system? return_operating_system # === operating_system?
1562
+ alias return_version_of_operating_system return_operating_system # === return_version_of_operating_system
1563
+
1564
+ # ========================================================================== #
1565
+ # === return_cpuinfo
1566
+ #
1567
+ # This is also known as the "cpu model".
1568
+ # ========================================================================== #
1569
+ def return_cpuinfo
1570
+ return ::EnvironmentInformation.cpuinfo?
1571
+ end; alias cpu_model? return_cpuinfo # === cpu_model?
1572
+
1573
+ # ========================================================================== #
1574
+ # === left_side
1575
+ # ========================================================================== #
1576
+ def left_side(
1577
+ i,
1578
+ use_colours = use_colours?
1579
+ )
1580
+ if use_colours
1581
+ return send(::EnvironmentInformation.colour_for_the_left_side, i)
1582
+ else
1583
+ return i
1584
+ end
1585
+ end
1586
+
1587
+ # ========================================================================== #
1588
+ # === return_version_of_intltool?
1589
+ # ========================================================================== #
1590
+ def return_version_of_intltool?
1591
+ ::EnvironmentInformation.send(__method__)
1592
+ end; alias return_version_of_intltool return_version_of_intltool? # == return_version_of_intltool
1593
+
1594
+ # ========================================================================== #
1595
+ # === return_version_of_grep?
1596
+ # ========================================================================== #
1597
+ def return_version_of_grep?
1598
+ ::EnvironmentInformation.send(__method__)
1599
+ end; alias return_version_of_grep return_version_of_grep? # == return_version_of_grep
1600
+
1601
+ # ========================================================================== #
1602
+ # === return_version_of_gnupg?
1603
+ # ========================================================================== #
1604
+ def return_version_of_gnupg?
1605
+ ::EnvironmentInformation.send(__method__)
1606
+ end; alias return_version_of_gnupg return_version_of_gnupg? # == return_version_of_gnupg
1607
+
1608
+ # ========================================================================== #
1609
+ # === return_version_of_bison?
1610
+ # ========================================================================== #
1611
+ def return_version_of_bison?
1612
+ ::EnvironmentInformation.send(__method__)
1613
+ end; alias return_version_of_bison return_version_of_bison? # == return_version_of_bison
1614
+
1615
+ # ========================================================================== #
1616
+ # === return_version_of_flex?
1617
+ # ========================================================================== #
1618
+ def return_version_of_flex?
1619
+ ::EnvironmentInformation.send(__method__)
1620
+ end; alias return_version_of_flex return_version_of_flex? # == return_version_of_flex
1621
+
1622
+ # ========================================================================== #
1623
+ # === dataset_containing_all_tracked_programs?
1624
+ # ========================================================================== #
1625
+ def dataset_containing_all_tracked_programs?
1626
+ @internal_hash[:dataset_containing_all_tracked_programs]
1627
+ end
1628
+
1629
+ # ========================================================================== #
1630
+ # === do_exit_the_program?
1631
+ # ========================================================================== #
1632
+ def do_exit_the_program?
1633
+ @internal_hash[:do_exit_the_program]
1634
+ end
1635
+
1636
+ # ========================================================================== #
1637
+ # === register_unavailable_program
1638
+ #
1639
+ # Programs that were not be found can be registered through this method.
1640
+ # ========================================================================== #
1641
+ def register_unavailable_program(
1642
+ i,
1643
+ array = array_unavailable_programs?
1644
+ )
1645
+ if i.is_a? Array
1646
+ i.flatten.each {|entry|
1647
+ register_unavailable_program(entry, array)
1648
+ }
1649
+ else
1650
+ i = i.to_sym # Let's store only Symbols.
1651
+ array << i unless array.include?(i)
1652
+ end
1653
+ end; alias register_not_found register_unavailable_program # === register_not_found
1654
+
1655
+ # ========================================================================== #
1656
+ # === do_display_in_a_short_format
1657
+ #
1658
+ # The short-format means that we will use only a compact set of
1659
+ # programs to display. For example, "make" and "bash" will not be
1660
+ # displayed, neither "binutils" or "ruby".
1661
+ # ========================================================================== #
1662
+ def do_display_in_a_short_format
1663
+ @internal_hash[:display_everything_in_short_format] = true
1664
+ end
1665
+
1666
+ # ========================================================================== #
1667
+ # === consider_adding_the_ruby_components
1668
+ #
1669
+ # This method can be used to consider adding the ruby-components,
1670
+ # which means "ruby" itself, rubygems "gem", and the rubygems
1671
+ # installation directory.
1672
+ # ========================================================================== #
1673
+ def consider_adding_the_ruby_components
1674
+ if show_ruby_version_and_gem_version?
1675
+ add(
1676
+ return_all_ruby_components # Combine three calls into one here - all related to ruby.
1677
+ )
1678
+ end
1679
+ end
1680
+
1681
+ # ========================================================================== #
1682
+ # === show_ruby_version_and_gem_version?
1683
+ # ========================================================================== #
1684
+ def show_ruby_version_and_gem_version?
1685
+ @internal_hash[:show_ruby_version_and_gem_version]
1686
+ end
1687
+
1688
+ # ========================================================================== #
1689
+ # === return_all_ruby_components
1690
+ #
1691
+ # Combine three calls into one here - all related to ruby.
1692
+ # ========================================================================== #
1693
+ def return_all_ruby_components
1694
+ %i(
1695
+ ruby
1696
+ rubygems
1697
+ rubygems_installation_directory
1698
+ )
1699
+ end
1700
+
1701
+ # ========================================================================== #
1702
+ # === array_unavailable_programs?
1703
+ # ========================================================================== #
1704
+ def array_unavailable_programs?
1705
+ @internal_hash[:array_unavailable_programs]
1706
+ end
1707
+
1708
+ # ========================================================================== #
1709
+ # === enable_sort_alphabetically
1710
+ # ========================================================================== #
1711
+ def enable_sort_alphabetically
1712
+ @internal_hash[:sort_alphabetically] = true
1713
+ end
1714
+
1715
+ # ========================================================================== #
1716
+ # === opnn
1717
+ # ========================================================================== #
1718
+ def opnn
1719
+ if TRY_TO_MAKE_USE_OF_THE_OPN_GEM_IF_IT_IS_AVAILABLE and
1720
+ Object.const_defined?(:Opn)
1721
+ Opn.opn({
1722
+ namespace: NAMESPACE,
1723
+ use_colours: use_colours?
1724
+ })
1725
+ end
1726
+ end; alias opn opnn # === opn
1727
+
1728
+ # ========================================================================== #
1729
+ # === add_the_default_programs_on_a_linux_computer
1730
+ # ========================================================================== #
1731
+ def add_the_default_programs_on_a_linux_computer
1732
+ # ======================================================================== #
1733
+ # Add the default programs on a linux computer.
1734
+ # ======================================================================== #
1735
+ add(
1736
+ return_default_programs_on_a_linux_computer
1737
+ )
1738
+ end; alias add_default_linux_programs add_the_default_programs_on_a_linux_computer # === add_default_linux_programs
1739
+
1740
+ # ========================================================================== #
1741
+ # === add_the_commandline_arguments
1742
+ # ========================================================================== #
1743
+ def add_the_commandline_arguments(
1744
+ i = commandline_arguments?
1745
+ )
1746
+ i.compact.each {|entry|
1747
+ add(entry) unless entry.start_with?('--')
1748
+ }
1749
+ end
1750
+
1751
+ # ========================================================================== #
1752
+ # === notify_the_user_that_there_are_no_components_that_can_be_displayed
1753
+ # ========================================================================== #
1754
+ def notify_the_user_that_there_are_no_components_that_can_be_displayed
1755
+ opne 'There are no components that can be displayed.'
1756
+ end
1757
+
1758
+ # ========================================================================== #
1759
+ # === do_exit_the_program
1760
+ # ========================================================================== #
1761
+ def do_exit_the_program
1762
+ @internal_hash[:do_exit_the_program] = true
1763
+ end
1764
+
1765
+ # ========================================================================== #
1766
+ # === use_one_line_to_show_the_result?
1767
+ # ========================================================================== #
1768
+ def use_one_line_to_show_the_result?
1769
+ @internal_hash[:use_one_line_to_show_the_result]
1770
+ end
1771
+
1772
+ # ========================================================================== #
1773
+ # === report_version
1774
+ # ========================================================================== #
1775
+ def report_version
1776
+ ::EnvironmentInformation.report_version
1777
+ @internal_hash[:do_exit_the_program] = true
1778
+ end
1779
+
1780
+ # ========================================================================== #
1781
+ # === e (e tag)
1782
+ #
1783
+ # The e() method is the general output-method for this class.
1784
+ # ========================================================================== #
1785
+ def e(
1786
+ i = ''
1787
+ )
1788
+ if be_verbose?
1789
+ if use_one_line_to_show_the_result? # This will just use "print".
1790
+ ::EnvironmentInformation.ee(i)
1791
+ else
1792
+ ::EnvironmentInformation.e(
1793
+ i,
1794
+ display_everything_in_short_format: display_everything_in_short_format?
1795
+ )
1796
+ end
1797
+ end
1798
+ end
1799
+
1800
+ # ========================================================================== #
1801
+ # === add_ruby_and_rubygems
1802
+ # ========================================================================== #
1803
+ def add_ruby_and_rubygems
1804
+ add(:ruby)
1805
+ add(:rubygems)
1806
+ add(:rubygems_installation_directory)
1807
+ end
1808
+
1809
+ # ========================================================================== #
1810
+ # === show_everything?
1811
+ # ========================================================================== #
1812
+ def show_everything?
1813
+ @internal_hash[:show_everything]
1814
+ end
1815
+
1816
+ # ========================================================================== #
1817
+ # === try_to_rename_the_kde_konsole_tab?
1818
+ # ========================================================================== #
1819
+ def try_to_rename_the_kde_konsole_tab?
1820
+ @internal_hash[:try_to_rename_the_kde_konsole_tab]
1821
+ end
1822
+
1823
+ # ========================================================================== #
1824
+ # === is_rbt_available_and_may_we_try_to_use_rbt?
1825
+ # ========================================================================== #
1826
+ def is_rbt_available_and_may_we_try_to_use_rbt?
1827
+ is_rbt_available? and may_we_try_to_use_rbt?
1828
+ end
1829
+
1830
+ # ========================================================================== #
1831
+ # === compare_program_versions?
1832
+ # ========================================================================== #
1833
+ def compare_program_versions?
1834
+ @internal_hash[:compare_program_versions]
1835
+ end; alias compare_program_version? compare_program_versions? # === compare_program_version?
1836
+
1837
+ # ========================================================================== #
1838
+ # === do_store_the_results_into_local_files
1839
+ # ========================================================================== #
1840
+ def do_store_the_results_into_local_files
1841
+ @internal_hash[:store_the_results_into_local_files] = true
1842
+ end
1843
+
1844
+ # ========================================================================== #
1845
+ # === do_not_store_anything_into_a_local_file
1846
+ # ========================================================================== #
1847
+ def do_not_store_anything_into_a_local_file
1848
+ @internal_hash[:shall_we_store_the_main_hash_into_a_local_file] = false
1849
+ end
1850
+
1851
+ # ========================================================================== #
1852
+ # === set_use_colours
1853
+ # ========================================================================== #
1854
+ def set_use_colours(
1855
+ i = true
1856
+ )
1857
+ super()
1858
+ ::EnvironmentInformation.set_use_colours(i)
1859
+ end
1860
+
1861
+ # ========================================================================== #
1862
+ # === do_rename_kde_konsole
1863
+ #
1864
+ # This will attempt to rename the KDE Konsole tab, but only if we are
1865
+ # on roebe.
1866
+ # ========================================================================== #
1867
+ def do_rename_kde_konsole(
1868
+ use_this_title = 'Environment Information'
1869
+ )
1870
+ begin
1871
+ require 'roebe/requires/require_kde_konsole.rb'
1872
+ rescue LoadError; end
1873
+ if try_to_rename_the_kde_konsole_tab? and
1874
+ is_on_roebe? and
1875
+ Object.const_defined?(:Roebe) and
1876
+ Roebe.const_defined?(:KdeKonsole)
1877
+ Roebe.rename_konsole(use_this_title)
1878
+ end
1879
+ end
1880
+
1881
+ # ========================================================================== #
1882
+ # === return_default_programs_on_linux
1883
+ #
1884
+ # This method should return the "main" programs on a linux computer,
1885
+ # the most important entries.
1886
+ # ========================================================================== #
1887
+ def return_default_programs_on_linux
1888
+ ARRAY_DEFAULT_PROGRAMS_ON_LINUX
1889
+ end; alias return_default_programs_on_a_linux_computer return_default_programs_on_linux # === return_default_programs_on_a_linux_computer
1890
+ alias return_default_programs return_default_programs_on_linux # === return_default_programs
1891
+
1892
+ # ========================================================================== #
1893
+ # === do_not_display_the_result
1894
+ # ========================================================================== #
1895
+ def do_not_display_the_result
1896
+ @internal_hash[:display_result] = false
1897
+ end
1898
+
1899
+ # ========================================================================== #
1900
+ # === display_result?
1901
+ # ========================================================================== #
1902
+ def display_result?
1903
+ @internal_hash[:display_result]
1904
+ end
1905
+
1906
+ # ========================================================================== #
1907
+ # === xorg_components?
1908
+ # ========================================================================== #
1909
+ def xorg_components?
1910
+ ::EnvironmentInformation.xorg_components?
1911
+ end; alias return_all_xorg_components xorg_components? # === return_all_xorg_components
1912
+
1913
+ # ========================================================================== #
1914
+ # === clear_old_dataset
1915
+ # ========================================================================== #
1916
+ def clear_old_dataset
1917
+ work_on_these_components?.clear
1918
+ end; alias clear_the_old_dataset clear_old_dataset # === clear_the_old_dataset
1919
+
1920
+ # ========================================================================== #
1921
+ # === do_show_only_the_xorg_components
1922
+ #
1923
+ # This method will essentially clear the old dataset before adding
1924
+ # all xorg-components to the display-part of this class.
1925
+ #
1926
+ # The components that are appended here, are defined in the file
1927
+ # constants/array_tracked_components.rb - so if you wish to add
1928
+ # new xorg-related entries, you should modify the entries in that
1929
+ # .rb file.
1930
+ # ========================================================================== #
1931
+ def do_show_only_the_xorg_components
1932
+ clear_old_dataset
1933
+ do_not_show_the_ruby_components
1934
+ add(:all_xorg_components)
1935
+ end
1936
+
1937
+ # ========================================================================== #
1938
+ # === display_everything_in_short_format?
1939
+ # ========================================================================== #
1940
+ def display_everything_in_short_format?
1941
+ @internal_hash[:display_everything_in_short_format]
1942
+ end
1943
+
1944
+ # ========================================================================== #
1945
+ # === use_ascii_table
1946
+ #
1947
+ # We will display in ascii-table format here.
1948
+ # ========================================================================== #
1949
+ def use_ascii_table
1950
+ disable_colours # Can't use colours right now. Perhaps at a later time.
1951
+ extend Terminal::Table::TableHelper
1952
+ @internal_hash[:table] = table ['Name', 'Version']
1953
+ @internal_hash[:table].style = {
1954
+ padding_left: 2,
1955
+ width: 110 # Set the width here.
1956
+ }
1957
+ @internal_hash[:use_ascii_table] = true
1958
+ end
1959
+
1960
+ # ========================================================================== #
1961
+ # === sort_alphabetically?
1962
+ # ========================================================================== #
1963
+ def sort_alphabetically?
1964
+ @internal_hash[:sort_alphabetically]
1965
+ end
1966
+
1967
+ # ========================================================================== #
1968
+ # === assign_components_for_the_short_format
1969
+ #
1970
+ # We will only display 6 components when we use the short variant.
1971
+ # ========================================================================== #
1972
+ def assign_components_for_the_short_format
1973
+ clear_old_dataset
1974
+ dont_show_ruby_stuff
1975
+ add(%i(
1976
+ operating_system
1977
+ operating_system_bit_type
1978
+ cpuinfo
1979
+ cflags
1980
+ RAM
1981
+ screen_resolution
1982
+ ))
1983
+ end
1984
+
1985
+ # ========================================================================== #
1986
+ # === version?
1987
+ # ========================================================================== #
1988
+ def version?(
1989
+ key = the_primary_hash?.keys.first
1990
+ )
1991
+ the_primary_hash?[key]
1992
+ end
1993
+
1994
+ # ========================================================================== #
1995
+ # === EnvironmentInformation.colourize_and_pad_the_left_side
1996
+ # ========================================================================== #
1997
+ def self.colourize_and_pad_the_left_side(i)
1998
+ left_side = i.to_s.ljust(32) # Pad to the left-hand side.
1999
+ if use_colours?
2000
+ " #{Colours.send(::EnvironmentInformation.colour_for_the_left_side, left_side)}"
2001
+ else
2002
+ " #{left_side}"
2003
+ end
2004
+ end; self.instance_eval { alias prepare_left_side colourize_and_pad_the_left_side } # === EnvironmentInformation.prepare_left_side
2005
+
2006
+ end; end