mountpoints 1.0.13 → 1.2.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a6ff0a164ec1b673135a911e81a3ec5648cff9b736f297aa087160245e13093c
4
- data.tar.gz: c61a3240c419aa4598240dfc95e36db9ce372e3369b6eb014aabd04f2c81ea46
3
+ metadata.gz: 8b0855050bed99b01644fa83a4ea8f15330234b30c6a79622968a1c07f4b5a71
4
+ data.tar.gz: 4970dd1d922f8e42ebc43e1912025d13512978c8604a7d9d3f5c525ab4738000
5
5
  SHA512:
6
- metadata.gz: 1e70743c2d4769ae3e9a211324c49ef298f8f430708ab57ac6d018b657543323ad915dd416416747ed5e62e23a7dc7841b58aed400e2548fe636be1eb42dbda8
7
- data.tar.gz: 34c0c875dd9411458d76cde4a5f905475aae8173fe1fadd03b29048efd8b213def357ffedcdaf796623609a34ef71621415623ddebfee558b1647bf663ab469d
6
+ metadata.gz: ef6336f27b1a1883fdd5881ea16d13a9f32b2e3eaf4ba868451fcac4d47ede3972d86471fb1fadd773021e684850aad2765af6d33c258d6537f5c380b209fbe7
7
+ data.tar.gz: 297b56feeab21918d8707c589ce6b5c16c169b7b14328c8ca384f5a247f8829ab4731be73fde617fd7df16bf38a3c307d9511812d03e76e80981c94de1554b6f
data/README.md ADDED
@@ -0,0 +1,101 @@
1
+ [![forthebadge](http://forthebadge.com/images/badges/built-with-love.svg)](https://www.gobolinux.org/)
2
+ [![forthebadge](http://forthebadge.com/images/badges/made-with-ruby.svg)](https://www.ruby-lang.org/en/)
3
+ [![Gem Version](https://badge.fury.io/rb/mountpoints.svg)](https://badge.fury.io/rb/mountpoints)
4
+
5
+ This gem was <b>last updated</b> on the <span style="color: darkblue; font-weight: bold">15.05.2022</span> (dd.mm.yyyy notation), at <span style="color: steelblue; font-weight: bold">23:56:46</span> o'clock.
6
+
7
+ <img src="https://i.imgur.com/Oi4pNNi.png" style="margin: 1em">
8
+
9
+ ## The goals for the mountpoints project
10
+
11
+ The mountpoints project shall simply display the available mountpoints
12
+ for USB devices. This should ideally work on Linux as well on Windows -
13
+ and, if possible, on other operating systems as well.
14
+
15
+ ## Simple usage example
16
+
17
+ Consider using the mountpoints gem like this, after installation:
18
+
19
+ require 'mountpoints'
20
+ pp Mountpoints[] # This will (quietly) return an Array, which contains the mounted devices.
21
+
22
+ Alternative you can use it from the commandline, in which case it
23
+ will report to you (the user) what it has found, such as "Discovered
24
+ mountpoint /mnt/usb1/." or something like that.
25
+
26
+ ## Commandline flags
27
+
28
+ The flag **--extra-verbose** can be used to report more information about
29
+ the mountpoints (on **Linux**).
30
+
31
+ ## Storing the mountpoints internally
32
+
33
+ The current policy is to store all mountpoints as **directories**, that
34
+ is via a trailing **/**. So if the mountpoint is normally **/Mount/USB1**
35
+ then this will be stored as **/Mount/USB1/**.
36
+
37
+ The reason I document this here is so that I can refer to this policy
38
+ in case anything changes - and if this document is updated. As of **May
39
+ 2022 this is the case**. This may be subject to change one day, but
40
+ I expect this to remain as long as the mountpoints gem will be made
41
+ available here on **rubygems.org**.
42
+
43
+ ## Using the project on windows
44
+
45
+ On **Linux** we can simply use "**fdisk -l**" and this should work
46
+ fine. If **fdisk** is not available then **df** may suffice. (Since
47
+ as of the rewrite in **May 2022** the mountpoints gem now defaults
48
+ to df on linux, actually.)
49
+
50
+ On **Windows** we have to use another way. I picked **wmic**.
51
+
52
+ Usage example for **wmic**:
53
+
54
+ wmic logicaldisk where "drivetype=3" get DeviceID
55
+
56
+ This then gets parsed and the last line is assumed to be the
57
+ currently inserted USB harddisc. This evidently may break for
58
+ many use cases, in particular when there are several USB
59
+ devices mount, which is why I document this here - but for
60
+ my own simple use cases this actually works, and I verified
61
+ that this indeed does work for simple use cases.
62
+
63
+ In **May 2022* two ad-hoc methods were added called:
64
+
65
+ Mountpoints.windows1
66
+ Mountpoints.windows2
67
+
68
+ These will run the corresponding wmic commands via `` backticks
69
+ as well as output the command that is run.
70
+
71
+ Regular users won't really need to run this, but in the event
72
+ that something isn't right you can use these two methods
73
+ conveniently. It's mostly for debugging, though, so most users
74
+ will not need to run this.
75
+
76
+
77
+ ## Contact information
78
+
79
+ If your creative mind has ideas and specific suggestions to make this
80
+ gem more useful in general, feel free to drop me an email at any
81
+ time, via:
82
+
83
+ shevy@inbox.lt
84
+
85
+ Before that email I used an email account at Google gmail, but in **2021** I
86
+ decided to slowly abandon gmail for various reasons. In part this is because
87
+ the UI annoys me (on non-chrome browser loading takes too long), but also
88
+ because of Google's attempt to establish mass surveillance via its
89
+ federated cohorts sniffing (FLoC). I do not know what happened at Google,
90
+ but enough is enough - there is only so much you can take while supporting
91
+ greed. When it comes to data mining done by private groups, ultimately
92
+ the user became the product.
93
+
94
+ Do keep in mind that responding to emails may take some time,
95
+ depending on the amount of work I may have at that moment, due
96
+ to reallife time constraints. I will, however had, read feedback
97
+ eventually. Patches and code changes are welcome too, of course,
98
+ as long as they are in the spirit of the project at hand, e. g.
99
+ fitting to the general theme. For this I may make use of github
100
+ as a discussion site, but this has a low priority right now.
101
+
data/bin/mountpoints ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ require 'mountpoints'
6
+
7
+ Mountpoints.new
data/doc/README.gen ADDED
@@ -0,0 +1,72 @@
1
+ ADD_RUBY_LOGO_AND_TIMESTAMP
2
+
3
+ <img src="https://i.imgur.com/Oi4pNNi.png" style="margin: 1em">
4
+
5
+ ## The goals for the mountpoints project
6
+
7
+ The mountpoints project shall simply display the available mountpoints
8
+ for USB devices. This should ideally work on Linux as well on Windows -
9
+ and, if possible, on other operating systems as well.
10
+
11
+ ## Simple usage example
12
+
13
+ Consider using the mountpoints gem like this, after installation:
14
+
15
+ require 'mountpoints'
16
+ pp Mountpoints[] # This will (quietly) return an Array, which contains the mounted devices.
17
+
18
+ Alternative you can use it from the commandline, in which case it
19
+ will report to you (the user) what it has found, such as "Discovered
20
+ mountpoint /mnt/usb1/." or something like that.
21
+
22
+ ## Commandline flags
23
+
24
+ The flag **--extra-verbose** can be used to report more information about
25
+ the mountpoints (on **Linux**).
26
+
27
+ ## Storing the mountpoints internally
28
+
29
+ The current policy is to store all mountpoints as **directories**, that
30
+ is via a trailing **/**. So if the mountpoint is normally **/Mount/USB1**
31
+ then this will be stored as **/Mount/USB1/**.
32
+
33
+ The reason I document this here is so that I can refer to this policy
34
+ in case anything changes - and if this document is updated. As of **May
35
+ 2022 this is the case**. This may be subject to change one day, but
36
+ I expect this to remain as long as the mountpoints gem will be made
37
+ available here on **rubygems.org**.
38
+
39
+ ## Using the project on windows
40
+
41
+ On **Linux** we can simply use "**fdisk -l**" and this should work
42
+ fine. If **fdisk** is not available then **df** may suffice. (Since
43
+ as of the rewrite in **May 2022** the mountpoints gem now defaults
44
+ to df on linux, actually.)
45
+
46
+ On **Windows** we have to use another way. I picked **wmic**.
47
+
48
+ Usage example for **wmic**:
49
+
50
+ wmic logicaldisk where "drivetype=3" get DeviceID
51
+
52
+ This then gets parsed and the last line is assumed to be the
53
+ currently inserted USB harddisc. This evidently may break for
54
+ many use cases, in particular when there are several USB
55
+ devices mount, which is why I document this here - but for
56
+ my own simple use cases this actually works, and I verified
57
+ that this indeed does work for simple use cases.
58
+
59
+ In **May 2022* two ad-hoc methods were added called:
60
+
61
+ Mountpoints.windows1
62
+ Mountpoints.windows2
63
+
64
+ These will run the corresponding wmic commands via `` backticks
65
+ as well as output the command that is run.
66
+
67
+ Regular users won't really need to run this, but in the event
68
+ that something isn't right you can use these two methods
69
+ conveniently. It's mostly for debugging, though, so most users
70
+ will not need to run this.
71
+
72
+ ADD_CONTACT_INFORMATION
@@ -0,0 +1,425 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === Mountpoints
6
+ #
7
+ # The primary objective of this class is to scan for all mounted USB-devices.
8
+ #
9
+ # Note that toplevel-methods, that is in the form of Mountpoints.foobar(),
10
+ # will be stored in another .rb file, aptly named "toplevel_methods.rb".
11
+ #
12
+ # Colours may be used on the commandline if the .report() method is
13
+ # called and if use_colours? returns true (which is the default).
14
+ #
15
+ # Usage examples:
16
+ #
17
+ # Mountpoints.new(ARGV)
18
+ # Mountpoints.new
19
+ # Mountpoints.show
20
+ # Mountpoints.is_any_mountpoint_available?
21
+ #
22
+ # =========================================================================== #
23
+ # require 'mountpoints/class/mountpoints.rb'
24
+ # =========================================================================== #
25
+ class Mountpoints # === Mountpoints
26
+
27
+ begin
28
+ require 'colours'
29
+ rescue LoadError; end
30
+
31
+ begin
32
+ require 'opn'
33
+ rescue LoadError; end
34
+
35
+ require 'mountpoints/constants/constants.rb'
36
+ require 'mountpoints/toplevel_methods/toplevel_methods.rb'
37
+ require 'mountpoints/version/version.rb'
38
+
39
+ # ========================================================================= #
40
+ # === NAMESPACE
41
+ # ========================================================================= #
42
+ NAMESPACE = inspect
43
+
44
+ # ========================================================================= #
45
+ # === N
46
+ # ========================================================================= #
47
+ N = "\n"
48
+
49
+ # ========================================================================= #
50
+ # === LJUST
51
+ # ========================================================================= #
52
+ LJUST = 15
53
+
54
+ # ========================================================================= #
55
+ # === DF_COMMAND
56
+ # ========================================================================= #
57
+ DF_COMMAND = 'df -T -ah 2>&1'
58
+
59
+ # ========================================================================= #
60
+ # === DEBUG
61
+ #
62
+ # If true then we will debug this class.
63
+ # ========================================================================= #
64
+ DEBUG = false
65
+
66
+ # ========================================================================= #
67
+ # === initialize
68
+ # ========================================================================= #
69
+ def initialize(
70
+ commandline_arguments = nil,
71
+ run_already = true
72
+ )
73
+ reset
74
+ set_commandline_arguments(
75
+ commandline_arguments
76
+ )
77
+ if block_given?
78
+ yielded = yield
79
+ case yielded
80
+ # ===================================================================== #
81
+ # === :be_quiet
82
+ # ===================================================================== #
83
+ when :be_quiet
84
+ set_be_quiet
85
+ run_already = true
86
+ # ===================================================================== #
87
+ # === :be_verbose
88
+ # ===================================================================== #
89
+ when :be_verbose,
90
+ :be_extra_verbose
91
+ set_be_verbose
92
+ run_already = true
93
+ # ===================================================================== #
94
+ # === :normal_verbosity
95
+ # ===================================================================== #
96
+ when :normal_verbosity # Simply pass through here. No longer that important as of 2022, though.
97
+ end
98
+ end
99
+ if commandline_arguments.is_a? Array
100
+ case commandline_arguments.first
101
+ # ===================================================================== #
102
+ # === --extra-verbose
103
+ # ===================================================================== #
104
+ when /^-?-?extra(-|_)?verbose$/
105
+ set_be_verbose
106
+ run_already = true
107
+ end
108
+ end
109
+ run if run_already
110
+ end
111
+
112
+ # ========================================================================= #
113
+ # === reset (reset tag)
114
+ # ========================================================================= #
115
+ def reset
116
+ # ======================================================================= #
117
+ # === @namespace
118
+ # ======================================================================= #
119
+ @namespace = NAMESPACE
120
+ # ======================================================================= #
121
+ # === @internal_hash
122
+ # ======================================================================= #
123
+ @internal_hash = {}
124
+ # ======================================================================= #
125
+ # === :array_available_mountpoints
126
+ # ======================================================================= #
127
+ @internal_hash[:array_available_mountpoints] = []
128
+ # ======================================================================= #
129
+ # === :use_colours
130
+ # ======================================================================= #
131
+ @internal_hash[:use_colours] = true
132
+ # ======================================================================= #
133
+ # === :be_verbose
134
+ # ======================================================================= #
135
+ @internal_hash[:be_verbose] = true
136
+ # ======================================================================= #
137
+ # === :command_to_run
138
+ #
139
+ # This is the command that will be run via ``.
140
+ # ======================================================================= #
141
+ @internal_hash[:command_to_run] = ''.dup
142
+ end
143
+
144
+ # ========================================================================= #
145
+ # === set_command_to_run
146
+ # ========================================================================= #
147
+ def set_command_to_run(
148
+ i = :default_command_on_linux
149
+ )
150
+ case i
151
+ # ======================================================================= #
152
+ # === :default_command_on_linux
153
+ # ======================================================================= #
154
+ when :default_command_on_linux,
155
+ :default
156
+ i = DF_COMMAND
157
+ end
158
+ @internal_hash[:command_to_run] = i
159
+ end
160
+
161
+ # ========================================================================= #
162
+ # === run_the_system_command
163
+ # ========================================================================= #
164
+ def run_the_system_command
165
+ return `#{command_to_run?}`
166
+ end
167
+
168
+ # ========================================================================= #
169
+ # === command_to_run?
170
+ # ========================================================================= #
171
+ def command_to_run?
172
+ @internal_hash[:command_to_run]
173
+ end
174
+
175
+ # ========================================================================= #
176
+ # === set_be_quiet
177
+ # ========================================================================= #
178
+ def set_be_quiet
179
+ @internal_hash[:be_verbose] = false
180
+ end
181
+
182
+ # ========================================================================= #
183
+ # === set_be_verbose
184
+ # ========================================================================= #
185
+ def set_be_verbose
186
+ @internal_hash[:be_verbose] = true
187
+ end
188
+
189
+ # ========================================================================= #
190
+ # === set_commandline_arguments
191
+ # ========================================================================= #
192
+ def set_commandline_arguments(i = '')
193
+ i = [i].flatten.compact
194
+ @commandline_arguments = i
195
+ end
196
+
197
+ # ========================================================================= #
198
+ # === commandline_arguments?
199
+ # ========================================================================= #
200
+ def commandline_arguments?
201
+ @commandline_arguments
202
+ end
203
+
204
+ # ========================================================================= #
205
+ # === first_argument?
206
+ # ========================================================================= #
207
+ def first_argument?
208
+ @commandline_arguments.first
209
+ end; alias first? first_argument? # === first?
210
+
211
+ # ========================================================================= #
212
+ # === available_mountpoints?
213
+ # ========================================================================= #
214
+ def available_mountpoints?
215
+ @internal_hash[:array_available_mountpoints]
216
+ end; alias mountpoints? available_mountpoints? # === mountpoints?
217
+ alias array? available_mountpoints? # === array?
218
+ alias array_mountpoints? available_mountpoints? # === array_mountpoints?
219
+ alias array_mountpoints available_mountpoints? # === array_mountpoints
220
+ alias mounted_here available_mountpoints? # === mounted_here
221
+ alias result? available_mountpoints? # === result?
222
+ alias result available_mountpoints? # === result
223
+
224
+ # ========================================================================= #
225
+ # === add_this_entry_to_the_available_mountpoints (add tag)
226
+ # ========================================================================= #
227
+ def add_this_entry_to_the_available_mountpoints(i)
228
+ unless i == '/' # Ignore the root entry here.
229
+ unless i.end_with? '/'
230
+ i = i.dup if i.frozen?
231
+ i << '/'
232
+ end
233
+ @internal_hash[:array_available_mountpoints] << i
234
+ end
235
+ end; alias add add_this_entry_to_the_available_mountpoints # === add
236
+
237
+ # ========================================================================= #
238
+ # === e
239
+ # ========================================================================= #
240
+ def e(i = '')
241
+ if use_colours?
242
+ ::Colours.e(i)
243
+ else
244
+ puts i
245
+ end
246
+ end
247
+
248
+ # ========================================================================= #
249
+ # === debug?
250
+ # ========================================================================= #
251
+ def debug?
252
+ DEBUG
253
+ end
254
+
255
+ # ========================================================================= #
256
+ # === rds
257
+ # ========================================================================= #
258
+ def rds(i)
259
+ i.squeeze('/')
260
+ end
261
+
262
+ # ========================================================================= #
263
+ # === use_colours?
264
+ # ========================================================================= #
265
+ def use_colours?
266
+ @internal_hash[:use_colours]
267
+ end
268
+
269
+ # ========================================================================= #
270
+ # === be_verbose?
271
+ # ========================================================================= #
272
+ def be_verbose?
273
+ @internal_hash[:be_verbose]
274
+ end; alias be_extra_verbose? be_verbose? # === be_extra_verbose?
275
+
276
+ # ========================================================================= #
277
+ # === report_the_determined_mountpoints (report tag)
278
+ # ========================================================================= #
279
+ def report_the_determined_mountpoints(
280
+ available_mountpoints = available_mountpoints?,
281
+ be_verbose = be_verbose?
282
+ )
283
+ if be_verbose
284
+ if available_mountpoints.empty?
285
+ opn; e 'No mount point was found. Thus, it is assumed '\
286
+ 'that no USB device is currently mounted.'
287
+ else # else report the mountpoints here.
288
+ opn; e 'The following mount points were found:'
289
+ e
290
+ available_mountpoints.each {|entry|
291
+ e " #{forestgreen(entry)}".ljust(LJUST)
292
+ }
293
+ e
294
+ end
295
+ end
296
+ end; alias report report_the_determined_mountpoints # === report
297
+ alias report_colourized_result report_the_determined_mountpoints # === report_colourized_result
298
+ alias report_result report_the_determined_mountpoints # === report_result
299
+ alias determine_result report_the_determined_mountpoints # === determine_result
300
+
301
+ # ========================================================================= #
302
+ # === forestgreen
303
+ # ========================================================================= #
304
+ def forestgreen(i)
305
+ return ::Colours.forestgreen(i) if use_colours?
306
+ return i
307
+ end
308
+
309
+ # ========================================================================= #
310
+ # === determine_the_available_mountpoints
311
+ #
312
+ # This method will branch into a linux-specific clause and a
313
+ # windows-specific clause.
314
+ # ========================================================================= #
315
+ def determine_the_available_mountpoints
316
+ clear_the_mountpoints # First clear the mountpoints - we don't want old entries.
317
+ # ======================================================================= #
318
+ # === Handle windows next
319
+ # ======================================================================= #
320
+ if use_windows?
321
+ determine_the_mountpoints_on_windows
322
+ # ======================================================================= #
323
+ # === Handle linux next
324
+ # ======================================================================= #
325
+ else # This branch is specifically for linux
326
+ determine_the_mountpoints_on_linux
327
+ end
328
+ end
329
+
330
+ # ========================================================================= #
331
+ # === determine_the_mountpoints_on_linux (linux tag, linux branch)
332
+ # ========================================================================= #
333
+ def determine_the_mountpoints_on_linux
334
+ set_command_to_run(:default_command_on_linux)
335
+ if debug?
336
+ e "Now running this command: #{sfancy(command_to_run?)}"
337
+ end
338
+ result = run_the_system_command.split(N)
339
+ # ======================================================================= #
340
+ # Next parse it for results such as:
341
+ #
342
+ # /dev/sdc1 2048 3907029134 3907027087 1.8T Linux filesystem
343
+ # /dev/sdc1 459G 436G 0 100% /Mount/USB3
344
+ #
345
+ # This stands for:
346
+ #
347
+ # Device Start End Sectors Size Type
348
+ #
349
+ # ======================================================================= #
350
+ matches = result.select {|entry| entry =~ /^\/dev\// } # Or check for: '/dev/sd'
351
+ matches.each {|line|
352
+ splitted = line.split(' ').map(&:strip)
353
+ last_entry = splitted.last.strip
354
+ add_this_entry_to_the_available_mountpoints(last_entry)
355
+ }
356
+ end
357
+
358
+ # ========================================================================= #
359
+ # === set_mountpoints
360
+ #
361
+ # Note that all directories will be stored via a trailing '/' in this
362
+ # method.
363
+ # ========================================================================= #
364
+ def set_mountpoints(i)
365
+ i = [i].flatten.compact
366
+ i.map! {|entry|
367
+ if File.directory? entry
368
+ entry = rds(entry)
369
+ end
370
+ if File.directory?(entry) and !entry.end_with?('/')
371
+ entry << '/'
372
+ end
373
+ entry
374
+ }
375
+ @internal_hash[:array_mountpoints] = i
376
+ end
377
+
378
+ # ========================================================================= #
379
+ # === clear_the_mountpoints
380
+ # ========================================================================= #
381
+ def clear_the_mountpoints
382
+ @internal_hash[:array_available_mountpoints].clear
383
+ end
384
+
385
+ # ========================================================================= #
386
+ # === use_windows?
387
+ # ========================================================================= #
388
+ def use_windows?
389
+ return Mountpoints.use_windows?
390
+ end; alias is_on_windows? use_windows? # === is_on_windows?
391
+
392
+ # ========================================================================= #
393
+ # === determine_the_mountpoints_on_windows
394
+ # ========================================================================= #
395
+ def determine_the_mountpoints_on_windows
396
+ result = ''.dup
397
+ set_command_to_run(WINDOWS_COMMAND1)
398
+ result << `#{command_to_run?}`.split(N).reject {|line| line.to_s.strip.empty? }.join(N) # This will keep the main result.
399
+ set_command_to_run(WINDOWS_COMMAND2)
400
+ result << `#{command_to_run?}`.split(N).reject {|line| line.to_s.strip.empty? }.join(N) # This will keep the main result.
401
+ result = result.split(N).reverse.select {|entry|
402
+ entry.include? ':'
403
+ }.map {|entry|
404
+ entry.strip
405
+ }.reject {|entry| entry.include? 'DeviceID' } .uniq
406
+ set_mountpoints(result)
407
+ end
408
+
409
+ # ========================================================================= #
410
+ # === run (run tag)
411
+ # ========================================================================= #
412
+ def run
413
+ determine_the_available_mountpoints
414
+ report_the_determined_mountpoints
415
+ end
416
+
417
+ end
418
+
419
+ if __FILE__ == $PROGRAM_NAME
420
+ Mountpoints.new(ARGV)
421
+ # To query the mountpoints do:
422
+ #
423
+ # pp _.mountpoints?
424
+ #
425
+ end # rawmountpoints
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'mountpoints/constants/constants.rb'
6
+ # =========================================================================== #
7
+ class Mountpoints
8
+
9
+ # ========================================================================= #
10
+ # === WINDOWS_COMMAND1
11
+ # ========================================================================= #
12
+ WINDOWS_COMMAND1 = 'wmic logicaldisk where "drivetype=3" get DeviceID'
13
+
14
+ # ========================================================================= #
15
+ # === WINDOWS_COMMAND2
16
+ # ========================================================================= #
17
+ WINDOWS_COMMAND2 = 'wmic logicaldisk where "drivetype=2" get DeviceID'
18
+
19
+ end
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'mountpoints/toplevel_methods/toplevel_methods.rb'
6
+ # =========================================================================== #
7
+ class Mountpoints # === Mountpoints
8
+
9
+ require 'mountpoints/constants/constants.rb'
10
+
11
+ # ========================================================================= #
12
+ # === Mountpoints.use_windows?
13
+ #
14
+ # This boolean method will return true if we are on windows, and
15
+ # false otherwise.
16
+ # ========================================================================= #
17
+ def self.use_windows?
18
+ case RUBY_PLATFORM
19
+ when /win/,
20
+ /mingw/,
21
+ /msys/
22
+ return true
23
+ else
24
+ return false
25
+ end
26
+ end; self.instance_eval { alias is_on_windows? use_windows? } # === Mountpoints.is_on_windows?
27
+
28
+ # ========================================================================= #
29
+ # === Mountpoints[]
30
+ #
31
+ # This method will return an Array, such as:
32
+ #
33
+ # ["/Mount/USB1/"]
34
+ #
35
+ # It will be quiet by default.
36
+
37
+ # Usage example:
38
+ #
39
+ # x = Mountpoints # => ["/Mount/USB3/"]
40
+ #
41
+ # ========================================================================= #
42
+ def self.[](i = ARGV)
43
+ new(i) { :be_quiet }.array_mountpoints # The Array will be returned as well.
44
+ end
45
+
46
+ # ========================================================================= #
47
+ # === Mountpoints.array?
48
+ #
49
+ # This variant will only return the mountpoints, as Array.
50
+ # ========================================================================= #
51
+ def self.array?(i = ARGV)
52
+ new(i) { :be_quiet }.array?
53
+ end; self.instance_eval { alias mountpoints_as_array array? } # === Mountpoints.mountpoints_as_array
54
+ self.instance_eval { alias array_mountpoints array? } # === Mountpoints.mountpoints_as_array
55
+ self.instance_eval { alias mountpoints? array? } # === Mountpoints.mountpoints_as_array
56
+
57
+ # ========================================================================= #
58
+ # === Mountpoints.report
59
+ # ========================================================================= #
60
+ def self.report
61
+ new(i) { :be_verbose }
62
+ end; self.instance_eval { alias show report } # === Mountpoints.show
63
+
64
+ # ========================================================================= #
65
+ # === Mountpoints.is_any_mountpoint_available?
66
+ # ========================================================================= #
67
+ def self.is_any_mountpoint_available?
68
+ !new { :be_quiet }.array_mountpoints.empty?
69
+ end
70
+
71
+ # ========================================================================= #
72
+ # === Mountpoints.windows1
73
+ # ========================================================================= #
74
+ def self.windows1(cmd_to_run = WINDOWS_COMMAND1)
75
+ e cmd_to_run
76
+ `#{cmd_to_run}`
77
+ end
78
+
79
+ # ========================================================================= #
80
+ # === Mountpoints.windows2
81
+ # ========================================================================= #
82
+ def self.windows2(cmd_to_run = WINDOWS_COMMAND2)
83
+ e cmd_to_run
84
+ `#{cmd_to_run}`
85
+ end
86
+
87
+ end
88
+
89
+ if __FILE__ == $PROGRAM_NAME
90
+ require 'mountpoints/class/mountpoints.rb'
91
+ pp Mountpoints.array?
92
+ end # rawmountpoints
@@ -1,5 +1,5 @@
1
- #!/System/Index/bin/ruby -w
2
- # Encoding: ISO-8859-1
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
3
  # frozen_string_literal: true
4
4
  # =========================================================================== #
5
5
  class Mountpoints
@@ -7,6 +7,11 @@ class Mountpoints
7
7
  # ========================================================================= #
8
8
  # === Mountpoints::VERSION
9
9
  # ========================================================================= #
10
- VERSION = '1.0.13'
10
+ VERSION = '1.2.3'
11
+
12
+ # ========================================================================= #
13
+ # === Mountpoints::LAST_UPDATE
14
+ # ========================================================================= #
15
+ LAST_UPDATE = '15.05.2022'
11
16
 
12
17
  end
data/lib/mountpoints.rb CHANGED
@@ -1 +1 @@
1
- require 'mountpoints/mountpoints.rb'
1
+ require 'mountpoints/class/mountpoints.rb'
data/mountpoints.gemspec CHANGED
@@ -2,6 +2,7 @@
2
2
  # Gemspec for Project Mountpoints.
3
3
  # =========================================================================== #
4
4
  require 'mountpoints/version/version.rb'
5
+ require 'roebe/toplevel_methods/misc.rb'
5
6
 
6
7
  Gem::Specification.new { |s|
7
8
 
@@ -11,42 +12,36 @@ Gem::Specification.new { |s|
11
12
 
12
13
  DESCRIPTION = <<-EOF
13
14
 
14
- This class will give you back all mountpoints on a Linux
15
- System. Please do note that this works only via "fdisk",
16
- and even then not always. It was mostly a "throw-away"
17
- gem that I can use, rather than having to parse the
18
- output of "fdisk -l".
15
+ This class will yield to the user the information about all
16
+ mountpoints on a Linux System. It may also work on Windows,
17
+ by making use of "wmic".
19
18
 
20
- Also do note that we are only interested in external
21
- devices that are mounted that way, NOT other
22
- mountpoints.
19
+ Please do note that on Linux this works only via "fdisk",
20
+ and even then not always. This gem was initially started
21
+ as a "throw-away" gem that can be used quickly, rather
22
+ than having to parse the output of "fdisk -l" manually
23
+ (or by eyes only).
23
24
 
24
- To use this in Ruby, do:
25
+ Also do note that we are only interested in external devices
26
+ that are mounted that way, NOT other mountpoints. The
27
+ reason for this is because this gem here serves as a
28
+ foundation for backing up data onto external USB devices.
25
29
 
26
- require 'mountpoints'
27
- Mountpoints.show
28
-
29
- If you have specific suggestions to make this gem more
30
- useful for others, please drop me an email at:
31
-
32
- shevegen@gmail.com
33
-
34
- Thank you.
30
+ For more information pertaining to this gem have a look
31
+ at the official homepage of this gem.
35
32
 
36
33
  EOF
34
+
37
35
  s.summary = DESCRIPTION
38
36
  s.description = DESCRIPTION
39
-
40
- s.extra_rdoc_files = %w()
41
-
42
- s.authors = ['Robert A. Heiler']
43
- s.email = 'shevegen@gmail.com'
44
- s.files = Dir['**/*']
45
- s.files << 'USAGE.md'
46
- s.license = 'GPL-2.0'
47
- s.homepage = 'http://rubygems.org/gems/mountpoints'
48
-
49
- s.required_ruby_version = '>= '+RUBY_VERSION
37
+
38
+ s.authors = ['Robert A. Heiler']
39
+ s.email = Roebe.email?
40
+ s.files = Dir['**/*']
41
+ s.license = 'GPL-2.0'
42
+ s.homepage = 'https://rubygems.org/gems/mountpoints'
43
+
44
+ s.required_ruby_version = '>= '+Roebe.third_most_stable_version_of_ruby
50
45
  s.required_rubygems_version = '>= '+Gem::VERSION
51
46
  s.rubygems_version = '>= '+Gem::VERSION
52
47
 
@@ -1,4 +1,7 @@
1
- require 'pp'
2
1
  require 'mountpoints'
3
2
 
4
- pp Mountpoints[]
3
+ alias e puts
4
+
5
+ e '='*80
6
+ pp Mountpoints[]
7
+ e '='*80
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mountpoints
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.13
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert A. Heiler
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-03 00:00:00.000000000 Z
11
+ date: 2022-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colours
@@ -40,44 +40,44 @@ dependencies:
40
40
  version: '0'
41
41
  description: |2+
42
42
 
43
- This class will give you back all mountpoints on a Linux
44
- System. Please do note that this works only via "fdisk",
45
- and even then not always. It was mostly a "throw-away"
46
- gem that I can use, rather than having to parse the
47
- output of "fdisk -l".
43
+ This class will yield to the user the information about all
44
+ mountpoints on a Linux System. It may also work on Windows,
45
+ by making use of "wmic".
48
46
 
49
- Also do note that we are only interested in external
50
- devices that are mounted that way, NOT other
51
- mountpoints.
47
+ Please do note that on Linux this works only via "fdisk",
48
+ and even then not always. This gem was initially started
49
+ as a "throw-away" gem that can be used quickly, rather
50
+ than having to parse the output of "fdisk -l" manually
51
+ (or by eyes only).
52
52
 
53
- To use this in Ruby, do:
53
+ Also do note that we are only interested in external devices
54
+ that are mounted that way, NOT other mountpoints. The
55
+ reason for this is because this gem here serves as a
56
+ foundation for backing up data onto external USB devices.
54
57
 
55
- require 'mountpoints'
56
- Mountpoints.show
58
+ For more information pertaining to this gem have a look
59
+ at the official homepage of this gem.
57
60
 
58
- If you have specific suggestions to make this gem more
59
- useful for others, please drop me an email at:
60
-
61
- shevegen@gmail.com
62
-
63
- Thank you.
64
-
65
- email: shevegen@gmail.com
61
+ email: shevy@inbox.lt
66
62
  executables: []
67
63
  extensions: []
68
64
  extra_rdoc_files: []
69
65
  files:
70
- - USAGE.md
66
+ - README.md
67
+ - bin/mountpoints
68
+ - doc/README.gen
71
69
  - lib/mountpoints.rb
72
- - lib/mountpoints/mountpoints.rb
70
+ - lib/mountpoints/class/mountpoints.rb
71
+ - lib/mountpoints/constants/constants.rb
72
+ - lib/mountpoints/toplevel_methods/toplevel_methods.rb
73
73
  - lib/mountpoints/version/version.rb
74
74
  - mountpoints.gemspec
75
75
  - test/testing_mountpoints.rb
76
- homepage: http://rubygems.org/gems/mountpoints
76
+ homepage: https://rubygems.org/gems/mountpoints
77
77
  licenses:
78
78
  - GPL-2.0
79
79
  metadata: {}
80
- post_install_message:
80
+ post_install_message:
81
81
  rdoc_options: []
82
82
  require_paths:
83
83
  - lib
@@ -85,21 +85,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
- version: 2.6.3
88
+ version: 2.5.8
89
89
  required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  requirements:
91
91
  - - ">="
92
92
  - !ruby/object:Gem::Version
93
- version: 3.0.3
93
+ version: 3.3.13
94
94
  requirements: []
95
- rubygems_version: 3.0.3
96
- signing_key:
95
+ rubygems_version: 3.3.13
96
+ signing_key:
97
97
  specification_version: 4
98
- summary: 'This class will give you back all mountpoints on a Linux System. Please
99
- do note that this works only via "fdisk", and even then not always. It was mostly
100
- a "throw-away" gem that I can use, rather than having to parse the output of "fdisk
101
- -l". Also do note that we are only interested in external devices that are mounted
102
- that way, NOT other mountpoints. To use this in Ruby, do: require ''mountpoints''
103
- Mountpoints.show If you have specific suggestions to make this gem more useful
104
- for others, please drop me an email at: shevegen@gmail.com Thank you.'
98
+ summary: This class will yield to the user the information about all mountpoints on
99
+ a Linux System. It may also work on Windows, by making use of "wmic". Please do
100
+ note that on Linux this works only via "fdisk", and even then not always. This gem
101
+ was initially started as a "throw-away" gem that can be used quickly, rather than
102
+ having to parse the output of "fdisk -l" manually (or by eyes only). Also do note
103
+ that we are only interested in external devices that are mounted that way, NOT other
104
+ mountpoints. The reason for this is because this gem here serves as a foundation
105
+ for backing up data onto external USB devices. For more information pertaining
106
+ to this gem have a look at the official homepage of this gem.
105
107
  test_files: []
108
+ ...
data/USAGE.md DELETED
@@ -1,14 +0,0 @@
1
- = Usage of this Library
2
-
3
- == Requiring it
4
-
5
- require 'mountpoints'
6
-
7
- == Using it in a project
8
-
9
- _ = Mountpoints.new("science_news")
10
- _.run
11
-
12
- or
13
-
14
- Mountpoints.show
@@ -1,251 +0,0 @@
1
- #!/System/Index/bin/ruby -w
2
- # Encoding: ISO-8859-1
3
- # frozen_string_literal: true
4
- # =========================================================================== #
5
- # === Mountpoints
6
- #
7
- # This class will scan for all mounted USB-devices first. Then it will
8
- # try to find a specific entry, if you give an argument to .find().
9
- #
10
- # Arguments to find() could be:
11
- #
12
- # '*'
13
- #
14
- # The above will return an array of all found entries.
15
- #
16
- # We may also store the target device in attr_reader :mounted_here
17
- #
18
- # Additionally, this class may use colours to provide easier to
19
- # read information.
20
- #
21
- # Usage examples:
22
- # Mountpoints.new
23
- # Mountpoints.show
24
- # Mountpoints.is_any_mountpoint_available?
25
- # =========================================================================== #
26
- # require 'mountpoints'
27
- # =========================================================================== #
28
- begin
29
- require 'colours'
30
- rescue LoadError; end
31
- require 'opn'
32
- require 'mountpoints/version/version.rb'
33
-
34
- class Mountpoints # === Mountpoints.new
35
-
36
- include Colours
37
-
38
- N = "\n"
39
-
40
- # ========================================================================= #
41
- # === LJUST
42
- # ========================================================================= #
43
- LJUST = 15
44
-
45
- # ========================================================================= #
46
- # === DF_COMMAND
47
- # ========================================================================= #
48
- DF_COMMAND = 'df -T -ah'
49
-
50
- # ========================================================================= #
51
- # === FDISK_COMMAND
52
- # ========================================================================= #
53
- FDISK_COMMAND = 'fdisk -l'
54
-
55
- # ========================================================================= #
56
- # === DEBUG
57
- # ========================================================================= #
58
- DEBUG = false # If true then we will debug.
59
-
60
- # ========================================================================= #
61
- # === initialize
62
- #
63
- # If the first argument is :be_extra_verbose then we will show more
64
- # information.
65
- # ========================================================================= #
66
- def initialize(
67
- run_already = true
68
- )
69
- reset
70
- case run_already
71
- when :be_extra_verbose
72
- @be_extra_verbose = true
73
- run_already = true
74
- when :normal_verbosity # Simply pass through here.
75
- end
76
- run if run_already
77
- end
78
-
79
- # ========================================================================= #
80
- # === reset
81
- # ========================================================================= #
82
- def reset
83
- @be_extra_verbose = false
84
- @command_to_run = DF_COMMAND # This command will be run.
85
- end
86
-
87
- # ========================================================================= #
88
- # === set_result
89
- # ========================================================================= #
90
- def set_result(i)
91
- if i.is_a? String
92
- i << '/' unless i.end_with? '/'
93
- elsif i.is_a? Array
94
- # ===================================================================== #
95
- # Do not flatten here as we may have more than one Array-entry.
96
- # ===================================================================== #
97
- i.map! {|entry|
98
- entry[0] = rds(entry.first+'/')
99
- entry
100
- } # We want directories to end in a '/'.
101
- end
102
- if i.is_a? Array
103
- i.sort_by! {|entry| entry }
104
- end
105
- @result = i # Will include trailing /.
106
- determine_mountpoints
107
- end
108
-
109
- # ========================================================================= #
110
- # === rds
111
- # ========================================================================= #
112
- def rds(i)
113
- i.squeeze('/')
114
- end
115
-
116
- # ========================================================================= #
117
- # === determine_mountpoints
118
- #
119
- # The @array_mountpoints will keep all directory-names with a trailing
120
- # '/'. In other words, the mountpoints will be stored there.
121
- # ========================================================================= #
122
- def determine_mountpoints
123
- @array_mountpoints = @result.map {|entry| entry.first }
124
- end
125
-
126
- # ========================================================================= #
127
- # === determine_result
128
- #
129
- # This method will run the df-command.
130
- # ========================================================================= #
131
- def determine_result
132
- if debug?
133
- e "Now running this command: #{sfancy(@command_to_run)}"
134
- end
135
- @result = `#{@command_to_run}`.split(N) # This will keep the main result.
136
- _ = @result.reject {|entry| !entry.include? '/Mount' }.
137
- reject {|entry| !entry.include? 'USB' }
138
- # ======================================================================= #
139
- # At this point, we have only the entries that have /Mount as part
140
- # of their name.
141
- # ======================================================================= #
142
- _.map! {|entry|
143
- splitted = entry.split(' ')
144
- # filesize =
145
- entry = [ splitted[-1], splitted.first, splitted[2] ]
146
- }
147
- set_result _ # Now contains the mountpoints here.
148
- end
149
-
150
- # ========================================================================= #
151
- # === report_result
152
- # ========================================================================= #
153
- def report_result
154
- if @be_extra_verbose
155
- if result?.empty?
156
- opn; e 'We did not find any mount point. We conclude that '\
157
- 'no USB device is mounted.'
158
- else
159
- opn; e 'We did find these mount points:'
160
- e
161
- result?.each {|line|
162
- filesize = line[2]
163
- name_of_device = line[1]
164
- mounted_here = line[0]
165
- efancy ' '+mounted_here.ljust(LJUST)+' '+
166
- swarn(name_of_device)+' '+
167
- '('+Colours.green(filesize)+')'
168
- }
169
- e
170
- end
171
- else # else we report "normally.
172
- e result?.join(N)
173
- end
174
- end; alias report_colourized_result report_result # Not sure what to do with this here.
175
-
176
- # ========================================================================= #
177
- # === result?
178
- # ========================================================================= #
179
- def result?
180
- @result
181
- end; alias result result? # === result
182
-
183
- # ========================================================================= #
184
- # === debug?
185
- # ========================================================================= #
186
- def debug?
187
- DEBUG
188
- end
189
-
190
- # ========================================================================= #
191
- # === array_mountpoints?
192
- # ========================================================================= #
193
- def array_mountpoints? # This should always be an Array.
194
- @array_mountpoints
195
- end; alias array_mountpoints array_mountpoints? # === array_mountpoints
196
-
197
- # ========================================================================= #
198
- # === run (run tag)
199
- # ========================================================================= #
200
- def run
201
- determine_result
202
- end
203
-
204
- # ========================================================================= #
205
- # === Mountpoints.report
206
- # ========================================================================= #
207
- def self.report
208
- Mountpoints[:be_extra_verbose]
209
- end
210
-
211
- # ========================================================================= #
212
- # === Mountpoints[]
213
- #
214
- # This method will return an array such as:
215
- # ["/Mount/USB1/"]
216
- #
217
- # In other words, it will be a silent result.
218
- #
219
- # Mountpoints[]
220
- # Mountpoints[:be_extra_verbose]
221
- # ========================================================================= #
222
- def self.[](be_extra_verbose = :normal_verbosity)
223
- if be_extra_verbose == :be_extra_verbose
224
- _ = Mountpoints.new(be_extra_verbose)
225
- _.report_result
226
- else
227
- Mountpoints.new(be_extra_verbose).array_mountpoints
228
- end
229
- end
230
-
231
- # ========================================================================= #
232
- # === Mountpoints.is_any_mountpoint_available?
233
- # ========================================================================= #
234
- def self.is_any_mountpoint_available?
235
- !Mountpoints.new(:be_quiet).array_mountpoints.empty?
236
- end
237
-
238
- # ========================================================================= #
239
- # === Mountpoints.show
240
- # ========================================================================= #
241
- def self.show
242
- Mountpoints.new :be_extra_verbose
243
- end
244
-
245
- end
246
-
247
- if __FILE__ == $PROGRAM_NAME
248
- _ = Mountpoints.new :be_extra_verbose
249
- _.report_result
250
- # p _.result?
251
- end # mountpoints