recls-ruby 2.8.2 → 2.11.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.
- checksums.yaml +4 -4
- data/README.md +57 -10
- data/examples/find_files_and_directories.md +77 -0
- data/examples/find_files_and_directories.rb +19 -0
- data/examples/find_files_and_directories.recursive.md +304 -0
- data/examples/find_files_and_directories.recursive.rb +19 -0
- data/examples/show_hidden_files.md +39 -0
- data/examples/show_hidden_files.rb +2 -2
- data/examples/show_readonly_files.md +35 -0
- data/examples/show_readonly_files.rb +2 -2
- data/lib/recls.rb +2 -0
- data/lib/recls/api.rb +70 -3
- data/lib/recls/combine_paths_1.rb +70 -0
- data/lib/recls/combine_paths_2plus.rb +76 -0
- data/lib/recls/entry.rb +40 -4
- data/lib/recls/file_search.rb +48 -14
- data/lib/recls/flags.rb +21 -4
- data/lib/recls/foreach.rb +45 -6
- data/lib/recls/obsolete.rb +119 -0
- data/lib/recls/recls.rb +27 -56
- data/lib/recls/stat.rb +96 -24
- data/lib/recls/util.rb +74 -23
- data/lib/recls/version.rb +10 -4
- data/lib/recls/ximpl/os.rb +29 -15
- data/lib/recls/ximpl/unix.rb +29 -16
- data/lib/recls/ximpl/util.rb +141 -39
- data/lib/recls/ximpl/windows.rb +56 -25
- data/test/fixtures/readonly/file-1 +0 -0
- data/test/fixtures/readonly/file-2 +0 -0
- data/test/scratch/test_display_parts.rb +9 -9
- data/test/scratch/test_entry.rb +11 -9
- data/test/scratch/test_files_and_directories.rb +17 -14
- data/test/scratch/test_foreach.rb +0 -3
- data/test/scratch/test_module_function.rb +10 -10
- data/test/scratch/test_pattern_arrays.rb +32 -0
- 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_util.rb +6 -0
- data/test/unit/tc_recls_ximpl_util.rb +156 -101
- data/test/unit/ts_all.rb +11 -9
- metadata +36 -11
    
        data/lib/recls/file_search.rb
    CHANGED
    
    | @@ -4,11 +4,11 @@ | |
| 4 4 | 
             
            # Purpose:      Defines the Recls::FileSearch class for the recls.Ruby library.
         | 
| 5 5 | 
             
            #
         | 
| 6 6 | 
             
            # Created:      24th July 2012
         | 
| 7 | 
            -
            # Updated:       | 
| 7 | 
            +
            # Updated:      14th April 2019
         | 
| 8 8 | 
             
            #
         | 
| 9 9 | 
             
            # Author:       Matthew Wilson
         | 
| 10 10 | 
             
            #
         | 
| 11 | 
            -
            # Copyright (c) 2012- | 
| 11 | 
            +
            # Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
         | 
| 12 12 | 
             
            # All rights reserved.
         | 
| 13 13 | 
             
            #
         | 
| 14 14 | 
             
            # Redistribution and use in source and binary forms, with or without
         | 
| @@ -40,12 +40,33 @@ require 'recls/entry' | |
| 40 40 | 
             
            require 'recls/flags'
         | 
| 41 41 | 
             
            require 'recls/ximpl/os'
         | 
| 42 42 |  | 
| 43 | 
            +
            =begin
         | 
| 44 | 
            +
            =end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            class Object; end # :nodoc:
         | 
| 47 | 
            +
             | 
| 43 48 | 
             
            module Recls
         | 
| 44 49 |  | 
| 45 | 
            -
            	class FileSearch
         | 
| 50 | 
            +
            	class FileSearch # :nodoc: all
         | 
| 46 51 |  | 
| 47 52 | 
             
            		include Enumerable
         | 
| 48 53 |  | 
| 54 | 
            +
            		# Initialises a +FileSearch+ instance, which acts as an +Enumerable+
         | 
| 55 | 
            +
            		# of Recls::Entry
         | 
| 56 | 
            +
            		#
         | 
| 57 | 
            +
            		# === Signature
         | 
| 58 | 
            +
            		#
         | 
| 59 | 
            +
            		# * *Parameters:*
         | 
