environment_information 1.4.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of environment_information might be problematic. Click here for more details.

Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1061 -0
  3. data/bin/envi +7 -0
  4. data/bin/fast_envi +7 -0
  5. data/doc/README.gen +893 -0
  6. data/doc/TODO_FOR_THE_ENVIRONMENT_INFORMATION_PROJECT.md +54 -0
  7. data/environment_information.gemspec +130 -0
  8. data/lib/environment_information/base/base.rb +113 -0
  9. data/lib/environment_information/class/add.rb +186 -0
  10. data/lib/environment_information/class/colours.rb +283 -0
  11. data/lib/environment_information/class/constants.rb +35 -0
  12. data/lib/environment_information/class/environment_information.rb +51 -0
  13. data/lib/environment_information/class/help.rb +86 -0
  14. data/lib/environment_information/class/html.rb +78 -0
  15. data/lib/environment_information/class/initialize.rb +178 -0
  16. data/lib/environment_information/class/menu.rb +436 -0
  17. data/lib/environment_information/class/misc.rb +821 -0
  18. data/lib/environment_information/class/opn.rb +33 -0
  19. data/lib/environment_information/class/register_sigint.rb +20 -0
  20. data/lib/environment_information/class/reset.rb +213 -0
  21. data/lib/environment_information/class/ruby.rb +79 -0
  22. data/lib/environment_information/class/run.rb +61 -0
  23. data/lib/environment_information/class/show_display_and_report.rb +310 -0
  24. data/lib/environment_information/colours/colours.rb +150 -0
  25. data/lib/environment_information/colours/sfancy.rb +19 -0
  26. data/lib/environment_information/colours/simp.rb +19 -0
  27. data/lib/environment_information/constants/array_tracked_components.rb +207 -0
  28. data/lib/environment_information/constants/constants.rb +17 -0
  29. data/lib/environment_information/constants/encoding.rb +21 -0
  30. data/lib/environment_information/constants/error_line.rb +17 -0
  31. data/lib/environment_information/constants/file_constants.rb +102 -0
  32. data/lib/environment_information/constants/misc.rb +86 -0
  33. data/lib/environment_information/constants/namespace.rb +14 -0
  34. data/lib/environment_information/constants/newline.rb +16 -0
  35. data/lib/environment_information/constants/regex.rb +30 -0
  36. data/lib/environment_information/constants/temp_directory.rb +52 -0
  37. data/lib/environment_information/gui/gtk/bindings.rb +300 -0
  38. data/lib/environment_information/misc_components/README.md +3 -0
  39. data/lib/environment_information/misc_components/cflags.rb +36 -0
  40. data/lib/environment_information/misc_components/cpuinfo.rb +64 -0
  41. data/lib/environment_information/misc_components/operating_system.rb +54 -0
  42. data/lib/environment_information/misc_components/operating_system_bit_type.rb +42 -0
  43. data/lib/environment_information/misc_components/ram.rb +30 -0
  44. data/lib/environment_information/misc_components/rubygems_installation_directory.rb +54 -0
  45. data/lib/environment_information/misc_components/screen_resolution.rb +50 -0
  46. data/lib/environment_information/project/project.rb +27 -0
  47. data/lib/environment_information/queries/README.md +2 -0
  48. data/lib/environment_information/queries/complex_version.rb +263 -0
  49. data/lib/environment_information/queries/pkg_config.rb +125 -0
  50. data/lib/environment_information/queries/simple_version.rb +211 -0
  51. data/lib/environment_information/requires/require_asciitable.rb +15 -0
  52. data/lib/environment_information/requires/require_the_constants.rb +7 -0
  53. data/lib/environment_information/requires/require_the_environment_information_project.rb +23 -0
  54. data/lib/environment_information/requires/require_the_individual_misc_components.rb +30 -0
  55. data/lib/environment_information/requires/require_the_toplevel_methods.rb +22 -0
  56. data/lib/environment_information/toplevel_methods/autogenerate_all_relevant_methods.rb +152 -0
  57. data/lib/environment_information/toplevel_methods/cd.rb +16 -0
  58. data/lib/environment_information/toplevel_methods/e.rb +30 -0
  59. data/lib/environment_information/toplevel_methods/hash.rb +60 -0
  60. data/lib/environment_information/toplevel_methods/internet_is_available.rb +30 -0
  61. data/lib/environment_information/toplevel_methods/is_on_roebe.rb +16 -0
  62. data/lib/environment_information/toplevel_methods/menu.rb +90 -0
  63. data/lib/environment_information/toplevel_methods/misc.rb +264 -0
  64. data/lib/environment_information/toplevel_methods/n_subcommands.rb +31 -0
  65. data/lib/environment_information/toplevel_methods/prefix_to_use.rb +39 -0
  66. data/lib/environment_information/toplevel_methods/register_this_component_is_missing.rb +61 -0
  67. data/lib/environment_information/toplevel_methods/remote_url_of_this_program.rb +45 -0
  68. data/lib/environment_information/toplevel_methods/replay_from_the_stored_file.rb +84 -0
  69. data/lib/environment_information/toplevel_methods/return_pkgconfig_based_programs.rb +28 -0
  70. data/lib/environment_information/toplevel_methods/return_remote_gtk2_version.rb +54 -0
  71. data/lib/environment_information/toplevel_methods/return_simple_version_based_programs.rb +28 -0
  72. data/lib/environment_information/toplevel_methods/return_version_of_this_program.rb +186 -0
  73. data/lib/environment_information/toplevel_methods/show_all_available_components.rb +192 -0
  74. data/lib/environment_information/toplevel_methods/write_what_into.rb +24 -0
  75. data/lib/environment_information/version/version.rb +25 -0
  76. data/lib/environment_information/www/sinatra_interface.rb +213 -0
  77. data/lib/environment_information/www/webobject_interface.cgi +29 -0
  78. data/lib/environment_information/yaml/array_default_programs_on_linux.yml +14 -0
  79. data/lib/environment_information/yaml/array_lfs_core_programs.yml +35 -0
  80. data/lib/environment_information/yaml/array_science_cluster.yml +12 -0
  81. data/lib/environment_information/yaml/array_tracked_non_programs.yml +13 -0
  82. data/lib/environment_information/yaml/array_tracked_programs.yml +165 -0
  83. data/lib/environment_information/yaml/array_tracked_xorg_components.yml +34 -0
  84. data/lib/environment_information/yaml/query_to_use_for_the_individual_components.yml +215 -0
  85. data/lib/environment_information.rb +5 -0
  86. data/test/testing_environment_information.rb +26 -0
  87. data/test/testing_missing_components.rb +9 -0
  88. data/test/testing_prefix_for_the_environment_information_project.rb +20 -0
  89. metadata +195 -0
