recls-ruby 2.11.0 → 2.11.0.2

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