| 60 | 
            +
            		#   - +search_root+ (String, Recls::Entry) The root directory of the search. May be +nil+, in which case the current directory is assumed
         | 
| 61 | 
            +
            		#   - +patterns+ (String, Array) The pattern(s) for which to search. May be +nil+, in which case +Recls::WILDCARDS_ALL+ is assumed
         | 
| 62 | 
            +
            		#   - +options+ (Hash, Integer) Combination of flags (with behaviour as described below for the +flags+ option), or an options hash
         | 
| 63 | 
            +
            		#
         | 
| 64 | 
            +
            		# * *Options:*
         | 
| 65 | 
            +
            		#   - +flags+ (Integer) Combination of flags - FILES, DIRECTORIES, RECURSIVE, etc. If the value modulo TYPEMASK is 0, then FILES is assumed
         | 
| 66 | 
            +
            		#
         | 
| 67 | 
            +
            		# === Return
         | 
| 68 | 
            +
            		#  An instance of the class
         | 
| 69 | 
            +
            		#
         | 
| 49 70 | 
             
            		def initialize(search_root, patterns, options={})
         | 
| 50 71 |  | 
| 51 72 | 
             
            			# for backwards compatibility, we allow for options to
         | 
| @@ -101,19 +122,26 @@ module Recls | |
| 101 122 | 
             
            			end
         | 
| 102 123 |  | 
| 103 124 | 
             
            			# now de-dup the patterns, to avoid duplicates in search
         | 
| 104 | 
            -
            			patterns | 
| 105 | 
            -
            			patterns | 
| 125 | 
            +
            			patterns		=	patterns.flatten
         | 
| 126 | 
            +
            			patterns		=	patterns.uniq
         | 
| 106 127 |  | 
| 107 128 | 
             
            			@search_root	=	search_root
         | 
| 108 | 
            -
            			@patterns | 
| 109 | 
            -
            			@flags | 
| 129 | 
            +
            			@patterns		=	patterns
         | 
| 130 | 
            +
            			@flags			=	flags
         | 
| 110 131 | 
             
            		end
         | 
| 111 132 |  | 
| 133 | 
            +
            		# (String) The search root
         | 
| 112 134 | 
             
            		attr_reader :search_root
         | 
| 135 | 
            +
            		# (String) The search patterns
         | 
| 113 136 | 
             
            		attr_reader :patterns
         | 
| 137 | 
            +
            		# (Integer) The search flags
         | 
| 114 138 | 
             
            		attr_reader :flags
         | 
| 115 139 |  | 
| 116 | 
            -
            		 | 
| 140 | 
            +
            		# Calls the block once for each found file, passing a single
         | 
| 141 | 
            +
            		# parameter that is a Recls::Entry instance
         | 
| 142 | 
            +
            		#
         | 
| 143 | 
            +
            		# @!visibility private
         | 
| 144 | 
            +
            		def each(&blk) # :nodoc:
         | 
| 117 145 |  | 
| 118 146 | 
             
            			search_root = @search_root
         | 
| 119 147 | 
             
            			search_root = Recls::Ximpl::absolute_path search_root
         | 
| @@ -155,7 +183,8 @@ module Recls | |
| 155 183 | 
             
            		end
         | 
| 156 184 |  | 
| 157 185 | 
             
            		private
         | 
| 158 | 
            -
            		 | 
| 186 | 
            +
            		# @!visibility private
         | 
| 187 | 
            +
            		def FileSearch.is_dots(name) # :nodoc:
         | 
| 159 188 |  | 
| 160 189 | 
             
            			case	name
         | 
| 161 190 | 
             
            			when	'.', '..'
         | 
| @@ -165,12 +194,13 @@ module Recls | |
| 165 194 | 
             
            			end
         | 
| 166 195 | 
             
            		end
         | 
| 167 196 |  | 
| 168 | 
            -
            		 | 
| 197 | 
            +
            		# @!visibility private
         | 
| 198 | 
            +
            		def FileSearch.stat_or_nil_(path, flags) # :nodoc:
         | 
| 169 199 |  | 
| 170 200 | 
             
            			begin
         | 
| 171 201 |  | 
| 172 202 | 
             
            				Recls::Ximpl::FileStat.stat path
         | 
| 173 | 
            -
            			rescue Errno::ENOENT  | 
