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/api.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
#
|
2
|
-
# File:
|
1
|
+
# ######################################################################## #
|
2
|
+
# File: recls/api.rb
|
3
3
|
#
|
4
|
-
# Purpose:
|
4
|
+
# Purpose: Defines Recls module search functions
|
5
5
|
#
|
6
|
-
# Created:
|
7
|
-
# Updated:
|
6
|
+
# Created: 9th June 2016
|
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) 2016-2019, Matthew Wilson and Synesis Software
|
12
13
|
# All rights reserved.
|
13
14
|
#
|
@@ -33,86 +34,88 @@
|
|
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
|
require 'recls/flags'
|
41
42
|
|
43
|
+
|
42
44
|
=begin
|
43
45
|
=end
|
44
46
|
|
47
|
+
# @!visibility private
|
45
48
|
class Object; end # :nodoc:
|
46
49
|
|
47
50
|
module Recls
|
48
51
|
|
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
|
-
|
52
|
+
# [DEPRECATED] Use +Recls::file_search()+
|
53
|
+
def self.FileSearch(search_root, patterns, options = {})
|
54
|
+
|
55
|
+
Recls::FileSearch.new(search_root, patterns, options)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Initialises a +FileSearch+ instance, which acts recursively, as an
|
59
|
+
# +Enumerable+ of +Recls::Entry+
|
60
|
+
#
|
61
|
+
# === Signature
|
62
|
+
#
|
63
|
+
# * *Parameters:*
|
64
|
+
# - +search_root+ (+String+, +Recls::Entry+) The root directory of the search. May be +nil+, in which case the current directory is assumed;
|
65
|
+
# - +patterns+ (+String+, +Array+) The pattern(s) for which to search. May be +nil+, in which case +Recls::WILDCARDS_ALL+ is assumed;
|
66
|
+
# - +options+ (+Hash+, +Integer+) Combination of flags (with behaviour as described below for the +flags+ option), or an options hash;
|
67
|
+
#
|
68
|
+
# * *Options:*
|
69
|
+
# - +flags+ (+Integer+) Combination of flags - +Recls::FILES+, +Recls::DIRECTORIES+, etc. If the value modulo +Recls::TYPEMASK+ is 0, then +Recls::FILES+ is assumed. The value +Recls::RECURSIVE+ is added by the function, and so need not be added by the caller; it cannot be removed
|
70
|
+
#
|
71
|
+
# === Return
|
72
|
+
# An instance of a class implementing +Enumerable+ whose value type is
|
73
|
+
# +Recls::Entry+.
|
74
|
+
def self.file_rsearch(search_root, patterns, options = {})
|
75
|
+
|
76
|
+
case options
|
77
|
+
when ::NilClass
|
78
|
+
|
79
|
+
options = { flags: RECURSIVE }
|
80
|
+
when ::Integer
|
81
|
+
|
82
|
+
options |= RECURSIVE
|
83
|
+
when ::Hash
|
84
|
+
|
85
|
+
flags = options[:flags] || 0
|
86
|
+
flags |= RECURSIVE
|
87
|
+
|
88
|
+
options[:flags] = flags
|
89
|
+
else
|
90
|
+
|
91
|
+
# this is handled by the FileSearch initialiser
|
92
|
+
end
|
93
|
+
|
94
|
+
Recls::FileSearch.new(search_root, patterns, options)
|
95
|
+
end
|
96
|
+
|
97
|
+
# Initialises a +FileSearch+ instance, which acts as an +Enumerable+
|
98
|
+
# of +Recls::Entry+
|
99
|
+
#
|
100
|
+
# === Signature
|
101
|
+
#
|
102
|
+
# * *Parameters:*
|
103
|
+
# - +search_root+ (+String+, +Recls::Entry+) The root directory of the search. May be +nil+, in which case the current directory is assumed;
|
104
|
+
# - +patterns+ (+String+, +Array+) The pattern(s) for which to search. May be +nil+, in which case +Recls::WILDCARDS_ALL+ is assumed;
|
105
|
+
# - +options+ (+Hash+, +Integer+) Combination of flags (with behaviour as described below for the +flags+ option), or an options hash;
|
106
|
+
#
|
107
|
+
# * *Options:*
|
108
|
+
# - +flags+ (+Integer+) Combination of flags - +Recls::FILES+, +Recls::DIRECTORIES+, +Recls::RECURSIVE+, etc. If the value modulo +Recls::TYPEMASK+ is 0, then +Recls::FILES+ is assumed
|
109
|
+
#
|
110
|
+
# === Return
|
111
|
+
# An instance of a class implementing +Enumerable+ whose value type is
|
112
|
+
# +Recls::Entry+.
|
113
|
+
def self.file_search(search_root, patterns, options = {})
|
114
|
+
|
115
|
+
Recls::FileSearch.new(search_root, patterns, options)
|
116
|
+
end
|
114
117
|
end # module Recls
|
115
118
|
|
116
|
-
# ############################## end of file ############################# #
|
117
119
|
|
120
|
+
# ############################## end of file ############################# #
|
118
121
|
|
@@ -1,13 +1,14 @@
|
|
1
|
-
#
|
2
|
-
# File:
|
1
|
+
# ######################################################################## #
|
2
|
+
# File: recls/compare_paths_1.rb
|
3
3
|
#
|
4
|
-
# Purpose:
|
4
|
+
# Purpose: Definition of Recls::compare_paths() for Ruby 1.x
|
5
5
|
#
|
6
|
-
# Created:
|
7
|
-
# Updated:
|
6
|
+
# Created: 17th February 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) 2014-2019, Matthew Wilson and Synesis Software
|
12
13
|
# All rights reserved.
|
13
14
|
#
|
@@ -33,38 +34,40 @@
|
|
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/ximpl/util'
|
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
|
-
|
51
|
+
# Combines paths
|
52
|
+
#
|
53
|
+
# === Signature
|
54
|
+
#
|
55
|
+
# * *Parameters:*
|
56
|
+
# - +paths+ (+[ String, Recls::Entry ]+) Array of 1 or more path elements to be combined;
|
57
|
+
#
|
58
|
+
# === Return
|
59
|
+
# (+String+) The combined path.
|
60
|
+
def self.combine_paths(*paths)
|
58
61
|
|
59
|
-
|
60
|
-
|
62
|
+
paths = paths.reject { |p| p.nil? }
|
63
|
+
paths = paths.map { |p| 'Recls::Entry' == p.class.to_s ? p.path : p }
|
61
64
|
|
62
|
-
|
65
|
+
raise ArgumentError, 'must specify one or more path elements' if paths.empty?
|
63
66
|
|
64
|
-
|
65
|
-
|
67
|
+
return Recls::Ximpl.combine_paths paths, {}
|
68
|
+
end
|
66
69
|
end # module Recls
|
67
70
|
|
68
|
-
# ############################## end of file ############################# #
|
69
71
|
|
72
|
+
# ############################## end of file ############################# #
|
70
73
|
|
@@ -1,13 +1,14 @@
|
|
1
|
-
#
|
2
|
-
# File:
|
1
|
+
# ######################################################################## #
|
2
|
+
# File: recls/compare_paths_2plus.rb
|
3
3
|
#
|
4
|
-
# Purpose:
|
4
|
+
# Purpose: Definition of Recls::compare_paths() for Ruby 2+
|
5
5
|
#
|
6
|
-
# Created:
|
7
|
-
# Updated:
|
6
|
+
# Created: 17th February 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) 2014-2019, Matthew Wilson and Synesis Software
|
12
13
|
# All rights reserved.
|
13
14
|
#
|
@@ -33,44 +34,46 @@
|
|
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/ximpl/util'
|
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
|
-
|
51
|
+
# Combines paths, optionally canonicalising them
|
52
|
+
#
|
53
|
+
# === Signature
|
54
|
+
#
|
55
|
+
# * *Parameters:*
|
56
|
+
# - +paths+ (+[ String, Recls::Entry ]+) Array of 1 or more path elements to be combined;
|
57
|
+
# - +options+ (+Hash+) Options that moderate the combination;
|
58
|
+
#
|
59
|
+
# * *Options:*
|
60
|
+
# - +:canonicalise+ (boolean) Causes the evaluated path to be canonicalised - with +Recls.canonicalise_path+ - before it is returned;
|
61
|
+
# - +:clean+ (boolean) Causes the evaluated path to be cleaned (i.e. sent to +cleanpath+) before it is returned. Ignored if +:canonicalise+ is specified;
|
62
|
+
# - +:clean_path+ (boolean) Equivalent to +:clean+, but deprecated and may be removed in a future version;
|
63
|
+
#
|
64
|
+
# === Return
|
65
|
+
# (+String+) The combined path.
|
66
|
+
def self.combine_paths(*paths, **options)
|
64
67
|
|
65
|
-
|
66
|
-
|
68
|
+
paths = paths.reject { |p| p.nil? }
|
69
|
+
paths = paths.map { |p| 'Recls::Entry' == p.class.to_s ? p.path : p }
|
67
70
|
|
68
|
-
|
71
|
+
raise ArgumentError, 'must specify one or more path elements' if paths.empty?
|
69
72
|
|
70
|
-
|
71
|
-
|
73
|
+
return Recls::Ximpl.combine_paths paths, options
|
74
|
+
end
|
72
75
|
end # module Recls
|
73
76
|
|
74
|
-
# ############################## end of file ############################# #
|
75
77
|
|
78
|
+
# ############################## end of file ############################# #
|
76
79
|
|