recls-ruby 2.6.4
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 +7 -0
- data/LICENSE +31 -0
- data/README.md +2 -0
- data/examples/show_hidden_files.rb +15 -0
- data/examples/show_readonly_files.rb +14 -0
- data/lib/recls.rb +41 -0
- data/lib/recls/entry.rb +328 -0
- data/lib/recls/filesearch.rb +251 -0
- data/lib/recls/flags.rb +77 -0
- data/lib/recls/foreach.rb +103 -0
- data/lib/recls/recls.rb +113 -0
- data/lib/recls/stat.rb +104 -0
- data/lib/recls/util.rb +73 -0
- data/lib/recls/version.rb +53 -0
- data/lib/recls/ximpl/os.rb +85 -0
- data/lib/recls/ximpl/unix.rb +81 -0
- data/lib/recls/ximpl/util.rb +650 -0
- data/lib/recls/ximpl/windows.rb +197 -0
- data/test/scratch/test_display_parts.rb +40 -0
- data/test/scratch/test_entry.rb +81 -0
- data/test/scratch/test_foreach.rb +41 -0
- data/test/scratch/test_show_dev_and_ino.rb +13 -0
- data/test/scratch/test_show_hidden.rb +30 -0
- data/test/unit/tc_recls_entries.rb +55 -0
- data/test/unit/tc_recls_entry.rb +40 -0
- data/test/unit/tc_recls_file_search.rb +68 -0
- data/test/unit/tc_recls_module.rb +78 -0
- data/test/unit/tc_recls_util.rb +159 -0
- data/test/unit/tc_recls_ximpl_util.rb +908 -0
- data/test/unit/ts_all.rb +20 -0
- metadata +73 -0
@@ -0,0 +1,251 @@
|
|
1
|
+
# ######################################################################### #
|
2
|
+
# File: recls/filesearch.rb
|
3
|
+
#
|
4
|
+
# Purpose: Defines the Recls::FileSearch class for the recls.Ruby library.
|
5
|
+
#
|
6
|
+
# Created: 24th July 2012
|
7
|
+
# Updated: 29th December 2015
|
8
|
+
#
|
9
|
+
# Author: Matthew Wilson
|
10
|
+
#
|
11
|
+
# Copyright (c) 2012-2015, Matthew Wilson and Synesis Software
|
12
|
+
# All rights reserved.
|
13
|
+
#
|
14
|
+
# Redistribution and use in source and binary forms, with or without
|
15
|
+
# modification, are permitted provided that the following conditions are met:
|
16
|
+
#
|
17
|
+
# * Redistributions of source code must retain the above copyright notice,
|
18
|
+
# this list of conditions and the following disclaimer.
|
19
|
+
#
|
20
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
21
|
+
# this list of conditions and the following disclaimer in the documentation
|
22
|
+
# and/or other materials provided with the distribution.
|
23
|
+
#
|
24
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
25
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
26
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
27
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
28
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
29
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
30
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
31
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
32
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
33
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
34
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
35
|
+
#
|
36
|
+
# ######################################################################### #
|
37
|
+
|
38
|
+
|
39
|
+
require 'recls/entry'
|
40
|
+
require 'recls/flags'
|
41
|
+
require 'recls/ximpl/os'
|
42
|
+
|
43
|
+
module Recls
|
44
|
+
|
45
|
+
class FileSearch
|
46
|
+
|
47
|
+
include Enumerable
|
48
|
+
|
49
|
+
def initialize(search_root, patterns, flags)
|
50
|
+
|
51
|
+
if not search_root
|
52
|
+
search_root = '.'
|
53
|
+
else
|
54
|
+
search_root = search_root.to_s
|
55
|
+
end
|
56
|
+
search_root = '.' if search_root.empty?
|
57
|
+
search_root = File.expand_path(search_root) if '~' == search_root[0]
|
58
|
+
|
59
|
+
case patterns
|
60
|
+
when NilClass
|
61
|
+
patterns = []
|
62
|
+
when String
|
63
|
+
patterns = patterns.split(/[|#{Recls::Ximpl::OS::PATH_SEPARATOR}]/)
|
64
|
+
when Array
|
65
|
+
else
|
66
|
+
patterns = patterns.to_a
|
67
|
+
end
|
68
|
+
|
69
|
+
patterns = [ Recls::WILDCARDS_ALL ] if patterns.empty?
|
70
|
+
|
71
|
+
if(0 == (Recls::TYPEMASK & flags))
|
72
|
+
flags |= Recls::FILES
|
73
|
+
end
|
74
|
+
|
75
|
+
# now de-dup the patterns, to avoid duplicates in search
|
76
|
+
patterns = patterns.flatten
|
77
|
+
patterns = patterns.uniq
|
78
|
+
|
79
|
+
@search_root = search_root
|
80
|
+
@patterns = patterns
|
81
|
+
@flags = flags
|
82
|
+
end
|
83
|
+
|
84
|
+
attr_reader :search_root
|
85
|
+
attr_reader :patterns
|
86
|
+
attr_reader :flags
|
87
|
+
|
88
|
+
def each(&blk)
|
89
|
+
|
90
|
+
search_root = @search_root
|
91
|
+
search_root = Recls::Ximpl::absolute_path search_root
|
92
|
+
|
93
|
+
search_root = search_root.gsub(/\\/, '/') if Recls::Ximpl::OS::OS_IS_WINDOWS
|
94
|
+
|
95
|
+
# set the (type part of the) flags to zero if we want
|
96
|
+
# everything, to facilitate later optimisation
|
97
|
+
|
98
|
+
flags = @flags
|
99
|
+
|
100
|
+
if(Recls::Ximpl::OS::OS_IS_WINDOWS)
|
101
|
+
mask = (Recls::FILES | Recls::DIRECTORIES)
|
102
|
+
else
|
103
|
+
mask = (Recls::FILES | Recls::DIRECTORIES | Recls::LINKS | Recls::DEVICES)
|
104
|
+
end
|
105
|
+
|
106
|
+
if(mask == (mask & flags))
|
107
|
+
flags = flags & ~Recls::TYPEMASK
|
108
|
+
end
|
109
|
+
|
110
|
+
patterns = @patterns
|
111
|
+
|
112
|
+
patterns = patterns.map do |pattern|
|
113
|
+
|
114
|
+
pattern = pattern.gsub(/\./, '\\.')
|
115
|
+
pattern = pattern.gsub(/\?/, '.')
|
116
|
+
pattern = pattern.gsub(/\*/, '.*')
|
117
|
+
pattern
|
118
|
+
end
|
119
|
+
|
120
|
+
search_dir = search_root
|
121
|
+
search_root = Recls::Ximpl::Util.append_trailing_slash search_root
|
122
|
+
|
123
|
+
FileSearch::search_directory_(search_root, search_dir, patterns, flags, &blk)
|
124
|
+
end
|
125
|
+
|
126
|
+
private
|
127
|
+
def FileSearch::is_dots(name)
|
128
|
+
|
129
|
+
case name
|
130
|
+
when '.', '..'
|
131
|
+
true
|
132
|
+
else
|
133
|
+
false
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def FileSearch::stat_or_nil_(path, flags)
|
138
|
+
|
139
|
+
begin
|
140
|
+
Recls::Ximpl::FileStat.stat path
|
141
|
+
rescue Errno::ENOENT => x
|
142
|
+
nil
|
143
|
+
rescue SystemCallError => x
|
144
|
+
# TODO this should be filtered up and/or logged
|
145
|
+
|
146
|
+
if(0 != (STOP_ON_ACCESS_FAILURE & flags))
|
147
|
+
raise
|
148
|
+
end
|
149
|
+
|
150
|
+
nil
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
# searches all entries - files, directories, links, devices
|
155
|
+
# - that match the given (patterns) in the given directory
|
156
|
+
# (dir) according to the given (flags), invoking the given
|
157
|
+
# block (blk). The search directory (search_root) is passed in
|
158
|
+
# order to allow calculation of search_relative_path in the
|
159
|
+
# entry.
|
160
|
+
|
161
|
+
def FileSearch::search_directory_(search_root, dir, patterns, flags, &blk)
|
162
|
+
|
163
|
+
# array of FileStat instances
|
164
|
+
entries = []
|
165
|
+
|
166
|
+
patterns.each do |pattern|
|
167
|
+
|
168
|
+
Recls::Ximpl::dir_entries_maybe(dir, flags).each do |name|
|
169
|
+
|
170
|
+
next if is_dots(name)
|
171
|
+
|
172
|
+
if not name =~ /^#{pattern}$/
|
173
|
+
next
|
174
|
+
end
|
175
|
+
|
176
|
+
entry_path = File::join(dir, name)
|
177
|
+
|
178
|
+
fs = stat_or_nil_(entry_path, flags)
|
179
|
+
|
180
|
+
entries << fs
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
# array of FileStat instances
|
185
|
+
subdirectories = []
|
186
|
+
|
187
|
+
Recls::Ximpl::dir_entries_maybe(dir, flags).each do |subdir|
|
188
|
+
|
189
|
+
next if is_dots(subdir)
|
190
|
+
|
191
|
+
subdir_path = File::join(dir, subdir)
|
192
|
+
|
193
|
+
fs = stat_or_nil_(subdir_path, flags)
|
194
|
+
|
195
|
+
next if not fs
|
196
|
+
|
197
|
+
next unless fs.directory?
|
198
|
+
|
199
|
+
subdirectories << fs
|
200
|
+
end
|
201
|
+
|
202
|
+
|
203
|
+
# now filter the file-stat instances and send each
|
204
|
+
# remaining to the block in Entry instance
|
205
|
+
entries.each do |fs|
|
206
|
+
|
207
|
+
next if not fs
|
208
|
+
|
209
|
+
if(0 == (Recls::SHOW_HIDDEN & flags))
|
210
|
+
if fs.hidden?
|
211
|
+
next
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
match = false
|
216
|
+
|
217
|
+
match ||= (0 != (Recls::FILES & flags) && fs.file?)
|
218
|
+
match ||= (0 != (Recls::DIRECTORIES & flags) && fs.directory?)
|
219
|
+
match ||= (0 != (Recls::DEVICES & flags) && fs.blockdev?)
|
220
|
+
|
221
|
+
next unless match
|
222
|
+
|
223
|
+
blk.call Recls::Entry.new(fs.path, fs, search_root, flags)
|
224
|
+
end
|
225
|
+
|
226
|
+
# sub-directories
|
227
|
+
|
228
|
+
return unless (0 != (Recls::RECURSIVE & flags))
|
229
|
+
|
230
|
+
subdirectories.each do |fs|
|
231
|
+
|
232
|
+
if(0 == (Recls::SHOW_HIDDEN & flags))
|
233
|
+
if fs.hidden?
|
234
|
+
next
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
if(0 == (Recls::SEARCH_THROUGH_LINKS & flags))
|
239
|
+
if File.symlink? fs.path
|
240
|
+
next
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
FileSearch::search_directory_(search_root, fs.path, patterns, flags, &blk)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
# ############################## end of file ############################# #
|
251
|
+
|
data/lib/recls/flags.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# ######################################################################### #
|
2
|
+
# File: recls/flags.rb
|
3
|
+
#
|
4
|
+
# Purpose: Defines the Recls::Flags module for the recls.Ruby library.
|
5
|
+
#
|
6
|
+
# Created: 24th July 2012
|
7
|
+
# Updated: 27th August 2015
|
8
|
+
#
|
9
|
+
# Author: Matthew Wilson
|
10
|
+
#
|
11
|
+
# Copyright (c) 2012-2015, Matthew Wilson and Synesis Software
|
12
|
+
# All rights reserved.
|
13
|
+
#
|
14
|
+
# Redistribution and use in source and binary forms, with or without
|
15
|
+
# modification, are permitted provided that the following conditions are met:
|
16
|
+
#
|
17
|
+
# * Redistributions of source code must retain the above copyright notice,
|
18
|
+
# this list of conditions and the following disclaimer.
|
19
|
+
#
|
20
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
21
|
+
# this list of conditions and the following disclaimer in the documentation
|
22
|
+
# and/or other materials provided with the distribution.
|
23
|
+
#
|
24
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
25
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
26
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
27
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
28
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
29
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
30
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
31
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
32
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
33
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
34
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
35
|
+
#
|
36
|
+
# ######################################################################### #
|
37
|
+
|
38
|
+
|
39
|
+
module Recls
|
40
|
+
|
41
|
+
# Specifies that files are to be listed
|
42
|
+
FILES = 0x00000001
|
43
|
+
# Specifies that directories are to be listed
|
44
|
+
DIRECTORIES = 0x00000002
|
45
|
+
# Specifies that links are to be listed (and not followed)
|
46
|
+
LINKS = 0x00000004
|
47
|
+
# Specifies that devices are to be listed
|
48
|
+
DEVICES = 0x00000008
|
49
|
+
TYPEMASK = 0x000000ff
|
50
|
+
|
51
|
+
# Specifies that hidden items are to be shown and hidden directories are
|
52
|
+
# to be searched
|
53
|
+
SHOW_HIDDEN = 0x00000100
|
54
|
+
|
55
|
+
DIR_PROGRESS = 0x00001000
|
56
|
+
# Causes search to terminate if a directory cannot be entered or an
|
57
|
+
# entry's information cannot be stat()'d
|
58
|
+
STOP_ON_ACCESS_FAILURE = 0x00002000
|
59
|
+
LINK_COUNT = 0000004000
|
60
|
+
NODE_INDEX = 0x00008000
|
61
|
+
|
62
|
+
RECURSIVE = 0x00010000
|
63
|
+
private
|
64
|
+
NO_SEARCH_LINKS = 0x00020000
|
65
|
+
public
|
66
|
+
DIRECTORY_PARTS = 0x00040000
|
67
|
+
DETAILS_LATER = 0x00080000
|
68
|
+
|
69
|
+
MARK_DIRECTORIES = 0x00200000
|
70
|
+
|
71
|
+
# Causes sub-directories that are links to be searched; default is not
|
72
|
+
# to search through links
|
73
|
+
SEARCH_THROUGH_LINKS = 0x00100000
|
74
|
+
end
|
75
|
+
|
76
|
+
# ############################## end of file ############################# #
|
77
|
+
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# ######################################################################### #
|
2
|
+
# File: recls/foreach.rb
|
3
|
+
#
|
4
|
+
# Purpose: Definition of Recls::foreach() utility function
|
5
|
+
#
|
6
|
+
# Created: 22nd October 2014
|
7
|
+
# Updated: 27th August 2015
|
8
|
+
#
|
9
|
+
# Author: Matthew Wilson
|
10
|
+
#
|
11
|
+
# Copyright (c) 2012-2015, Matthew Wilson and Synesis Software
|
12
|
+
# All rights reserved.
|
13
|
+
#
|
14
|
+
# Redistribution and use in source and binary forms, with or without
|
15
|
+
# modification, are permitted provided that the following conditions are met:
|
16
|
+
#
|
17
|
+
# * Redistributions of source code must retain the above copyright notice,
|
18
|
+
# this list of conditions and the following disclaimer.
|
19
|
+
#
|
20
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
21
|
+
# this list of conditions and the following disclaimer in the documentation
|
22
|
+
# and/or other materials provided with the distribution.
|
23
|
+
#
|
24
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
25
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
26
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
27
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
28
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
29
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
30
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
31
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
32
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
33
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
34
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
35
|
+
#
|
36
|
+
# ######################################################################### #
|
37
|
+
|
38
|
+
|
39
|
+
require 'recls/filesearch'
|
40
|
+
|
41
|
+
module Recls
|
42
|
+
|
43
|
+
private
|
44
|
+
class FileSearchLineEnumerator
|
45
|
+
|
46
|
+
include Enumerable
|
47
|
+
|
48
|
+
def initialize(fs)
|
49
|
+
|
50
|
+
@fs = fs
|
51
|
+
end
|
52
|
+
|
53
|
+
def each(&block)
|
54
|
+
|
55
|
+
@fs.each do |fe|
|
56
|
+
|
57
|
+
IO::readlines(fe).each_with_index do |line, index|
|
58
|
+
|
59
|
+
case block.arity
|
60
|
+
when 1
|
61
|
+
yield line
|
62
|
+
when 2
|
63
|
+
yield line, index
|
64
|
+
when 3
|
65
|
+
yield line, index, fe
|
66
|
+
else
|
67
|
+
raise ArgumentError, "block must take 1, 2, or 3 parameters - #{block.arity} given. (Perhaps you have applied each_with_index, which cannot be done to Recls.foreach)"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
public
|
74
|
+
|
75
|
+
def self.foreach(*args, &block)
|
76
|
+
|
77
|
+
fs = nil
|
78
|
+
|
79
|
+
case args.length
|
80
|
+
when 1
|
81
|
+
raise ArgumentError "Single argument must be of type #{Recls::FileSearch}" unless args[0].kind_of? Recls::FileSearch
|
82
|
+
|
83
|
+
fs = args[0]
|
84
|
+
when 3
|
85
|
+
fs = Recls::FileSearch.new(args[0], args[1], args[2])
|
86
|
+
else
|
87
|
+
raise ArgumentError "Function requires single argument (#{Recls::FileSearch}) or three arguments (directory, patterns, flags)"
|
88
|
+
end
|
89
|
+
|
90
|
+
if block_given?
|
91
|
+
|
92
|
+
FileSearchLineEnumerator.new(fs).each(block)
|
93
|
+
|
94
|
+
return nil
|
95
|
+
else
|
96
|
+
|
97
|
+
return FileSearchLineEnumerator.new(fs)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# ############################## end of file ############################# #
|
103
|
+
|
data/lib/recls/recls.rb
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
# ######################################################################### #
|
2
|
+
# File: recls/recls.rb
|
3
|
+
#
|
4
|
+
# Purpose: Main source file for recls library
|
5
|
+
#
|
6
|
+
# Created: 19th July 2012
|
7
|
+
# Updated: 29th December 2015
|
8
|
+
#
|
9
|
+
# Author: Matthew Wilson
|
10
|
+
#
|
11
|
+
# Copyright (c) 2012-2015, Matthew Wilson and Synesis Software
|
12
|
+
# All rights reserved.
|
13
|
+
#
|
14
|
+
# Redistribution and use in source and binary forms, with or without
|
15
|
+
# modification, are permitted provided that the following conditions are met:
|
16
|
+
#
|
17
|
+
# * Redistributions of source code must retain the above copyright notice,
|
18
|
+
# this list of conditions and the following disclaimer.
|
19
|
+
#
|
20
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
21
|
+
# this list of conditions and the following disclaimer in the documentation
|
22
|
+
# and/or other materials provided with the distribution.
|
23
|
+
#
|
24
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
25
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
26
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
27
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
28
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
29
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
30
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
31
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
32
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
33
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
34
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
35
|
+
#
|
36
|
+
# ######################################################################### #
|
37
|
+
|
38
|
+
|
39
|
+
require 'recls/version'
|
40
|
+
|
41
|
+
require 'recls/filesearch'
|
42
|
+
require 'recls/foreach'
|
43
|
+
require 'recls/stat'
|
44
|
+
require 'recls/util'
|
45
|
+
require 'recls/ximpl/os'
|
46
|
+
|
47
|
+
module Recls
|
48
|
+
|
49
|
+
# Represents the "all" wildcards string for the ambient operating
|
50
|
+
# system
|
51
|
+
WILDCARDS_ALL = Recls::Ximpl::OS::WILDCARDS_ALL
|
52
|
+
|
53
|
+
PATH_NAME_SEPARATOR = Recls::Ximpl::OS::PATH_NAME_SEPARATOR
|
54
|
+
|
55
|
+
PATH_SEPARATOR = Recls::Ximpl::OS::PATH_SEPARATOR
|
56
|
+
end
|
57
|
+
|
58
|
+
# ######################################################################### #
|
59
|
+
# Obsolete symbols
|
60
|
+
|
61
|
+
if not defined? RECLS_NO_OBSOLETE
|
62
|
+
|
63
|
+
module Recls
|
64
|
+
|
65
|
+
def self.pathNameSeparator
|
66
|
+
PATH_NAME_SEPARATOR
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.pathSeparator
|
70
|
+
PATH_SEPARATOR
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.wildcardsAll
|
74
|
+
WILDCARDS_ALL
|
75
|
+
end
|
76
|
+
|
77
|
+
class FileSearch
|
78
|
+
|
79
|
+
alias_method :searchRoot, :search_root
|
80
|
+
alias_method :pattern, :patterns
|
81
|
+
end
|
82
|
+
|
83
|
+
class Entry
|
84
|
+
|
85
|
+
alias_method :uncDrive, :drive
|
86
|
+
alias_method :directoryPath, :directory_path
|
87
|
+
alias_method :directoryParts, :directory_parts
|
88
|
+
alias_method :file, :file_full_name
|
89
|
+
alias_method :shortFile, :file_short_name
|
90
|
+
alias_method :fileBaseName, :file_name_only
|
91
|
+
alias_method :fileName, :file_name_only
|
92
|
+
alias_method :fileExt, :file_extension
|
93
|
+
alias_method :searchDirectory, :search_directory
|
94
|
+
alias_method :searchRelativePath, :search_relative_path
|
95
|
+
|
96
|
+
alias_method :isDirectory, :directory?
|
97
|
+
alias_method :isFile, :file?
|
98
|
+
#alias_method :isLink, :link?
|
99
|
+
alias_method :isReadOnly, :readonly?
|
100
|
+
def isUNC
|
101
|
+
|
102
|
+
d = drive
|
103
|
+
|
104
|
+
d and d.size > 2
|
105
|
+
end
|
106
|
+
|
107
|
+
alias_method :creationTime, :modification_time
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# ############################## end of file ############################# #
|
113
|
+
|