| 203 | 
            +
            			rescue Errno::ENOENT, Errno::ENXIO
         | 
| 174 204 |  | 
| 175 205 | 
             
            				nil
         | 
| 176 206 | 
             
            			rescue SystemCallError => x
         | 
| @@ -193,7 +223,8 @@ module Recls | |
| 193 223 | 
             
            		# order to allow calculation of search_relative_path in the
         | 
| 194 224 | 
             
            		# entry.
         | 
| 195 225 |  | 
| 196 | 
            -
            		 | 
| 226 | 
            +
            		# @!visibility private
         | 
| 227 | 
            +
            		def FileSearch.search_directory_(search_root, dir, patterns, flags, &blk) # :nodoc:
         | 
| 197 228 |  | 
| 198 229 | 
             
            			# array of FileStat instances
         | 
| 199 230 | 
             
            			entries = []
         | 
| @@ -252,6 +283,8 @@ module Recls | |
| 252 283 |  | 
| 253 284 | 
             
            				match	=	false
         | 
| 254 285 |  | 
| 286 | 
            +
            				match	||=	(0 == (Recls::TYPEMASK & flags))
         | 
| 287 | 
            +
             | 
| 255 288 | 
             
            				match	||=	(0 != (Recls::FILES & flags) && fs.file?)
         | 
| 256 289 | 
             
            				match	||=	(0 != (Recls::DIRECTORIES & flags) && fs.directory?)
         | 
| 257 290 | 
             
            				match	||=	(0 != (Recls::DEVICES & flags) && fs.blockdev?)
         | 
| @@ -286,8 +319,9 @@ module Recls | |
| 286 319 | 
             
            				FileSearch::search_directory_(search_root, fs.path, patterns, flags, &blk)
         | 
| 287 320 | 
             
            			end
         | 
| 288 321 | 
             
            		end
         | 
| 289 | 
            -
            	end
         | 
| 290 | 
            -
            end
         | 
| 322 | 
            +
            	end # class FileSearch
         | 
| 323 | 
            +
            end # module Recls
         | 
| 291 324 |  | 
| 292 325 | 
             
            # ############################## end of file ############################# #
         | 
| 293 326 |  | 
| 327 | 
            +
             | 
    
        data/lib/recls/flags.rb
    CHANGED
    
    | @@ -4,11 +4,11 @@ | |
| 4 4 | 
             
            # Purpose:      Defines the Recls::Flags module for the recls.Ruby library.
         | 
| 5 5 | 
             
            #
         | 
| 6 6 | 
             
            # Created:      24th July 2012
         | 
| 7 | 
            -
            # Updated:       | 
| 7 | 
            +
            # Updated:      14th April 2019
         | 
| 8 8 | 
             
            #
         | 
| 9 9 | 
             
            # Author:       Matthew Wilson
         | 
| 10 10 | 
             
            #
         | 
| 11 | 
            -
            # Copyright (c) 2012- | 
| 11 | 
            +
            # Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
         | 
| 12 12 | 
             
            # All rights reserved.
         | 
| 13 13 | 
             
            #
         | 
| 14 14 | 
             
            # Redistribution and use in source and binary forms, with or without
         | 
| @@ -36,6 +36,11 @@ | |
| 36 36 | 
             
            # ######################################################################### #
         | 
| 37 37 |  | 
| 38 38 |  | 
| 39 | 
            +
            =begin
         | 
| 40 | 
            +
            =end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            class Object; end # :nodoc:
         | 
| 43 | 
            +
             | 
| 39 44 | 
             
            module Recls
         | 
| 40 45 |  | 
| 41 46 | 
             
            	# Specifies that files are to be listed
         | 
| @@ -46,32 +51,44 @@ module Recls | |
| 46 51 | 
             
            	LINKS					=	0x00000004
         | 
| 47 52 | 
             
            	# Specifies that devices are to be listed
         | 
| 48 53 | 
             
            	DEVICES					=	0x00000008
         | 
| 54 | 
            +
            	# Type mask (combination of Recls::FILES, Recls::DIRECTORIES, Recls::LINKS, Recls::DEVICES)
         | 
| 49 55 | 
             
            	TYPEMASK				=	0x000000ff
         | 
| 50 56 |  | 
| 51 57 | 
             
            	# Specifies that hidden items are to be shown and hidden directories are
         | 
