recls-ruby 2.11.0.3 → 2.12.0

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 +4 -4
  2. data/LICENSE +24 -27
  3. data/README.md +1 -242
  4. data/examples/find_files_and_directories.md +30 -33
  5. data/examples/find_files_and_directories.recursive.md +254 -255
  6. data/examples/show_hidden_files.md +1 -4
  7. data/examples/show_hidden_files.rb +1 -1
  8. data/examples/show_readonly_files.md +1 -4
  9. data/examples/show_readonly_files.rb +1 -1
  10. data/lib/recls/api.rb +73 -76
  11. data/lib/recls/combine_paths_1.rb +23 -26
  12. data/lib/recls/combine_paths_2plus.rb +29 -32
  13. data/lib/recls/entry.rb +273 -277
  14. data/lib/recls/file_search.rb +193 -194
  15. data/lib/recls/flags.rb +45 -48
  16. data/lib/recls/foreach.rb +98 -105
  17. data/lib/recls/obsolete.rb +79 -80
  18. data/lib/recls/recls.rb +22 -16
  19. data/lib/recls/stat.rb +134 -137
  20. data/lib/recls/util.rb +92 -95
  21. data/lib/recls/version.rb +17 -22
  22. data/lib/recls/ximpl/os.rb +44 -46
  23. data/lib/recls/ximpl/unix.rb +35 -39
  24. data/lib/recls/ximpl/util.rb +596 -598
  25. data/lib/recls/ximpl/windows.rb +137 -141
  26. data/lib/recls.rb +9 -10
  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 +7 -7
data/lib/recls/foreach.rb CHANGED
@@ -1,14 +1,13 @@
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: 20th April 2024
6
+ # Created: 22nd October 2014
7
+ # Updated: 26th May 2020
8
8
  #
9
- # Author: Matthew Wilson
9
+ # Author: Matthew Wilson
10
10
  #
11
- # Copyright (c) 2019-2024, Matthew Wilson and Synesis Information Systems
12
11
  # Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
13
12
  # All rights reserved.
14
13
  #
@@ -34,116 +33,110 @@
34
33
  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
34
  # POSSIBILITY OF SUCH DAMAGE.
36
35
  #
37
- # ######################################################################## #
36
+ # ######################################################################### #
38
37
 
39
38
 
40
39
  require 'recls/file_search'
41
40
 
42
-
43
41
  =begin
44
42
  =end
45
43
 
46
- # @!visibility private
47
44
  class Object; end # :nodoc:
48
45
 
49
46
  module Recls
50
47
 
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
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
145
138
  end # module Recls
146
139
 
147
-
148
140
  # ############################## end of file ############################# #
149
141
 
142
+
@@ -1,14 +1,13 @@
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: 20th April 2024
6
+ # Created: 19th July 2012
7
+ # Updated: 14th April 2019
8
8
  #
9
- # Author: Matthew Wilson
9
+ # Author: Matthew Wilson
10
10
  #
11
- # Copyright (c) 2019-2024, Matthew Wilson and Synesis Information Systems
12
11
  # Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
13
12
  # All rights reserved.
14
13
  #
@@ -34,87 +33,87 @@
34
33
  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
34
  # POSSIBILITY OF SUCH DAMAGE.
36
35
  #
37
- # ######################################################################## #
36
+ # ######################################################################### #
38
37
 
39
38
 
40
39
 
41
- # ######################################################################## #
40
+ # ######################################################################### #
42
41
  # Obsolete symbols
43
42
 
44
43
  if not defined? RECLS_NO_OBSOLETE
45
44
 
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
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
116
115
  end
117
116
 
118
-
119
117
  # ############################## end of file ############################# #
120
118
 
119
+
data/lib/recls/recls.rb CHANGED
@@ -1,14 +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: 20th April 2024
6
+ # Created: 19th July 2012
7
+ # Updated: 6th April 2021
8
8
  #
9
- # Author: Matthew Wilson
9
+ # Author: Matthew Wilson
10
10
  #
11
- # Copyright (c) 2019-2024, Matthew Wilson and Synesis Information Systems
11
+ # Copyright (c) 2019-2021, 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'
@@ -68,19 +68,25 @@ end # module Recls
68
68
 
69
69
  module Recls
70
70
 
71
- # Represents the "all" wildcards string for the ambient operating
72
- # system
73
- 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
74
74
 
75
- # The string sequence used to separate names in paths, e.g. "/" on UNIX
76
- 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
77
77
 
78
- # The string sequence used to separate paths, e.g. ":" on UNIX
79
- 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
80
+
81
+ # Indicates whether the operating system is a variant of Windows
82
+ def self.windows?
83
+
84
+ Recls::Ximpl::OS::OS_IS_WINDOWS
85
+ end
80
86
  end # module Recls
81
87
 
82
88
  require 'recls/obsolete'
83
89
 
84
-
85
90
  # ############################## end of file ############################# #
86
91
 
92
+