stat_file 1.0.19

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1cac1d11cc3b1f2ce17e44e8eb2738c8b461d3cabc8c8582a3d572933db395a3
4
+ data.tar.gz: 297c2a359c301c58a216574dddd4f27c09354dee3f53bd744abc4a01c1ff30ba
5
+ SHA512:
6
+ metadata.gz: a73ad6f879f0331905fd3eb4945de41f373dc5ba5028e106f414a0021f17b46415c43cd3c57f051312c4bd7569814c3a0cd128bea815762ac1705bdeb3b58825
7
+ data.tar.gz: ac2060ef70a496ef060a370a28f403b44f194a9a88505dc7d91a6003038cc9637372e06c99a118162d4968a7f3218a628fcb1f195a2fd28eccd72070e52e024e
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'stat_file/colours.rb'
6
+ # =========================================================================== #
7
+ class StatFile
8
+
9
+ begin
10
+ require 'colours/autogenerated/html_colours_methods.rb'
11
+ rescue LoadError; end
12
+
13
+ begin
14
+ require 'colours/html_colours/html_colours.rb'
15
+ include ::Colours::HtmlColours
16
+ rescue LoadError; end
17
+
18
+ begin
19
+ require 'colours'
20
+ include ::Colours
21
+ rescue LoadError; end
22
+
23
+ # ========================================================================= #
24
+ # === steelblue
25
+ # ========================================================================= #
26
+ def steelblue(i = '')
27
+ ::Colours::HtmlColoursMethods.steelblue(i)
28
+ end
29
+
30
+ # ========================================================================= #
31
+ # === rev
32
+ # ========================================================================= #
33
+ def rev
34
+ ::Colours.rev
35
+ end
36
+
37
+ end
@@ -0,0 +1,273 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === StatFile
6
+ #
7
+ # require 'stat_file/stat_file.rb'
8
+ # =========================================================================== #
9
+ # Bug:
10
+ # The access entry is not completely correct - the number is ok but
11
+ # the rxw--- format is wrong.
12
+ # =========================================================================== #
13
+ class StatFile
14
+
15
+ require 'etc'
16
+
17
+ require 'stat_file/colours.rb'
18
+
19
+ begin
20
+ require 'opn'
21
+ rescue LoadError; end
22
+
23
+ N = "\n" unless defined? N
24
+
25
+ # ========================================================================= #
26
+ # === SHALL_WE_DEBUG
27
+ # ========================================================================= #
28
+ SHALL_WE_DEBUG = false unless defined? SHALL_WE_DEBUG
29
+
30
+ # ========================================================================= #
31
+ # === RED_ON_BLACK
32
+ # ========================================================================= #
33
+ RED_ON_BLACK = "\e[31;48m" unless defined? RED_ON_BLACK
34
+
35
+ # ========================================================================= #
36
+ # === REVERT
37
+ # ========================================================================= #
38
+ REVERT = '\e[0m' unless defined? REVERT
39
+
40
+ # ========================================================================= #
41
+ # === initialize
42
+ # ========================================================================= #
43
+ def initialize(
44
+ this_file,
45
+ be_verbose = true,
46
+ run_already = true
47
+ )
48
+ reset # This must be called before set_be_verbose()
49
+ be_verbose = false if be_verbose == :dont_be_verbose
50
+ set_be_verbose if be_verbose
51
+ set_file(this_file)
52
+ run if run_already
53
+ end
54
+
55
+ # ========================================================================= #
56
+ # === reset (reset tag)
57
+ # ========================================================================= #
58
+ def reset
59
+ # ======================================================================= #
60
+ # === @be_verbose
61
+ # ======================================================================= #
62
+ @be_verbose = false # Default.
63
+ # ======================================================================= #
64
+ # === @debug
65
+ # ======================================================================= #
66
+ @debug = SHALL_WE_DEBUG
67
+ # ======================================================================= #
68
+ # === @padding_left
69
+ # ======================================================================= #
70
+ @padding_left = ' '
71
+ end
72
+
73
+ # ========================================================================= #
74
+ # === file?
75
+ # ========================================================================= #
76
+ def file?
77
+ @file
78
+ end
79
+
80
+ # ========================================================================= #
81
+ # === set_file
82
+ # ========================================================================= #
83
+ def set_file(i, get_rid_of_slashdot = false)
84
+ if get_rid_of_slashdot
85
+ i.delete!('/') if i.include? '/' # Since 06.12.2011 we try to get rid of possible '/' in the string.
86
+ end
87
+ i = i.first if i.is_a? Array
88
+ i = i.to_s.dup
89
+ @file = i
90
+ end
91
+
92
+ # ========================================================================= #
93
+ # === set_be_verbose
94
+ # ========================================================================= #
95
+ def set_be_verbose
96
+ @be_verbose = true
97
+ end
98
+
99
+ # ========================================================================= #
100
+ # === stat_file
101
+ # ========================================================================= #
102
+ def stat_file(f = @file)
103
+ if f.to_s.empty?
104
+ opn; e 'No such file could be found. Perhaps you '
105
+ opn; e 'forgot to pass in a valid filename?'
106
+ end
107
+ if f
108
+ if f.is_a? Array
109
+ f.each { |this_file| stat_file(this_file) }
110
+ else
111
+ @is_symlink = File.symlink?(f) ? true : false
112
+ if @debug
113
+ e "Debugging in stat_file.rb: Is `#{f}` a symlink or not? #{@is_symlink}"
114
+ end
115
+ if is_on_roebe? and !File.exist?(f)
116
+ begin
117
+ require 'beautiful_url'
118
+ f = BeautifulUrl[f]
119
+ f = f.first if f.is_a? Array
120
+ rescue LoadError; end
121
+ end
122
+ string = ' File: `'+f+"`"
123
+ # =================================================================== #
124
+ # If it is a symlink we have to check whether the target exists
125
+ # or not.
126
+ # =================================================================== #
127
+ if @is_symlink
128
+ f = File.readlink(f)
129
+ string << rev+' → `'+f+"`"
130
+ end
131
+ # =================================================================== #
132
+ # Now we can retrieve the information.
133
+ # =================================================================== #
134
+ if File.exist?(f)
135
+ _ = File.stat(f)
136
+ file_type = File.ftype(f)
137
+ case file_type
138
+ when 'directory'
139
+ target_type = 'directory'
140
+ when 'file'
141
+ target_type = 'regular file'
142
+ when 'symlink','link'
143
+ target_type = 'symlink'
144
+ end
145
+ # ================================================================= #
146
+ # Prepend a newline to it. I think it looks better that way.
147
+ # ================================================================= #
148
+ if are_the_colours_available?
149
+ use_this_regex = /`(.+)`/ # See: https://rubular.com/r/EnETP5vkCYgGEB
150
+ string.prepend(rev)
151
+ string.sub!(
152
+ use_this_regex,
153
+ steelblue('\1')
154
+ )
155
+ end
156
+ @result = N+string+N # reset again here.
157
+ @result << "#{rev}#{@padding_left}"+' Size: '+
158
+ (@size = _.size.to_s).to_s+' Blocks: '+_.blocks.to_s+' '+target_type.to_s+N
159
+ @result << @padding_left+
160
+ return_device_string+' Inode: '+_.ino.to_s+N
161
+ begin
162
+ gid = File.stat(f).gid.to_s
163
+ gid_name = Etc.getgrgid(File.stat(f).gid).name # i.e. "root"
164
+ uid = File.stat(f).uid.to_s
165
+ uid_name = Etc.getpwuid(File.stat(f).uid).name # i.e. "root"
166
+ # =============================================================== #
167
+ # Next we will add the access entry. The Access entry may
168
+ # have a leading 0 or 1.
169
+ # =============================================================== #
170
+ access_mode = File.stat(f).mode.to_s(8)[-4,4] # Get the last 4 chars only.
171
+ access_entry = 'Access: ('+access_mode+'/-rwxr-xr-x) Uid: ( '+uid+'/ '+uid_name+') Gid: ( '+gid+'/ '+gid_name+')'
172
+ @result << @padding_left+access_entry+N
173
+ rescue Exception => error; pp error; end
174
+ @result << "#{@padding_left}Created at: #{File.ctime(f)}#{N}"
175
+ @result << "#{@padding_left}Last accessed: #{File.atime(f)}#{N}"
176
+ @result << "#{@padding_left}Last modified: #{File.mtime(f)}#{N}"
177
+ @result << N
178
+ e @result if @be_verbose
179
+ else # Else the file does not exit.
180
+ if be_verbose?
181
+ opn; ewarn "No target file exists at: `#{sfile(f)}"
182
+ # File.readlink(@file)
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
188
+
189
+ # ========================================================================= #
190
+ # === result?
191
+ # ========================================================================= #
192
+ def result?
193
+ @result
194
+ end; alias result result? # === result
195
+ alias text? result? # === text?
196
+
197
+ # ========================================================================= #
198
+ # === be_verbose?
199
+ # ========================================================================= #
200
+ def be_verbose?
201
+ @be_verbose
202
+ end
203
+
204
+ # ========================================================================= #
205
+ # === size?
206
+ # ========================================================================= #
207
+ def size?
208
+ @size
209
+ end; alias size size? # === size()
210
+
211
+ # ========================================================================= #
212
+ # === is_on_roebe?
213
+ # ========================================================================= #
214
+ def is_on_roebe?
215
+ ENV['IS_ROEBE'].to_s == '1'
216
+ end
217
+
218
+ # ========================================================================= #
219
+ # === are_the_colours_available?
220
+ # ========================================================================= #
221
+ def are_the_colours_available?
222
+ Object.const_defined? :Colours
223
+ end
224
+
225
+ # ========================================================================= #
226
+ # === return_device_string
227
+ #
228
+ # This method is assumed to return an entry such as the following one:
229
+ #
230
+ # Device: 801h/2049d
231
+ #
232
+ # Note that this may differ from systemd to non-systemd systems.
233
+ # ========================================================================= #
234
+ def return_device_string
235
+ result = 'Device: '.dup
236
+ # ======================================================================= #
237
+ # First, find out the current device:
238
+ # ======================================================================= #
239
+ base_dir = File.dirname(file?)
240
+ cmd = `df #{base_dir} 2>&1` # The 2>&1 is necessary for windows.
241
+ device_number = cmd.split(N)[1].split(' ')[0]
242
+ # ======================================================================= #
243
+ # device_number now has something like /dev/sda1
244
+ # In order to obtain the major and minor version,
245
+ # we must do this:
246
+ # ======================================================================= #
247
+ cmd = "ls -al #{device_number} 2>&1"
248
+ major_minor = `#{cmd}` # To get major/minor = 8/1
249
+ # ======================================================================= #
250
+ # This may however had fail. We assume that it will fail when it
251
+ # includes the string "by-uuid".
252
+ # ======================================================================= #
253
+ applied_match = major_minor.match(/disk (\d, \d)/)
254
+ if applied_match # Protect against nil values.
255
+ major, minor = applied_match[1].split(',').map(&:strip)
256
+ major_and_minor = "#{major}0#{minor}"
257
+ result << major_and_minor+'h/'+major_and_minor.to_i(16).to_s+'d '
258
+ end
259
+ result
260
+ end
261
+
262
+ # ========================================================================= #
263
+ # === run
264
+ # ========================================================================= #
265
+ def run
266
+ stat_file
267
+ end
268
+
269
+ end
270
+
271
+ if __FILE__ == $PROGRAM_NAME
272
+ StatFile.new(ARGV.first, true)
273
+ end # sfile $SYSBIN/ruby
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ class StatFile
6
+
7
+ # ========================================================================= #
8
+ # === VERSION
9
+ # ========================================================================= #
10
+ VERSION = '1.0.19'
11
+
12
+ # ========================================================================= #
13
+ # === LAST_UPDATE
14
+ # ========================================================================= #
15
+ LAST_UPDATE = '17.01.2024'
16
+
17
+ end
data/lib/stat_file.rb ADDED
@@ -0,0 +1 @@
1
+ require 'stat_file/stat_file.rb'
data/stat_file.gemspec ADDED
@@ -0,0 +1,40 @@
1
+ # =========================================================================== #
2
+ # Gemspec for Project StatFile.
3
+ # =========================================================================== #
4
+ require 'stat_file/version/version.rb'
5
+ require 'roebe'
6
+
7
+ Gem::Specification.new { |s|
8
+
9
+ s.name = 'stat_file'
10
+ s.version = StatFile::VERSION
11
+ s.date = Time.now.strftime('%Y-%m-%d')
12
+
13
+ s.summary = <<-EOF
14
+
15
+ This library is called stat_file. It allows you to
16
+ do basic stat functionality, like the Unix Tool.
17
+
18
+ EOF
19
+
20
+ s.description = <<-EOF
21
+
22
+ This library is called stat_file. It allows you to
23
+ do basic stat functionality, like the Unix Tool.
24
+
25
+ EOF
26
+
27
+ s.authors = ['Robert A. Heiler']
28
+ s.email = Roebe.email?
29
+ s.files = Dir['**/*']
30
+ s.license = 'MIT'
31
+ s.homepage = 'https://rubygems.org/gems/stat_file'
32
+
33
+ s.required_ruby_version = '>= '+RUBY_VERSION
34
+ s.required_rubygems_version = '>= '+Gem::VERSION
35
+ s.rubygems_version = '>= '+Gem::VERSION
36
+
37
+ s.add_dependency 'opn'
38
+ s.add_dependency 'colours'
39
+
40
+ }
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stat_file
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.19
5
+ platform: ruby
6
+ authors:
7
+ - Robert A. Heiler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-01-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: opn
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: colours
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: |2+
42
+
43
+ This library is called stat_file. It allows you to
44
+ do basic stat functionality, like the Unix Tool.
45
+
46
+ email: shevy@inbox.lt
47
+ executables: []
48
+ extensions: []
49
+ extra_rdoc_files: []
50
+ files:
51
+ - lib/stat_file.rb
52
+ - lib/stat_file/colours.rb
53
+ - lib/stat_file/stat_file.rb
54
+ - lib/stat_file/version/version.rb
55
+ - stat_file.gemspec
56
+ homepage: https://rubygems.org/gems/stat_file
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 3.3.0
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 3.5.3
74
+ requirements: []
75
+ rubygems_version: 3.5.3
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: This library is called stat_file. It allows you to do basic stat functionality,
79
+ like the Unix Tool.
80
+ test_files: []
81
+ ...