| 52 58 | 
             
            	# to be searched
         | 
| 53 59 | 
             
            	SHOW_HIDDEN				=	0x00000100
         | 
| 54 60 |  | 
| 61 | 
            +
            	# [IGNORED] This for compatibility with *recls* libraries written in other languages
         | 
| 55 62 | 
             
            	DIR_PROGRESS			=	0x00001000
         | 
| 56 63 | 
             
            	# Causes search to terminate if a directory cannot be entered or an
         | 
| 57 64 | 
             
            	# entry's information cannot be stat()'d
         | 
| 58 65 | 
             
            	STOP_ON_ACCESS_FAILURE	=	0x00002000
         | 
| 66 | 
            +
            	# [IGNORED] This for compatibility with *recls* libraries written in other languages
         | 
| 59 67 | 
             
            	LINK_COUNT				=	0000004000
         | 
| 68 | 
            +
            	# [IGNORED] This for compatibility with *recls* libraries written in other languages
         | 
| 60 69 | 
             
            	NODE_INDEX				=	0x00008000
         | 
| 61 70 |  | 
| 71 | 
            +
            	# Causes search to operate recursively
         | 
| 62 72 | 
             
            	RECURSIVE				=	0x00010000
         | 
| 63 73 | 
             
            private
         | 
| 64 | 
            -
            	NO_SEARCH_LINKS			=	0x00020000
         | 
| 74 | 
            +
            	NO_SEARCH_LINKS			=	0x00020000 # :nodoc:
         | 
| 65 75 | 
             
            public
         | 
| 76 | 
            +
            	# [IGNORED] In previous versions the Recls::Entry#directory_parts property was not obtained (for performance reasons) unless this flag was specified. In current version the parts are always obtained
         | 
| 66 77 | 
             
            	DIRECTORY_PARTS			=	0x00040000
         | 
| 78 | 
            +
            	# Causes operations (such as Recls::stat()) to obtain a result even when
         | 
| 79 | 
            +
            	# no corresponding file-system entity does not exist
         | 
| 67 80 | 
             
            	DETAILS_LATER			=	0x00080000
         | 
| 68 81 |  | 
| 82 | 
            +
            	# Causes the Recls::Entry#path and Recls::Entry#search_relative_path
         | 
| 83 | 
            +
            	# attributes to contain a trailing path-name-separator for directory
         | 
| 84 | 
            +
            	# entries
         | 
| 69 85 | 
             
            	MARK_DIRECTORIES		=	0x00200000
         | 
| 70 86 |  | 
| 71 87 | 
             
            	# Causes sub-directories that are links to be searched; default is not
         | 
| 72 88 | 
             
            	# to search through links
         | 
| 73 89 | 
             
            	SEARCH_THROUGH_LINKS	=	0x00100000
         | 
| 74 | 
            -
            end
         | 
| 90 | 
            +
            end # module Recls
         | 
| 75 91 |  | 
| 76 92 | 
             
            # ############################## end of file ############################# #
         | 
| 77 93 |  | 
| 94 | 
            +
             | 
    
        data/lib/recls/foreach.rb
    CHANGED
    
    | @@ -4,11 +4,11 @@ | |
| 4 4 | 
             
            # Purpose:      Definition of Recls::foreach() utility function
         | 
| 5 5 | 
             
            #
         | 
| 6 6 | 
             
            # Created:      22nd October 2014
         | 
| 7 | 
            -
            # Updated:       | 
| 7 | 
            +
            # Updated:      26th May 2020
         | 
| 8 8 | 
             
            #
         | 
| 9 9 | 
             
            # Author:       Matthew Wilson
         | 
| 10 10 | 
             
            #
         | 
| 11 | 
            -
            # Copyright (c) 2012- | 
| 11 | 
            +
            # Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
         | 
| 12 12 | 
             
            # All rights reserved.
         | 
| 13 13 | 
             
            #
         | 
| 14 14 | 
             
            # Redistribution and use in source and binary forms, with or without
         | 
| @@ -38,23 +38,31 @@ | |
| 38 38 |  | 
| 39 39 | 
             
            require 'recls/file_search'
         | 
| 40 40 |  | 
| 41 | 
            +
            =begin
         | 
