recls-ruby 2.11.0.3 → 2.12.0

Sign up to get free protection for your applications and to get access to all the features.
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
+