recls-ruby 2.12.0 → 2.12.0.1
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 +4 -4
- data/LICENSE +27 -24
- data/README.md +242 -1
- data/examples/find_files_and_directories.md +33 -30
- data/examples/find_files_and_directories.recursive.md +255 -254
- data/examples/show_hidden_files.md +4 -1
- data/examples/show_hidden_files.rb +1 -1
- data/examples/show_readonly_files.md +4 -1
- data/examples/show_readonly_files.rb +1 -1
- data/lib/recls/api.rb +76 -73
- data/lib/recls/combine_paths_1.rb +26 -23
- data/lib/recls/combine_paths_2plus.rb +32 -29
- data/lib/recls/entry.rb +277 -273
- data/lib/recls/file_search.rb +194 -193
- data/lib/recls/flags.rb +48 -45
- data/lib/recls/foreach.rb +105 -98
- data/lib/recls/obsolete.rb +85 -79
- data/lib/recls/recls.rb +19 -24
- data/lib/recls/stat.rb +137 -134
- data/lib/recls/util.rb +95 -92
- data/lib/recls/version.rb +22 -17
- data/lib/recls/ximpl/os.rb +49 -48
- data/lib/recls/ximpl/unix.rb +41 -38
- data/lib/recls/ximpl/util.rb +600 -599
- data/lib/recls/ximpl/windows.rb +142 -139
- data/lib/recls.rb +10 -9
- data/test/scratch/test_display_parts.rb +33 -33
- data/test/scratch/test_entry.rb +6 -6
- data/test/scratch/test_files_and_directories.rb +8 -8
- data/test/scratch/test_foreach.rb +10 -10
- data/test/scratch/test_module_function.rb +33 -33
- data/test/scratch/test_pattern_arrays.rb +5 -5
- data/test/scratch/test_show_dev_and_ino.rb +1 -1
- data/test/scratch/test_show_hidden.rb +3 -3
- data/test/unit/tc_recls_entries.rb +31 -31
- data/test/unit/tc_recls_entry.rb +19 -19
- data/test/unit/tc_recls_file_search.rb +32 -32
- data/test/unit/tc_recls_module.rb +25 -25
- data/test/unit/tc_recls_util.rb +161 -161
- data/test/unit/tc_recls_ximpl_util.rb +676 -676
- data/test/unit/test_all_separately.sh +1 -1
- data/test/unit/ts_all.rb +4 -4
- metadata +7 -7
data/lib/recls/foreach.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
#
|
2
|
-
# File:
|
1
|
+
# ######################################################################## #
|
2
|
+
# File: recls/foreach.rb
|
3
3
|
#
|
4
|
-
# Purpose:
|
4
|
+
# Purpose: Definition of Recls::foreach() utility function
|
5
5
|
#
|
6
|
-
# Created:
|
7
|
-
# Updated:
|
6
|
+
# Created: 22nd October 2014
|
7
|
+
# Updated: 20th April 2024
|
8
8
|
#
|
9
|
-
# Author:
|
9
|
+
# Author: Matthew Wilson
|
10
10
|
#
|
11
|
+
# Copyright (c) 2019-2024, Matthew Wilson and Synesis Information Systems
|
11
12
|
# Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
|
12
13
|
# All rights reserved.
|
13
14
|
#
|
@@ -33,110 +34,116 @@
|
|
33
34
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
34
35
|
# POSSIBILITY OF SUCH DAMAGE.
|
35
36
|
#
|
36
|
-
#
|
37
|
+
# ######################################################################## #
|
37
38
|
|
38
39
|
|
39
40
|
require 'recls/file_search'
|
40
41
|
|
42
|
+
|
41
43
|
=begin
|
42
44
|
=end
|
43
45
|
|
46
|
+
# @!visibility private
|
44
47
|
class Object; end # :nodoc:
|
45
48
|
|
46
49
|
module Recls
|
47
50
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
51
|
+
private
|
52
|
+
# @!visibility private
|
53
|
+
class FileSearchLineEnumerator # :nodoc: all
|
54
|
+
|
55
|
+
include Enumerable
|
56
|
+
|
57
|
+
# @!visibility private
|
58
|
+
def initialize(fs)
|
59
|
+
|
60
|
+
@fs = fs
|
61
|
+
end
|
62
|
+
|
63
|
+
# @!visibility private
|
64
|
+
def each(&block)
|
65
|
+
|
66
|
+
@fs.each do |fe|
|
67
|
+
|
68
|
+
IO.readlines(fe).each_with_index do |line, index|
|
69
|
+
|
70
|
+
case block.arity
|
71
|
+
when 1
|
72
|
+
|
73
|
+
yield line
|
74
|
+
when 2
|
75
|
+
|
76
|
+
yield line, index
|
77
|
+
when 3
|
78
|
+
|
79
|
+
yield line, index, fe
|
80
|
+
else
|
81
|
+
|
82
|
+
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)"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end # class FileSearchLineEnumerator
|
88
|
+
public
|
89
|
+
|
90
|
+
# Performs a recursive search and enumerates the lines of all files
|
91
|
+
# found
|
92
|
+
#
|
93
|
+
# === Signature
|
94
|
+
#
|
95
|
+
# * *Parameters:*
|
96
|
+
# - +searchable+ A searchable instance obtained from +Recls::file_search()+ or +Recls::file_rsearch()+;
|
97
|
+
# - +search_root+ (+String+, +Recls::Entry+) The root directory of the search. May be +nil+, in which case the current directory is assumed;
|
98
|
+
# - +patterns+ (+String+, +Array+) The pattern(s) for which to search. May be +nil+, in which case +Recls::WILDCARDS_ALL+ is assumed;
|
99
|
+
# - +options+ (+Hash+) An options hash;
|
100
|
+
# - +flags+ (+Integer+) Combination of flags (with behaviour as described below for the +flags+ option);
|
101
|
+
#
|
102
|
+
# * *Block:*
|
103
|
+
# An optional block that will be executed once for each line in each file
|
104
|
+
# found, where the block must take 1, 2, or 3 parameters, representing the
|
105
|
+
# line [ + file-line-index [ + entry ]]. If no block is given, an
|
106
|
+
# enumerator is returned.
|
107
|
+
#
|
108
|
+
# ==== Parameter Ordering
|
109
|
+
#
|
110
|
+
# The parameters may be expressed in any of the following permutations:
|
111
|
+
# - +searchable+
|
112
|
+
# - +search_root+, +patterns+, +flags+
|
113
|
+
# - +search_root+, +patterns+, +options+
|
114
|
+
#
|
115
|
+
# === Return
|
116
|
+
# +nil+ if a block is given; otherwise, an instance of the +FileSearchLineEnumerator+.
|
117
|
+
def self.foreach(*args, &block)
|
118
|
+
|
119
|
+
fs = nil
|
120
|
+
|
121
|
+
case args.length
|
122
|
+
when 1
|
123
|
+
|
124
|
+
raise ArgumentError "Single argument must be of type #{Recls::FileSearch}" unless args[0].kind_of? Recls::FileSearch
|
125
|
+
|
126
|
+
fs = args[0]
|
127
|
+
when 3
|
128
|
+
|
129
|
+
fs = Recls::FileSearch.new(args[0], args[1], args[2])
|
130
|
+
else
|
131
|
+
|
132
|
+
raise ArgumentError "Function requires single argument (#{Recls::FileSearch}) or three arguments (directory, patterns, flags)"
|
133
|
+
end
|
134
|
+
|
135
|
+
if block_given?
|
136
|
+
|
137
|
+
FileSearchLineEnumerator.new(fs).each(block)
|
138
|
+
|
139
|
+
return nil
|
140
|
+
else
|
141
|
+
|
142
|
+
return FileSearchLineEnumerator.new(fs)
|
143
|
+
end
|
144
|
+
end
|
138
145
|
end # module Recls
|
139
146
|
|
140
|
-
# ############################## end of file ############################# #
|
141
147
|
|
148
|
+
# ############################## end of file ############################# #
|
142
149
|
|
data/lib/recls/obsolete.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
#
|
2
|
-
# File:
|
1
|
+
# ######################################################################## #
|
2
|
+
# File: recls/obsolete.rb
|
3
3
|
#
|
4
|
-
# Purpose:
|
4
|
+
# Purpose: Obsolete elements
|
5
5
|
#
|
6
|
-
# Created:
|
7
|
-
# Updated:
|
6
|
+
# Created: 19th July 2012
|
7
|
+
# Updated: 20th April 2024
|
8
8
|
#
|
9
|
-
# Author:
|
9
|
+
# Author: Matthew Wilson
|
10
10
|
#
|
11
|
+
# Copyright (c) 2019-2024, Matthew Wilson and Synesis Information Systems
|
11
12
|
# Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
|
12
13
|
# All rights reserved.
|
13
14
|
#
|
@@ -33,87 +34,92 @@
|
|
33
34
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
34
35
|
# POSSIBILITY OF SUCH DAMAGE.
|
35
36
|
#
|
36
|
-
#
|
37
|
+
# ######################################################################## #
|
37
38
|
|
38
39
|
|
39
40
|
|
40
|
-
#
|
41
|
+
# ######################################################################## #
|
41
42
|
# Obsolete symbols
|
42
43
|
|
43
44
|
if not defined? RECLS_NO_OBSOLETE
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
46
|
+
# :stopdoc:
|
47
|
+
|
48
|
+
# @!visibility private
|
49
|
+
module Recls # :nodoc: all
|
50
|
+
|
51
|
+
# @!visibility private
|
52
|
+
def self.pathNameSeparator
|
53
|
+
|
54
|
+
PATH_NAME_SEPARATOR
|
55
|
+
end
|
56
|
+
|
57
|
+
# @!visibility private
|
58
|
+
def self.pathSeparator
|
59
|
+
|
60
|
+
PATH_SEPARATOR
|
61
|
+
end
|
62
|
+
|
63
|
+
# @!visibility private
|
64
|
+
def self.wildcardsAll
|
65
|
+
|
66
|
+
WILDCARDS_ALL
|
67
|
+
end
|
68
|
+
|
69
|
+
class FileSearch # :nodoc:
|
70
|
+
|
71
|
+
# @!visibility private
|
72
|
+
alias_method :searchRoot, :search_root
|
73
|
+
# @!visibility private
|
74
|
+
alias_method :pattern, :patterns
|
75
|
+
end
|
76
|
+
|
77
|
+
class Entry # :nodoc:
|
78
|
+
|
79
|
+
# @!visibility private
|
80
|
+
alias_method :uncDrive, :drive
|
81
|
+
# @!visibility private
|
82
|
+
alias_method :directoryPath, :directory_path
|
83
|
+
# @!visibility private
|
84
|
+
alias_method :directoryParts, :directory_parts
|
85
|
+
# @!visibility private
|
86
|
+
alias_method :file, :file_full_name
|
87
|
+
# @!visibility private
|
88
|
+
alias_method :shortFile, :file_short_name
|
89
|
+
# @!visibility private
|
90
|
+
alias_method :fileBaseName, :file_name_only
|
91
|
+
# @!visibility private
|
92
|
+
alias_method :fileName, :file_name_only
|
93
|
+
# @!visibility private
|
94
|
+
alias_method :fileExt, :file_extension
|
95
|
+
# @!visibility private
|
96
|
+
alias_method :searchDirectory, :search_directory
|
97
|
+
# @!visibility private
|
98
|
+
alias_method :searchRelativePath, :search_relative_path
|
99
|
+
|
100
|
+
# @!visibility private
|
101
|
+
alias_method :isDirectory, :directory?
|
102
|
+
# @!visibility private
|
103
|
+
alias_method :isFile, :file?
|
104
|
+
#alias_method :isLink, :link?
|
105
|
+
# @!visibility private
|
106
|
+
alias_method :isReadOnly, :readonly?
|
107
|
+
# @!visibility private
|
108
|
+
def isUNC
|
109
|
+
|
110
|
+
d = drive
|
111
|
+
|
112
|
+
d and d.size > 2
|
113
|
+
end
|
114
|
+
|
115
|
+
# @!visibility private
|
116
|
+
alias_method :creationTime, :modification_time
|
117
|
+
end
|
118
|
+
end # module Recls
|
119
|
+
|
120
|
+
# :startdoc:
|
115
121
|
end
|
116
122
|
|
117
|
-
# ############################## end of file ############################# #
|
118
123
|
|
124
|
+
# ############################## end of file ############################# #
|
119
125
|
|
data/lib/recls/recls.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
#
|
2
|
-
# File:
|
1
|
+
# ######################################################################## #
|
2
|
+
# File: recls/recls.rb
|
3
3
|
#
|
4
|
-
# Purpose:
|
4
|
+
# Purpose: Main source file for recls library
|
5
5
|
#
|
6
|
-
# Created:
|
7
|
-
# Updated:
|
6
|
+
# Created: 19th July 2012
|
7
|
+
# Updated: 20th April 2024
|
8
8
|
#
|
9
|
-
# Author:
|
9
|
+
# Author: Matthew Wilson
|
10
10
|
#
|
11
|
-
# Copyright (c) 2019-
|
11
|
+
# Copyright (c) 2019-2024, Matthew Wilson and Synesis Information Systems
|
12
12
|
# Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
|
13
13
|
# All rights reserved.
|
14
14
|
#
|
@@ -34,7 +34,7 @@
|
|
34
34
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
35
35
|
# POSSIBILITY OF SUCH DAMAGE.
|
36
36
|
#
|
37
|
-
#
|
37
|
+
# ######################################################################## #
|
38
38
|
|
39
39
|
|
40
40
|
require 'recls/version'
|
@@ -64,29 +64,24 @@ require 'recls/ximpl/os'
|
|
64
64
|
# - Recls::stat
|
65
65
|
module Recls
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
module Recls
|
67
|
+
# The string sequence used to separate names in paths, e.g. "/" on UNIX
|
68
|
+
PATH_NAME_SEPARATOR = Recls::Ximpl::OS::PATH_NAME_SEPARATOR
|
70
69
|
|
71
|
-
|
72
|
-
|
73
|
-
WILDCARDS_ALL = Recls::Ximpl::OS::WILDCARDS_ALL
|
70
|
+
# The string sequence used to separate paths, e.g. ";" on Windows
|
71
|
+
PATH_SEPARATOR = Recls::Ximpl::OS::PATH_SEPARATOR
|
74
72
|
|
75
|
-
|
76
|
-
|
73
|
+
# Represents the "all" wildcards string for the ambient operating system
|
74
|
+
WILDCARDS_ALL = Recls::Ximpl::OS::WILDCARDS_ALL
|
77
75
|
|
78
|
-
|
79
|
-
|
76
|
+
# Indicates whether the operating system is a variant of Windows
|
77
|
+
def self.windows?
|
80
78
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
Recls::Ximpl::OS::OS_IS_WINDOWS
|
85
|
-
end
|
79
|
+
Recls::Ximpl::OS::OS_IS_WINDOWS
|
80
|
+
end
|
86
81
|
end # module Recls
|
87
82
|
|
88
83
|
require 'recls/obsolete'
|
89
84
|
|
90
|
-
# ############################## end of file ############################# #
|
91
85
|
|
86
|
+
# ############################## end of file ############################# #
|
92
87
|
|