| 42 | 
            +
            =end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            class Object; end # :nodoc:
         | 
| 45 | 
            +
             | 
| 41 46 | 
             
            module Recls
         | 
| 42 47 |  | 
| 43 48 | 
             
            	private
         | 
| 44 | 
            -
            	 | 
| 49 | 
            +
            	# @!visibility private
         | 
| 50 | 
            +
            	class FileSearchLineEnumerator # :nodoc: all
         | 
| 45 51 |  | 
| 46 52 | 
             
            		include Enumerable
         | 
| 47 53 |  | 
| 54 | 
            +
            		# @!visibility private
         | 
| 48 55 | 
             
            		def initialize(fs)
         | 
| 49 56 |  | 
| 50 57 | 
             
            			@fs = fs
         | 
| 51 58 | 
             
            		end
         | 
| 52 59 |  | 
| 60 | 
            +
            		# @!visibility private
         | 
| 53 61 | 
             
            		def each(&block)
         | 
| 54 62 |  | 
| 55 63 | 
             
            			@fs.each do |fe|
         | 
| 56 64 |  | 
| 57 | 
            -
            				IO | 
| 65 | 
            +
            				IO.readlines(fe).each_with_index do |line, index|
         | 
| 58 66 |  | 
| 59 67 | 
             
            					case	block.arity
         | 
| 60 68 | 
             
            					when	1
         | 
| @@ -69,21 +77,51 @@ module Recls | |
| 69 77 | 
             
            				end
         | 
| 70 78 | 
             
            			end
         | 
| 71 79 | 
             
            		end
         | 
| 72 | 
            -
            	end
         | 
| 80 | 
            +
            	end # class FileSearchLineEnumerator
         | 
| 73 81 | 
             
            	public
         | 
| 74 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 | 
            +
            	#
         | 
| 75 110 | 
             
            	def self.foreach(*args, &block)
         | 
| 76 111 |  | 
| 77 112 | 
             
            		fs = nil
         | 
| 78 113 |  | 
| 79 114 | 
             
            		case	args.length
         | 
| 80 115 | 
             
            		when	1
         | 
| 116 | 
            +
             | 
| 81 117 | 
             
            			raise ArgumentError "Single argument must be of type #{Recls::FileSearch}" unless args[0].kind_of? Recls::FileSearch
         | 
| 82 118 |  | 
| 83 119 | 
             
            			fs = args[0]
         | 
| 84 120 | 
             
            		when	3
         | 
| 121 | 
            +
             | 
| 85 122 | 
             
            			fs = Recls::FileSearch.new(args[0], args[1], args[2])
         | 
| 86 123 | 
             
            		else
         | 
| 124 | 
            +
             | 
| 87 125 | 
             
            			raise ArgumentError "Function requires single argument (#{Recls::FileSearch}) or three arguments (directory, patterns, flags)"
         | 
| 88 126 | 
             
            		end
         | 
| 89 127 |  | 
| @@ -97,7 +135,8 @@ module Recls | |
| 97 135 | 
             
            			return FileSearchLineEnumerator.new(fs)
         | 
| 98 136 | 
             
            		end
         | 
| 99 137 | 
             
            	end
         | 
| 100 | 
            -
            end
         | 
| 138 | 
            +
            end # module Recls
         | 
| 101 139 |  | 
| 102 140 | 
             
            # ############################## end of file ############################# #
         | 
| 103 141 |  | 
| 142 | 
            +
             | 
| @@ -0,0 +1,119 @@ | |
| 1 | 
            +
            # ######################################################################### #
         | 
| 2 | 
            +
            # File:         recls/obsolete.rb
         | 
| 3 | 
            +
            #
         | 
| 4 | 
            +
            # Purpose:      Obsolete elements
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # Created:      19th July 2012
         | 
| 7 | 
            +
            # Updated:      14th April 2019
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # Author:       Matthew Wilson
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            # Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
         | 
| 12 | 
            +
            # All rights reserved.
         | 
| 13 | 
            +
            #
         | 
| 14 | 
            +
            # Redistribution and use in source and binary forms, with or without
         | 
| 15 | 
            +
            # modification, are permitted provided that the following conditions are met:
         | 
| 16 | 
            +
            #
         | 
| 17 | 
            +
            # * Redistributions of source code must retain the above copyright notice,
         | 