@@ -0,0 +1,300 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === EnvironmentInformation::EnvironmentInformation::GUI::GtkEnvironmentInformation
6
+ # =========================================================================== #
7
+ # require 'environment_information/gui/gtk/bindings.rb'
8
+ # EnvironmentInformation::::EnvironmentInformation::GUI::GtkEnvironmentInformation.run
9
+ # EnvironmentInformation.run_gtk
10
+ # =========================================================================== #
11
+ module EnvironmentInformation
12
+
13
+ require 'environment_information/base/base.rb'
14
+ require 'environment_information/requires/require_the_environment_information_project.rb'
15
+
16
+ class EnvironmentInformation < ::EnvironmentInformation::Base # === EnvironmentInformation::EnvironmentInformation
17
+
18
+ begin # Pull in the gtk_paradise project next.
19
+ require 'gtk_paradise/requires/require_the_gtk_paradise_project.rb'
20
+ rescue LoadError; end
21
+
22
+ module GUI
23
+
24
+ class GtkEnvironmentInformation < ::Gtk::VBox
25
+
26
+ begin
27
+ require 'colours'
28
+ include Colours::E
29
+ rescue LoadError; end
30
+
31
+ begin
32
+ require 'gtk_paradise/base_module/base_module.rb'
33
+ include ::Gtk::BaseModule
34
+ rescue LoadError; end
35
+
36
+ # ========================================================================= #
37
+ # === N
38
+ # ========================================================================= #
39
+ N = "\n"
40
+
41
+ # ========================================================================= #
42
+ # === Pick a default font
43
+ # ========================================================================= #
44
+ Gtk::Settings.default.gtk_font_name = 'Sans 20'
45
+
46
+ # ========================================================================= #
47
+ # === WIDTH
48
+ # ========================================================================= #
49
+ WIDTH = '1280'
50
+
51
+ # ========================================================================= #
52
+ # === HEIGHT
53
+ # ========================================================================= #
54
+ HEIGHT = '840'
55
+
56
+ # ========================================================================= #
57
+ # === EnvironmentInformation::EnvironmentInformation::GUI::GtkEnvironmentInformation.width
58
+ # ========================================================================= #
59
+ def self.width
60
+ WIDTH
61
+ end
62
+
63
+ # ========================================================================= #
64
+ # === EnvironmentInformation::EnvironmentInformation::GUI::GtkEnvironmentInformation.height
65
+ # ========================================================================= #
66
+ def self.height
67
+ HEIGHT
68
+ end
69
+
70
+ # ========================================================================= #
71
+ # === initialize
72
+ # ========================================================================= #
73
+ def initialize(
74
+ run_already = true
75
+ )
76
+ super()
77
+ reset
78
+ run if run_already
79
+ end
80
+
81
+ # ========================================================================= #
82
+ # === reset
83
+ # ========================================================================= #
84
+ def reset
85
+ # ======================================================================= #
86
+ # === @data
87
+ # ======================================================================= #
88
+ assign_the_environment_information_dataset_to_the_data_variable
89
+ # ======================================================================= #
90
+ # === @display_information_on_the_commandline
91
+ #
92
+ # If the next variable is set to true then information will be
93
+ # displayed on the commandline.
94
+ # ======================================================================= #
95
+ @display_information_on_the_commandline = true
96
+ # ======================================================================= #
97
+ # === @list_store
98
+ # ======================================================================= #
99
+ @list_store = Gtk::ListStore.new(String, String)
100
+ end
101
+
102
+ # ========================================================================= #
103
+ # === assign_the_environment_information_dataset_to_the_data_variable
104
+ # ========================================================================= #
105
+ def assign_the_environment_information_dataset_to_the_data_variable
106
+ @data = ::EnvironmentInformation.initialize_hash
107
+ end
108
+
109
+ # ========================================================================= #
110
+ # === create_gtk_tree_view
111
+ #
112
+ # The TreeView widget is the main widget which allows the user to
113
+ # display environment-related information about installed
114
+ # programs.
115
+ # ========================================================================= #
116
+ def create_gtk_tree_view
117
+ @tree_view = Gtk::TreeView.new(@list_store) # rf ruby gtk_TreeView
118
+ @tree_view.do_select_multiple # Allow multiple selections.
119
+ @tree_view.use_clickable_headers
120
+ @tree_view.enable_model_drag_source(
121
+ Gdk::Window::BUTTON1_MASK,
122
+ [ ['GTK_TREE_MODEL_ROW', 0, 0] ],
123
+ Gdk::DragContext::ACTION_COPY|Gdk::DragContext::ACTION_MOVE
124
+ )
125
+ @tree_view.enable_model_drag_dest([
126
+ ['GTK_TREE_MODEL_ROW', 0, 0] ],
127
+ Gdk::DragContext::ACTION_COPY|Gdk::DragContext::ACTION_MOVE
128
+ )
129
+ @tree_view.signal_connect(:row_activated) {
130
+ # puts "hello"
131
+ }
132
+ # ========================================================================= #
133
+ # Respond to mouse-button press events. This is currently not in use
134
+ # really.
135
+ # ========================================================================= #
136
+ @tree_view.signal_connect(:button_press_event) { |widget, event|
137
+ if mouse_button_double_click?(event)
138
+ # e 'MouseButton: double click event.'
139
+ # ^^^ Currently we do not handle this event.
140
+ elsif left_mouse_button_clicked?(event)
141
+ # e 'MouseButton: left-click event (once).'
142
+ elsif right_mouse_button_clicked?(event)
143
+ e 'MouseButton: right-click event (once).'
144
+ end
145
+ }
146
+ @tree_view.selection.set_mode(Gtk::SelectionMode::MULTIPLE)
147
+ @tree_view.selection.signal_connect(:changed) {|entry|
148
+ entry.selected_each {|model, path, inner_array|
149
+ if @display_information_on_the_commandline
150
+ if inner_array[0]
151
+ name_of_the_program = inner_array[0].strip
152
+ else
153
+ name_of_the_program = '(unknown'
154
+ end
155
+ version_of_the_program = inner_array[1]
156
+ result = Colours.steelblue(
157
+ name_of_the_program.ljust(25)
158
+ ).dup
159
+ if ::EnvironmentInformation.is_this_a_registered_program?(name_of_the_program)
160
+ result << 'Version: '
161
+ end
162
+ result << Colours.lightgreen(version_of_the_program.to_s)
163
+ e result
164
+ end
165
+ }
166
+ }
167
+ end
168
+
169
+ # ========================================================================= #
170
+ # === currently_selected
171
+ #
172
+ # Will show both key and version.
173
+ # ========================================================================= #
174
+ def currently_selected
175
+ (
176
+ @tree_view.selection.selected[0]+': '
177
+ ).ljust(30)+
178
+ @tree_view.selection.selected[1]
179
+ end
180
+
181
+ # ========================================================================= #
182
+ # === create_toolbar
183
+ # ========================================================================= #
184
+ def create_toolbar
185
+ @toolbar = gtk_toolbar
186
+ @toolbar.append_space
187
+ # ======================================================================= #
188
+ # Add the refresh-button next.
189
+ # ======================================================================= #
190
+ button_refresh = gtk_button(:refresh)
191
+ button_refresh.no_relief
192
+ button_refresh.signal_connect(:clicked) {
193
+ do_update_the_main_content_of_the_widget
194
+ }
195
+ button_refresh.fancy_tooltips = 'Click this button in order to '\
196
+ 'refresh the information shown below.'
197
+ @toolbar << button_refresh
198
+ end
199
+
200
+ # ========================================================================= #
201
+ # === do_update_the_main_content_of_the_widget
202
+ # ========================================================================= #
203
+ def do_update_the_main_content_of_the_widget
204
+ assign_the_environment_information_dataset_to_the_data_variable
205
+ @list_store.clear
206
+ @data.each {|line|
207
+ name, version = *line # Decompose line.
208
+ iter = @list_store.append
209
+ if version.nil? or version.to_s.empty?
210
+ version = '[Not installed.]'
211
+ end
212
+ iter.set_value(0, name)
213
+ iter.set_value(1, version)
214
+ }
215
+ end
216
+
217
+ # ========================================================================= #
218
+ # === add_status_icon
219
+ # ========================================================================= #
220
+ def add_status_icon
221
+ _ = gtk_status_icon(:dialog_info)
222
+ # ======================================================================= #
223
+ # Add a menu and a quit-button too.
224
+ # ======================================================================= #
225
+ menu = ::Gtk::Menu.new
226
+ quit = ::Gtk::ImageMenuItem.new(::Gtk::Stock::QUIT)
227
+ quit.signal_connect(:activate) { ::Gtk.main_quit }
228
+ menu.append(quit)
229
+ menu.show_all
230
+ _.signal_connect(:popup_menu) { |icon, button, time|
231
+ menu.popup(nil, nil, button, time)
232
+ }
233
+ end
234
+
235
+ # ========================================================================= #
236
+ # === run
237
+ # ========================================================================= #
238
+ def run
239
+ create_toolbar
240
+ create_gtk_tree_view
241
+ @renderer = gtk_cell_renderer_text
242
+ # ======================================================================= #
243
+ # Append the information contained in our @data variable to the
244
+ # ListStore object next. This will yield an Array.
245
+ # ======================================================================= #
246
+ do_update_the_main_content_of_the_widget
247
+ @tree_view.insert_column(-1, 'Name', @renderer, text: 0)
248
+ @tree_view.insert_column(-1, 'Version', @renderer, text: 1)
249
+ @tree_view.signal_connect(:key_press_event) { |w, event|
250
+ case Gdk::Keyval.to_name(event.keyval)
251
+ when 'Return','KP_Enter'
252
+ e currently_selected
253
+ end
254
+ }
255
+ File.delete('gmon.out') if File.exist? 'gmon.out' # Don't keep gmon.out
256
+ vbox = gtk_vbox
257
+ vbox.pack_start(@toolbar, false, false, 5)
258
+ @scrolled_window = gtk_scrolled_window(@tree_view)
259
+ vbox.pack_start(@scrolled_window, true, true,0)
260
+ add(vbox)
261
+ add_status_icon
262
+ show_all
263
+ end
264
+
265
+ end; end; end
266
+
267
+ # ========================================================================= #
268
+ # === EnvironmentInformation.gtk_bindings
269
+ # ========================================================================= #
270
+ def self.gtk_bindings
271
+ ::EnvironmentInformation::EnvironmentInformation::GUI::GtkEnvironmentInformation.new
272
+ end
273
+
274
+ # ========================================================================= #
275
+ # === EnvironmentInformation.run_gtk
276
+ #
277
+ # Use this method if you wish to run the gtk-component of the
278
+ # EnvironmentInformation project.
279
+ # ========================================================================= #
280
+ def self.run_gtk
281
+ x = ::EnvironmentInformation.gtk_bindings
282
+ r = Gtk.run(
283
+ ::EnvironmentInformation::EnvironmentInformation::GUI::GtkEnvironmentInformation.width,
284
+ ::EnvironmentInformation::EnvironmentInformation::GUI::GtkEnvironmentInformation.height,
285
+ :tabble,
286
+ 'Environment Information',2
287
+ )
288
+ r << x # ← Add the widget here.
289
+ r.add_shortcut(1, 'focus(:left)', :alt)
290
+ r.modify_bg(
291
+ Gtk::STATE_NORMAL, Gdk::Color.parse('grey')
292
+ )
293
+ r.top_left_then_run
294
+ end
295
+
296
+ end
297
+
298
+ if __FILE__ == $PROGRAM_NAME
299
+ EnvironmentInformation.run_gtk
300
+ end
@@ -0,0 +1,3 @@
1
+ Ruby files in this directory relate to components that are not really
2
+ programs, such as CFLAGS, or the number of processors, or the amount
3
+ of RAM on a given computer system.
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'environment_information/misc_components/cflags.rb'
6
+ # EnvironmentInformation.cflags_in_use?
7
+ # =========================================================================== #
8
+ module EnvironmentInformation
9
+
10
+ # ========================================================================= #
11
+ # === EnvironmentInformation.cflags? (cflags tag)
12
+ #
13
+ # The following is equivalent to the value stored in the variable
14
+ # $CFLAGS, which on unix-like systems may be obtained by issuing
15
+ # the following command:
16
+ #
17
+ # echo $CFLAGS
18
+ #
19
+ # The output may be like this:
20
+ #
21
+ # -O2 -fPIC -fno-strict-overflow -Wno-error
22
+ #
23
+ # ========================================================================= #
24
+ def self.cflags?
25
+ version = ENV['CFLAGS'].to_s.strip
26
+ version = '<none>' if version.empty? # Display special status if it is empty.
27
+ version
28
+ end; self.instance_eval { alias cflags_in_use? cflags? } # === EnvironmentInformation.cflags_in_use?
29
+ self.instance_eval { alias return_version_of_cflags cflags? } # === EnvironmentInformation.return_version_of_cflags
30
+ self.instance_eval { alias cflags cflags? } # === EnvironmentInformation.cflags
31
+
32
+ end
33
+
34
+ if __FILE__ == $PROGRAM_NAME
35
+ puts EnvironmentInformation.cflags?
36
+ end
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'environment_information/misc_components/cpuinfo.rb'
6
+ # EnvironmentInformation.cpuinfo?
7
+ # =========================================================================== #
8
+ module EnvironmentInformation
9
+
10
+ require 'environment_information/constants/newline.rb'
11
+ require 'environment_information/constants/error_line.rb'
12
+
13
+ # ========================================================================= #
14
+ # === EnvironmentInformation.cpuinfo? (cpuinfo tag)
15
+ #
16
+ # This method currently relies on /proc/cpuinfo, thus favouring
17
+ # Linux-based systems.
18
+ #
19
+ # The output will be similar to this:
20
+ #
21
+ # AMD A8-7600 Radeon R7, 10 Compute Cores 4C+6G, 4 cores
22
+ #
23
+ # It will become the display part of "CPU Model".
24
+ # ========================================================================= #
25
+ def self.cpuinfo?
26
+ result = '/proc/cpuinfo'
27
+ if File.exist? result
28
+ readlines = File.readlines(result)
29
+ _ = readlines.grep(/model name/).first.chomp
30
+ splitted = _.split(':')
31
+ _ = splitted[1].strip # => "model name\t: AMD Sempron(tm) 145 Processor"
32
+ # ===================================================================== #
33
+ # Next, add the amount of cores. We use "nproc" for this but "lscpu"
34
+ # also contains this information. The following regex could be used
35
+ # for lscpu:
36
+ #
37
+ # Core\(s\) per socket: (.+)
38
+ #
39
+ # Ok, we use lscpu for now.
40
+ # ===================================================================== #
41
+ n_cores = `nproc --all`.strip
42
+ case n_cores.to_s
43
+ when '1'
44
+ n_cores << ' core' # Singular.
45
+ else
46
+ n_cores << ' cores' # Plural then.
47
+ end
48
+ _ << ", #{n_cores}" unless n_cores.empty?
49
+ result = _
50
+ else
51
+ result = nil
52
+ end
53
+ result
54
+ end; self.instance_eval { alias append_operating_system_cpuinfo cpuinfo? } # === EnvironmentInformation.append_operating_system_cpuinfo
55
+ self.instance_eval { alias cpu_model cpuinfo? } # === EnvironmentInformation.cpu_model
56
+ self.instance_eval { alias cpu_model? cpuinfo? } # === EnvironmentInformation.cpu_model?
57
+ self.instance_eval { alias return_version_of_cpuinfo cpuinfo? } # === EnvironmentInformation.return_version_of_cpuinfo
58
+ self.instance_eval { alias cpuinfo cpuinfo? } # === EnvironmentInformation.cpuinfo
59
+
60
+ end
61
+
62
+ if __FILE__ == $PROGRAM_NAME
63
+ puts EnvironmentInformation.cpuinfo?
64
+ end
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'environment_information/misc_components/operating_system.rb'
6
+ # =========================================================================== #
7
+ module EnvironmentInformation
8
+
9
+ require 'environment_information/constants/newline.rb'
10
+ require 'environment_information/constants/error_line.rb'
11
+
12
+ # ========================================================================= #
13
+ # === EnvironmentInformation.operating_system (os tag)
14
+ #
15
+ # This method is also known as "bit type".
16
+ #
17
+ # The return value of this method may be a String such as this one here:
18
+ #
19
+ # "GNU/Linux"
20
+ #
21
+ # This is then further modified a bit to drop the "GNU/" part
22
+ # specifically.
23
+ #
24
+ # ========================================================================= #
25
+ def self.operating_system
26
+ cmd = 'uname -mo'
27
+ result = `#{cmd}`.chomp
28
+ if result.start_with? 'GNU'
29
+ # ===================================================================== #
30
+ # The next part removes 'GNU/' specifically. It is a simpler name
31
+ # than "GNU Linux" and variants, just as "BSD" is simpler than
32
+ # e. g. "FreeBSD". You can reason that it may be "less accurate",
33
+ # but it makes the notification-part of this gem simpler.
34
+ # ===================================================================== #
35
+ result.sub!(/^GNU\//,'') # Experimental as of Sep 2019.
36
+ end
37
+ if result.include? ' '
38
+ result = result.split(' ').last
39
+ end
40
+ result
41
+ end; self.instance_eval { alias operating_system? operating_system } # === EnvironmentInformation.operating_system?
42
+ self.instance_eval { alias operating_system_information? operating_system } # === EnvironmentInformation.operating_system_information
43
+ self.instance_eval { alias add_operating_system_information operating_system } # === EnvironmentInformation.add_operating_system_information
44
+ self.instance_eval { alias append_operating_system_in_use operating_system } # === EnvironmentInformation.append_operating_system_in_use
45
+ self.instance_eval { alias add_os_information operating_system } # === EnvironmentInformation.add_os_information
46
+ self.instance_eval { alias operating_system_in_use? operating_system } # === EnvironmentInformation.operating_system_in_use?
47
+ self.instance_eval { alias return_version_of_operating_system operating_system } # === EnvironmentInformation.return_version_of_operating_system
48
+ self.instance_eval { alias return_version_of_operating_system_in_use operating_system } # === EnvironmentInformation.return_version_of_operating_system_in_use
49
+
50
+ end
51
+
52
+ if __FILE__ == $PROGRAM_NAME
53
+ puts EnvironmentInformation.operating_system
54
+ end # envi_operating_system
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'environment_information/misc_components/operating_system.rb'
6
+ # =========================================================================== #
7
+ module EnvironmentInformation
8
+
9
+ require 'environment_information/constants/newline.rb'
10
+ require 'environment_information/constants/error_line.rb'
11
+
12
+ # ========================================================================= #
13
+ # === EnvironmentInformation.operating_system_bit_type_information (bit tag, bit type tag)
14
+ #
15
+ # This method will return the bit type in use, as a String,
16
+ # such as "x86_64" or "x86_64 (64 bit)" specifically. The
17
+ # reason why this method appends ' (64 bit)' is mostly so
18
+ # that the user can quickly see whether a computer is on
19
+ # 32 bit or on 64 bit.
20
+ # ========================================================================= #
21
+ def self.operating_system_bit_type_information
22
+ cmd = 'uname -m'
23
+ result = `#{cmd}`.chomp
24
+ result = result.split(' ')[-1] if result.include?(' ')
25
+ result = result.dup if result.frozen?
26
+ case result
27
+ when 'x86_64'
28
+ result << ' (64 bit)'
29
+ end
30
+ result
31
+ end; self.instance_eval { alias add_bit_type_information operating_system_bit_type_information } # === EnvironmentInformation.add_bit_type_information
32
+ self.instance_eval { alias add_operating_system_bit_type operating_system_bit_type_information } # === EnvironmentInformation.add_operating_system_bit_type
33
+ self.instance_eval { alias bit_type? operating_system_bit_type_information } # === EnvironmentInformation.bit_type?
34
+ self.instance_eval { alias return_version_of_operating_system_bit_type operating_system_bit_type_information } # === EnvironmentInformation.return_version_of_operating_system_bit_type
35
+ self.instance_eval { alias operating_system_bit_type? operating_system_bit_type_information } # === EnvironmentInformation.operating_system_bit_type?
36
+ self.instance_eval { alias operating_system_bit_type operating_system_bit_type_information } # === EnvironmentInformation.operating_system_bit_type
37
+
38
+ end
39
+
40
+ if __FILE__ == $PROGRAM_NAME
41
+ puts EnvironmentInformation.operating_system_bit_type_information
42
+ end
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'environment_information/misc_components/ram.rb'
6
+ # ::EnvironmentInformation.ram?
7
+ # =========================================================================== #
8
+ module EnvironmentInformation
9
+
10
+ # ========================================================================= #
11
+ # === EnvironmentInformation.ram? (ram tag)
12
+ #
13
+ # This method will determine how much RAM the given computer host has.
14
+ #
15
+ # The result will be given in n MB.
16
+ # ========================================================================= #
17
+ def self.ram?
18
+ result_in_n_mb = `free -m 2>&1`.split("\n")[1]
19
+ if result_in_n_mb and result_in_n_mb.include?(' ')
20
+ result_in_n_mb = result_in_n_mb.split(' ')[1]
21
+ end
22
+ result_in_n_mb
23
+ end; self.instance_eval { alias return_version_of_ram ram? } # === EnvironmentInformation.return_version_of_ram
24
+ self.instance_eval { alias ram ram? } # === EnvironmentInformation.ram
25
+
26
+ end
27
+
28
+ if __FILE__ == $PROGRAM_NAME
29
+ puts EnvironmentInformation.ram?
30
+ end
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'environment_information/misc_components/rubygems_installation_directory.rb'
6
+ # EnvironmentInformation.rubygems_installation_directory?
7
+ # =========================================================================== #
8
+ module EnvironmentInformation
9
+
10
+ require 'environment_information/constants/newline.rb'
11
+ require 'environment_information/constants/error_line.rb'
12
+ require 'environment_information/toplevel_methods/prefix_to_use.rb'
13
+
14
+ # ========================================================================= #
15
+ # === EnvironmentInformation.rubygems_installation_directory
16
+ #
17
+ # This method will return the path to the rubygems installation
18
+ # directory, if possible (if it exists).
19
+ #
20
+ # As this ought to be a directory, we will ensure that a trailing '/'
21
+ # character exists.
22
+ #
23
+ # This method may return a String such as "/root/.gem/".
24
+ # ========================================================================= #
25
+ def self.rubygems_installation_directory(
26
+ prefix_to_use = @prefix_to_use
27
+ )
28
+ result = `#{prefix_to_use}gem env #{ERROR_LINE}` # We need the 2>&1 to check if gem is available.
29
+ unless result.include? 'not found'
30
+ # ===================================================================== #
31
+ # Apply a regex next.
32
+ # ===================================================================== #
33
+ path_to_the_rubygem_directory = result.to_s.scan(
34
+ /INSTALLATION DIRECTORY: (.+)/ # Obtain the proper match here.
35
+ ).flatten.first.to_s
36
+ if File.directory? path_to_the_rubygem_directory
37
+ path_to_the_rubygem_directory << '/'
38
+ end unless path_to_the_rubygem_directory.end_with? '/'
39
+ result = path_to_the_rubygem_directory
40
+ else
41
+ result = nil
42
+ end
43
+ result
44
+ end; self.instance_eval { alias add_rubygems_installation_directory_information rubygems_installation_directory } # === EnvironmentInformation.add_rubygems_installation_directory_information
45
+ self.instance_eval { alias add_rubygem_directory_information rubygems_installation_directory } # === EnvironmentInformation.add_rubygem_directory_information
46
+ self.instance_eval { alias append_rubygem_installation_directory rubygems_installation_directory } # === EnvironmentInformation.append_rubygem_installation_directory
47
+ self.instance_eval { alias return_version_of_rubygems_installation_directory rubygems_installation_directory } # === EnvironmentInformation.return_version_of_rubygems_installation_directory
48
+ self.instance_eval { alias rubygems_installation_directory? rubygems_installation_directory } # === EnvironmentInformation.rubygems_installation_directory?
49
+
50
+ end
51
+
52
+ if __FILE__ == $PROGRAM_NAME
53
+ puts EnvironmentInformation.rubygems_installation_directory
54
+ end
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'environment_information/misc_components/screen_resolution.rb'
6
+ # EnvironmentInformation.screen_resolution?
7
+ # =========================================================================== #
8
+ module EnvironmentInformation
9
+
10
+ require 'environment_information/constants/newline.rb'
11
+ require 'environment_information/constants/error_line.rb'
12
+
13
+ # ========================================================================= #
14
+ # === EnvironmentInformation.screen_resolution (screen tag)
15
+ #
16
+ # This method will typically make use of xdpyinfo first, as it also
17
+ # works in a .cgi environment. For non-cgi environments, on linux,
18
+ # we could use xrandr, which is a bit more elegant.
19
+ #
20
+ # On success, the method here will return a String such as "1920x1080".
21
+ # ========================================================================= #
22
+ def self.screen_resolution
23
+ result = '(unknown)' # This is the default return-value, then.
24
+ # ======================================================================= #
25
+ # === Check for linux as host OS first
26
+ # ======================================================================= #
27
+ if RUBY_PLATFORM.downcase.include? 'linux'
28
+ # ================================================================= #
29
+ # We have to be careful as xdpyinfo may not be installed on the
30
+ # given computer system.
31
+ # ================================================================= #
32
+ resolution = `xdpyinfo #{ERROR_LINE}`.scan(/dimensions:.+$/).first # The error here may be: "xdpyinfo: unable to open display"
33
+ if resolution and resolution.include? ':'
34
+ result = resolution.split(':').last.strip.split('pixels').first.strip
35
+ end
36
+ # ======================================================================= #
37
+ # === Else simply assume to be on windows here
38
+ # ======================================================================= #
39
+ else
40
+ result = `wmic desktopmonitor get screenheight,screenwidth`
41
+ end
42
+ result
43
+ end; self.instance_eval { alias screen_resolution? screen_resolution } # === EnvironmentInformation.screen_resolution?
44
+ self.instance_eval { alias return_version_of_screen_resolution screen_resolution } # === EnvironmentInformation.return_version_of_screen_resolution
45
+
46
+ end
47
+
48
+ if __FILE__ == $PROGRAM_NAME
49
+ puts EnvironmentInformation.screen_resolution
50
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'environment_information/project/project.rb'
6
+ # =========================================================================== #
7
+ module EnvironmentInformation
8
+
9
+ # ========================================================================= #
10
+ # === EnvironmentInformation::PROJECT_BASE_DIRECTORY
11
+ #
12
+ # This constant may point to a target such as:
13
+ #
14
+ # /home/Programs/Ruby/2.7.1/lib/ruby/site_ruby/2.7.0/environment_information/
15
+ #
16
+ # ========================================================================= #
17
+ PROJECT_BASE_DIRECTORY =
18
+ File.absolute_path("#{__dir__}/..")+'/'
19
+
20
+ # ========================================================================= #
21
+ # === EnvironmentInformation.project_base_directory?
22
+ # ========================================================================= #
23
+ def self.project_base_directory?
24
+ PROJECT_BASE_DIRECTORY
25
+ end; self.instance_eval { alias project_base_dir? project_base_directory? } # === EnvironmentInformation.project_base_dir?
26
+
27
+ end
@@ -0,0 +1,2 @@
1
+ This directory contains code to specifically handle the different
2
+ query-related ways.