| 18 | 
            +
            #   this list of conditions and the following disclaimer.
         | 
| 19 | 
            +
            #
         | 
| 20 | 
            +
            # * Redistributions in binary form must reproduce the above copyright notice,
         | 
| 21 | 
            +
            #   this list of conditions and the following disclaimer in the documentation
         | 
| 22 | 
            +
            #   and/or other materials provided with the distribution.
         | 
| 23 | 
            +
            #
         | 
| 24 | 
            +
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
         | 
| 25 | 
            +
            # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
         | 
| 26 | 
            +
            # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
         | 
| 27 | 
            +
            # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
         | 
| 28 | 
            +
            # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
         | 
| 29 | 
            +
            # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
         | 
| 30 | 
            +
            # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
         | 
| 31 | 
            +
            # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
         | 
| 32 | 
            +
            # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
         | 
| 33 | 
            +
            # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
         | 
| 34 | 
            +
            # POSSIBILITY OF SUCH DAMAGE.
         | 
| 35 | 
            +
            #
         | 
| 36 | 
            +
            # ######################################################################### #
         | 
| 37 | 
            +
             | 
| 38 | 
            +
             | 
| 39 | 
            +
             | 
| 40 | 
            +
            # ######################################################################### #
         | 
| 41 | 
            +
            # Obsolete symbols
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            if not defined? RECLS_NO_OBSOLETE
         | 
| 44 | 
            +
             | 
| 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
         | 
| 115 | 
            +
            end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
            # ############################## end of file ############################# #
         | 
| 118 | 
            +
             | 
| 119 | 
            +
             | 
    
        data/lib/recls/recls.rb
    CHANGED
    
    | @@ -4,11 +4,11 @@ | |
| 4 4 | 
             
            # Purpose:      Main source file for recls library
         | 
| 5 5 | 
             
            #
         | 
| 6 6 | 
             
            # Created:      19th July 2012
         | 
| 7 | 
            -
            # Updated:       | 
| 7 | 
            +
            # Updated:      14th April 2019
         | 
| 8 8 | 
             
            #
         | 
| 9 9 | 
             
            # Author:       Matthew Wilson
         | 
| 10 10 | 
             
            #
         | 
| 11 | 
            -
            # Copyright (c) 2012- | 
| 11 | 
            +
            # Copyright (c) 2012-2019, Matthew Wilson and Synesis Software
         | 
| 12 12 | 
             
            # All rights reserved.
         | 
| 13 13 | 
             
            #
         | 
| 14 14 | 
             
            # Redistribution and use in source and binary forms, with or without
         | 
| @@ -39,76 +39,47 @@ | |
| 39 39 | 
             
            require 'recls/version'
         | 
| 40 40 |  | 
| 41 41 | 
             
            require 'recls/api'
         | 
| 42 | 
            +
            require 'recls/entry'
         | 
| 42 43 | 
             
            require 'recls/file_search'
         | 
| 43 44 | 
             
            require 'recls/foreach'
         | 
| 44 45 | 
             
            require 'recls/stat'
         | 
| 45 46 | 
             
            require 'recls/util'
         | 
| 46 47 | 
             
            require 'recls/ximpl/os'
         | 
| 47 48 |  | 
| 49 | 
            +
            # The *recls* module
         | 
| 50 | 
            +
            #
         | 
| 51 | 
            +
            # == Significant Components
         | 
| 52 | 
            +
            # - Recls::Entry
         | 
| 53 | 
            +
            # - Recls::absolute_path
         | 
| 54 | 
            +
            # - Recls::absolute_path?
         | 
| 55 | 
            +
            # - Recls::canonicalise_path
         | 
| 56 | 
            +
            # - Recls::derive_relative_path
         | 
| 57 | 
            +
            # - Recls::directory?
         | 
| 58 | 
            +
            # - Recls::exist?
         | 
| 59 | 
            +
            # - Recls::file?
         | 
| 60 | 
            +
            # - Recls::file_rsearch
         | 
| 61 | 
            +
            # - Recls::file_search
         | 
| 62 | 
            +
            # - Recls::foreach
         | 
| 63 | 
            +
            # - Recls::stat
         | 
| 64 | 
            +
            module Recls
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            end # module Recls
         | 
| 67 | 
            +
             | 
| 48 68 | 
             
            module Recls
         | 
| 49 69 |  | 
| 50 70 | 
             
            	# Represents the "all" wildcards string for the ambient operating
         | 
| 51 71 | 
             
            	# system
         | 
| 52 72 | 
             
            	WILDCARDS_ALL = Recls::Ximpl::OS::WILDCARDS_ALL
         | 
| 53 73 |  | 
| 74 | 
            +
            	# The string sequence used to separate names in paths, e.g. "/" on UNIX
         | 
| 54 75 | 
             
            	PATH_NAME_SEPARATOR = Recls::Ximpl::OS::PATH_NAME_SEPARATOR
         | 
| 55 76 |  | 
| 77 | 
            +
            	# The string sequence used to separate paths, e.g. ":" on UNIX
         | 
| 56 78 | 
             
            	PATH_SEPARATOR = Recls::Ximpl::OS::PATH_SEPARATOR
         | 
| 57 | 
            -
            end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
            # ######################################################################### #
         | 
| 60 | 
            -
            # Obsolete symbols
         | 
| 61 | 
            -
             | 
| 62 | 
            -
            if not defined? RECLS_NO_OBSOLETE
         | 
| 63 | 
            -
             | 
| 64 | 
            -
            	module Recls
         | 
| 65 | 
            -
             | 
| 66 | 
            -
            		def self.pathNameSeparator
         | 
| 67 | 
            -
            			PATH_NAME_SEPARATOR
         | 
| 68 | 
            -
            		end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
            		def self.pathSeparator
         | 
| 71 | 
            -
            			PATH_SEPARATOR
         | 
| 72 | 
            -
            		end
         | 
| 79 | 
            +
            end # module Recls
         | 
| 73 80 |  | 
| 74 | 
            -
             | 
| 75 | 
            -
            			WILDCARDS_ALL
         | 
| 76 | 
            -
            		end
         | 
| 77 | 
            -
             | 
| 78 | 
            -
            		class FileSearch
         | 
| 79 | 
            -
             | 
| 80 | 
            -
            			alias_method :searchRoot, :search_root
         | 
| 81 | 
            -
            			alias_method :pattern, :patterns
         | 
| 82 | 
            -
            		end
         | 
| 83 | 
            -
             | 
| 84 | 
            -
            		class Entry
         | 
| 85 | 
            -
             | 
| 86 | 
            -
            			alias_method :uncDrive, :drive
         | 
| 87 | 
            -
            			alias_method :directoryPath, :directory_path
         | 
| 88 | 
            -
            			alias_method :directoryParts, :directory_parts
         | 
| 89 | 
            -
            			alias_method :file, :file_full_name
         | 
| 90 | 
            -
            			alias_method :shortFile, :file_short_name
         | 
| 91 | 
            -
            			alias_method :fileBaseName, :file_name_only
         | 
| 92 | 
            -
            			alias_method :fileName, :file_name_only
         | 
| 93 | 
            -
            			alias_method :fileExt, :file_extension
         | 
| 94 | 
            -
            			alias_method :searchDirectory, :search_directory
         | 
| 95 | 
            -
            			alias_method :searchRelativePath, :search_relative_path
         | 
| 96 | 
            -
             | 
| 97 | 
            -
            			alias_method :isDirectory, :directory?
         | 
| 98 | 
            -
            			alias_method :isFile, :file?
         | 
| 99 | 
            -
            			#alias_method :isLink, :link?
         | 
| 100 | 
            -
            			alias_method :isReadOnly, :readonly?
         | 
| 101 | 
            -
            			def isUNC
         | 
| 102 | 
            -
             | 
| 103 | 
            -
            				d = drive
         | 
| 104 | 
            -
             | 
| 105 | 
            -
            				d and d.size > 2
         | 
| 106 | 
            -
            			end
         | 
| 107 | 
            -
             | 
| 108 | 
            -
            			alias_method :creationTime, :modification_time
         | 
| 109 | 
            -
            		end
         | 
| 110 | 
            -
            	end
         | 
| 111 | 
            -
            end
         | 
| 81 | 
            +
            require 'recls/obsolete'
         | 
| 112 82 |  | 
| 113 83 | 
             
            # ############################## end of file ############################# #
         | 
| 114 84 |  | 
| 85 | 
            +
             |