recls-ruby 2.7.5 → 2.8.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 95854b93012f09220089014356ec0360436865eb
4
- data.tar.gz: 9059a6ec0fe372902124c497b8155edd67608b2d
3
+ metadata.gz: fd3873b6ab2b854777d003cfefd78240322da3ec
4
+ data.tar.gz: 35234197d743227278a98b4bb6d645f5c895a452
5
5
  SHA512:
6
- metadata.gz: 309026753993dd26ef59312bb5a92c1e3a27b41e237a2dc10b66c9756b82ad037f4fbab60e912321bbd0faba6a4702562506bad3ee0578dd1e30c09f1626b3c7
7
- data.tar.gz: f859efe6be5cd292f455796451026c9ec17afb21fd31b45a933669536ab2810f28941d451a838b08ff5f80cfba8f5a54c5b4e97b4992222b83b0ea4b418cf01b
6
+ metadata.gz: 62d7e2ee09b3b4ed8f8908a4ecbc5fb4c82b3c0cc6c553310913384c4573bebca95a8dd6c960f57c7555511fc954541c6542ef11a5d328cd4abed411ccae2689
7
+ data.tar.gz: a7609496ada38d41d30b054603fbf28300961eae8f3b18012ab3ff68ac41d294b378a32c2d3093e50065bd1ee783b9287dac4f70cb5d5d709d7ad8ee0ebc3136
data/README.md CHANGED
@@ -26,3 +26,9 @@ Defect reports, feature requests, and pull requests are welcome on https://githu
26
26
  ## License
27
27
 
28
28
  **recls.Ruby** is released under the 3-clause BSD license. See LICENSE for details.
29
+
30
+ ## Compatibility
31
+
32
+ From v2.8 onwards, recls.Ruby is compatible only with Ruby 2.0+
33
+
34
+
@@ -4,11 +4,11 @@
4
4
  # Purpose: Utility module functions for recls library
5
5
  #
6
6
  # Created: 17th February 2014
7
- # Updated: 27th August 2015
7
+ # Updated: 25th January 2018
8
8
  #
9
9
  # Author: Matthew Wilson
10
10
  #
11
- # Copyright (c) 2012-2015, Matthew Wilson and Synesis Software
11
+ # Copyright (c) 2012-2018, 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
@@ -63,11 +63,35 @@ module Recls
63
63
 
64
64
  # Combines paths, optionally canonicalising them
65
65
  #
66
- def self.combine_paths(origin, path, options={})
66
+ # === Signature
67
+ #
68
+ # * *Parameters:*
69
+ # - +paths+:: [ [ ::String, ::Recls::Entry ] ] Array of 1 or more path
70
+ # elements to be combined
71
+ # - +options+:: [::Hash] Options that moderate the combination
72
+ #
73
+ # * *Parameters:*
74
+ # - +:canonicalise+:: [boolean] Causes the evaluated path to be
75
+ # canonicalised - with +Recls.canonicalise_path+ - before it is
76
+ # returned
77
+ # - +:clean+:: [boolean] Causes the evaluated path to be cleaned
78
+ # (i.e. sent to +cleanpath+) before it is returned. Ignored if
79
+ # +:canonicalise+ is specified
80
+ # - +:clean_path+:: [boolean] Equivalent to +:clean+, but deprecated
81
+ # and may be removed in a future version
82
+ #
83
+ # === Return
84
+ # The combined path
85
+ def self.combine_paths(*paths, **options)
67
86
 
68
- return Recls::Ximpl.combine_paths origin, path, options
87
+ paths = paths.reject { |p| p.nil? }
88
+
89
+ raise ArgumentError, 'must specify one or more path elements' if paths.empty?
90
+
91
+ return Recls::Ximpl.combine_paths paths, options
69
92
  end
70
93
  end
71
94
 
72
95
  # ############################## end of file ############################# #
73
96
 
97
+
@@ -4,11 +4,11 @@
4
4
  # Purpose: Version for recls library
5
5
  #
6
6
  # Created: 14th February 2014
7
- # Updated: 22nd June 2017
7
+ # Updated: 5th February 2018
8
8
  #
9
9
  # Author: Matthew Wilson
10
10
  #
11
- # Copyright (c) 2012-2017, Matthew Wilson and Synesis Software
11
+ # Copyright (c) 2012-2018, 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,7 +39,7 @@
39
39
  module Recls
40
40
 
41
41
  # Current version of the recls.Ruby library
42
- VERSION = '2.7.5'
42
+ VERSION = '2.8.2'
43
43
 
44
44
  private
45
45
  VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
@@ -51,3 +51,4 @@ end
51
51
 
52
52
  # ############################## end of file ############################# #
53
53
 
54
+
@@ -4,11 +4,11 @@
4
4
  # Purpose: Internal implementation constructs for the recls library.
5
5
  #
6
6
  # Created: 24th July 2012
7
- # Updated: 22nd June 2017
7
+ # Updated: 25th January 2018
8
8
  #
9
9
  # Author: Matthew Wilson
10
10
  #
11
- # Copyright (c) 2012-2017, Matthew Wilson and Synesis Software
11
+ # Copyright (c) 2012-2018, 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
@@ -52,6 +52,7 @@ module Recls
52
52
  return true if ?/ == c
53
53
 
54
54
  if Recls::Ximpl::OS::OS_IS_WINDOWS
55
+
55
56
  return true if ?\\ == c
56
57
  end
57
58
 
@@ -126,6 +127,7 @@ module Recls
126
127
  #
127
128
  # NOTE: this works for both rooted and unrooted paths
128
129
  if p =~ /^([a-zA-Z]:)/
130
+
129
131
  return [ $1, $' ]
130
132
  end
131
133
 
@@ -133,18 +135,22 @@ module Recls
133
135
  #
134
136
  # NOTE: there are several permutations ...
135
137
  if p =~ /^(\\\\[^\\\/:*?<>|]+\\[^\\\/:*?<>|]+)([\\\/].*)$/
138
+
136
139
  # \\server\share{\{... rest of path}}
137
140
  return [ $1, $2 ]
138
141
  end
139
142
  if p =~ /^(\\\\[^\\\/:*?<>|]+\\[^\\\/:*?<>|]+)$/
143
+
140
144
  # \\server\share
141
145
  return [ $1, nil ]
142
146
  end
143
147
  if p =~ /^(\\\\[^\\\/:*?<>|]+\\)$/
148
+
144
149
  # \\server\
145
150
  return [ $1, nil ]
146
151
  end
147
152
  if p =~ /^(\\\\[^\\\/:*?<>|]+)$/
153
+
148
154
  # \\server
149
155
  return [ $1, nil ]
150
156
  end
@@ -167,10 +173,13 @@ module Recls
167
173
  parts << wr if wr
168
174
 
169
175
  until rem.nil? || rem.empty?
176
+
170
177
  if rem =~ /^([^\\\/]*[\\\/])/
178
+
171
179
  parts << $1
172
180
  rem = $'
173
181
  else
182
+
174
183
  parts << rem
175
184
  rem = ''
176
185
  end
@@ -199,15 +208,19 @@ module Recls
199
208
  remainder = nil if not remainder or remainder.empty?
200
209
 
201
210
  if not remainder or remainder.empty?
211
+
202
212
  f2_directory = nil
203
213
  f3_basename = nil
204
214
  f4_nameonly = nil
205
215
  f5_extension = nil
206
216
  else
217
+
207
218
  if remainder =~ /^(.*[\\\/])([^\\\/]*)$/
219
+
208
220
  f2_directory = $1
209
221
  f3_basename = $2
210
222
  else
223
+
211
224
  f2_directory = nil
212
225
  f3_basename = remainder
213
226
  f4_nameonly = nil
@@ -218,18 +231,23 @@ module Recls
218
231
  f3_basename = nil if not f3_basename or f3_basename.empty?
219
232
 
220
233
  if f3_basename
234
+
221
235
  # special case: treat '.' and '..' as file-name only
222
236
  if '.' == f3_basename or '..' == f3_basename
237
+
223
238
  f4_nameonly = f3_basename
224
239
  f5_extension = nil
225
240
  elsif f3_basename =~ /^(.*)(\.[^.]*)$/
241
+
226
242
  f4_nameonly = $1
227
243
  f5_extension = $2
228
244
  else
245
+
229
246
  f4_nameonly = f3_basename
230
247
  f5_extension = nil
231
248
  end
232
249
  else
250
+
233
251
  f4_nameonly = nil
234
252
  f5_extension = nil
235
253
  end
@@ -270,11 +288,14 @@ module Recls
270
288
  next if part.empty?
271
289
 
272
290
  if path_is_rooted.nil?
291
+
273
292
  path_is_rooted = self.is_path_name_separator(part[0])
274
293
  end
275
294
 
276
295
  if ?. == part[0]
296
+
277
297
  if self.is_path_name_separator(part[1])
298
+
278
299
  # single dots, so ...
279
300
 
280
301
  # ... remember the last instance, and ...
@@ -283,7 +304,9 @@ module Recls
283
304
  # ... skip to leave this out of the result
284
305
  next
285
306
  elsif ?. == part[1]
307
+
286
308
  if self.is_path_name_separator(part[2])
309
+
287
310
  # double dots, so ...
288
311
  # ... skip this and pop prior from the new list iff:
289
312
  #
@@ -291,26 +314,34 @@ module Recls
291
314
  # 2. the last element in the new list is not the root directory; AND
292
315
  # 3. the last element in the list is not a dots directory
293
316
  if not newParts.empty? # 1.
317
+
294
318
  priorPart = newParts[-1]
295
319
  if 1 == newParts.size and OS.is_root_dir_(priorPart)
320
+
296
321
  # 2.
297
322
  next
298
323
  else
324
+
299
325
  dirtype = OS.get_number_of_dots_dir_(priorPart)
300
326
  if 0 == dirtype # 3.
327
+
301
328
  if newParts.pop
329
+
302
330
  next
303
331
  end
304
332
  end
305
333
  end
306
334
  end
307
335
  else
336
+
308
337
  # it's a ..X part
309
338
  end
310
339
  else
340
+
311
341
  # it's a .X part
312
342
  end
313
343
  else
344
+
314
345
  # it's a non-dots part
315
346
  end
316
347
 
@@ -320,25 +351,35 @@ module Recls
320
351
  consume_basename = false
321
352
 
322
353
  if basename
354
+
323
355
  if ?. == basename[0]
356
+
324
357
  if 1 == basename.size
358
+
325
359
  # single dots
326
360
  if newParts.empty?
361
+
327
362
  lastSingleDots = false
328
363
  else
364
+
329
365
  consume_basename = true
330
366
  end
331
367
  elsif ?. == basename[1] and 2 == basename.size
368
+
332
369
  # double dots, so ...
333
370
  #
334
371
  # ... pop unless we already have some outstanding double dots
335
372
  if newParts.empty?
373
+
336
374
  newParts << '..'
337
375
  consume_basename = true
338
376
  elsif 1 == newParts.size && 1 == newParts[0].size && Util.is_path_name_separator(newParts[0][0])
377
+
339
378
  consume_basename = true
340
379
  else
380
+
341
381
  if 2 != OS.get_number_of_dots_dir_(newParts[-1])
382
+
342
383
  newParts.pop
343
384
  consume_basename = true
344
385
  end
@@ -352,23 +393,30 @@ module Recls
352
393
  newParts << lastSingleDots if lastSingleDots and newParts.empty?
353
394
 
354
395
  if not newParts.empty?
396
+
355
397
  if 2 == OS.get_number_of_dots_dir_(newParts[-1])
398
+
356
399
  # the last element is the double-dots directory, but
357
400
  # need to determine whether to ensure/remote a
358
401
  # trailing slash
359
402
  if basename and not basename.empty?
403
+
360
404
  if not consume_basename
405
+
361
406
  # leave as is
362
407
  else
408
+
363
409
  #
364
410
  newParts[-1] = '..'
365
411
  end
366
412
  end
367
413
  end
368
414
  else
415
+
369
416
  # handle case where all (double)-dots have eliminated
370
417
  # all regular directories
371
418
  if not basename or basename.empty? or consume_basename
419
+
372
420
  newParts << '.'
373
421
  end
374
422
  end
@@ -395,8 +443,10 @@ module Recls
395
443
  dummy3 = dummy3
396
444
 
397
445
  if not f2_directory
446
+
398
447
  canonicalised_directory = nil
399
448
  else
449
+
400
450
  canonicalised_directory, consume_basename = Util.canonicalise_parts(directory_parts, f3_basename)
401
451
  f3_basename = nil if consume_basename
402
452
  end
@@ -414,6 +464,7 @@ module Recls
414
464
  when ::Recls::Entry
415
465
  path = path.to_s
416
466
  else
467
+
417
468
  raise TypeError, "parameter path ('#{path}') is of type #{path.class} must be an instance of #{::String} or #{::Recls::Entry}"
418
469
  end
419
470
 
@@ -430,6 +481,7 @@ module Recls
430
481
  dummy6 = dummy6
431
482
 
432
483
  if f2_directory =~ /^[\\\/]/
484
+
433
485
  return path
434
486
  end
435
487
 
@@ -438,8 +490,10 @@ module Recls
438
490
  trailing_slash = Util.get_trailing_slash(path)
439
491
 
440
492
  if '.' == path
493
+
441
494
  return Util.trim_trailing_slash cwd
442
495
  elsif 2 == path.size and trailing_slash
496
+
443
497
  return Util.append_trailing_slash(cwd, path[1..1])
444
498
  end
445
499
 
@@ -450,8 +504,10 @@ module Recls
450
504
  path = canonicalise_path path
451
505
 
452
506
  if trailing_slash
507
+
453
508
  path = Util.append_trailing_slash path, trailing_slash
454
509
  else
510
+
455
511
  path = Util.trim_trailing_slash path
456
512
  end
457
513
 
@@ -475,25 +531,31 @@ module Recls
475
531
  # detecting the last (back)slash
476
532
 
477
533
  if Recls::Ximpl::OS::OS_IS_WINDOWS
534
+
478
535
  wr, rem = Util.get_windows_root(path)
479
536
 
480
537
  # suppress unused warning
481
538
  wr = wr
482
539
 
483
540
  if not rem
541
+
484
542
  return ''
485
543
  else
544
+
486
545
  path = rem
487
546
  end
488
547
  end
489
548
 
490
549
  if not path.is_a? String
550
+
491
551
  path = path.to_s
492
552
  end
493
553
 
494
554
  if path =~ /^.*[\/\\](.*)/
555
+
495
556
  $1
496
557
  else
558
+
497
559
  path
498
560
  end
499
561
  end
@@ -510,21 +572,28 @@ module Recls
510
572
  use_split_path = false
511
573
 
512
574
  if Recls::Ximpl::OS::OS_IS_WINDOWS
575
+
513
576
  if path.include? ?\\
577
+
514
578
  use_split_path = true
515
579
  end
516
580
  end
517
581
 
518
582
  if path.include? ?/
583
+
519
584
  use_split_path = true
520
585
  end
521
586
 
522
587
  if use_split_path
588
+
523
589
  ext = Util.split_path(path)[4]
524
590
  else
591
+
525
592
  if path =~ /^.*(\.[^.]*)$/
593
+
526
594
  ext = $1
527
595
  else
596
+
528
597
  ext = nil
529
598
  end
530
599
  end
@@ -552,10 +621,13 @@ module Recls
552
621
  directory_parts = []
553
622
 
554
623
  until directory.empty?
624
+
555
625
  if directory =~ /^([^\\\/]*[\\\/])/
626
+
556
627
  directory_parts << $1
557
628
  directory = $'
558
629
  else
630
+
559
631
  directory_parts << directory
560
632
  directory = ''
561
633
  end
@@ -581,6 +653,7 @@ module Recls
581
653
 
582
654
  # if different windows root, then cannot provide relative
583
655
  if path_splits[0] and origin_splits[0]
656
+
584
657
  return path if path_splits[0] != origin_splits[0]
585
658
  end
586
659
 
@@ -598,14 +671,17 @@ module Recls
598
671
  origin_part = origin_parts[0]
599
672
 
600
673
  if 1 == path_parts.size || 1 == origin_parts.size
674
+
601
675
  path_part = Util.append_trailing_slash(path_part)
602
676
  origin_part = Util.append_trailing_slash(origin_part)
603
677
  end
604
678
 
605
679
  if path_part == origin_part
680
+
606
681
  path_parts.shift
607
682
  origin_parts.shift
608
683
  else
684
+
609
685
  break
610
686
  end
611
687
  end
@@ -620,25 +696,46 @@ module Recls
620
696
  end
621
697
 
622
698
 
623
- def self.combine_paths(origin, path, options)
699
+ def self.combine_paths(paths, options)
624
700
 
625
- dummy1, f2_directory, dummy2, dummy3, dummy4, dummy5, dummy6 = Util.split_path(path)
701
+ paths = [ paths ] unless ::Array === paths
702
+ abs_ix = 0
626
703
 
627
- # suppress unused warnings
628
- dummy1 = dummy1
629
- dummy2 = dummy2
630
- dummy3 = dummy3
631
- dummy4 = dummy4
632
- dummy5 = dummy5
633
- dummy6 = dummy6
704
+ paths.each_with_index do |path, index|
705
+
706
+ dummy1, f2_directory, dummy2, dummy3, dummy4, dummy5, dummy6 = Util.split_path(path)
707
+
708
+ # suppress unused warnings
709
+ dummy1 = dummy1
710
+ dummy2 = dummy2
711
+ dummy3 = dummy3
712
+ dummy4 = dummy4
713
+ dummy5 = dummy5
714
+ dummy6 = dummy6
634
715
 
635
- return path if f2_directory && Util.is_path_name_separator(f2_directory[0])
716
+ if f2_directory && Util.is_path_name_separator(f2_directory[0])
636
717
 
637
- r = File.join origin, path
718
+ abs_ix = index
719
+ end
720
+ end
721
+
722
+ paths = paths[abs_ix..-1]
723
+
724
+ r = File.join *paths
725
+
726
+ cap = options[:canonicalise] || options[:canonicalize]
727
+
728
+ if cap
638
729
 
639
- if options[:clean_path]
730
+ r = Recls.canonicalise_path r
731
+ else
732
+
733
+ clp = options[:clean] || options[:clean_path]
734
+
735
+ if clp
640
736
 
641
- r = Pathname.new(r).cleanpath
737
+ r = Pathname.new(r).cleanpath.to_s
738
+ end
642
739
  end
643
740
 
644
741
  r
@@ -665,6 +762,7 @@ module Recls
665
762
  $stderr.puts "exception (#{x.class}): #{x}" if $DEBUG
666
763
 
667
764
  if(0 != (STOP_ON_ACCESS_FAILURE & flags))
765
+
668
766
  raise
669
767
  end
670
768
 
@@ -676,3 +774,4 @@ end
676
774
 
677
775
  # ############################## end of file ############################# #
678
776
 
777
+
@@ -9,150 +9,223 @@ require 'recls/util'
9
9
 
10
10
  require 'test/unit'
11
11
 
12
+ class Test_combine_paths < Test::Unit::TestCase
13
+
14
+ def test_nil_nil
15
+
16
+ assert_raise(::ArgumentError) { Recls.combine_paths(nil, nil) }
17
+ end
18
+
19
+ def test_origin_nil
20
+
21
+ strings = [
22
+
23
+ 'abc',
24
+ 'abc/def',
25
+ 'abc/def/ghi.ext',
26
+ ]
27
+
28
+ strings.each do |s|
29
+
30
+ assert_equal s, Recls.combine_paths(nil, s)
31
+ end
32
+ end
33
+
34
+ def test_path_nil
35
+
36
+ strings = [
37
+
38
+ 'abc',
39
+ 'abc/def',
40
+ 'abc/def/ghi.ext',
41
+ ]
42
+
43
+ strings.each do |s|
44
+
45
+ assert_equal s, Recls.combine_paths(s, nil)
46
+ end
47
+ end
48
+
49
+ def test_both_relative
50
+
51
+ assert_equal 'abc/def', Recls.combine_paths('abc', 'def')
52
+ assert_equal 'abc/def', Recls.combine_paths('abc/', 'def')
53
+ assert_equal 'abc/def/ghi', Recls.combine_paths('abc/def', 'ghi')
54
+ assert_equal 'abc/def/ghi', Recls.combine_paths('abc/def/', 'ghi')
55
+ assert_equal 'abc/def/ghi', Recls.combine_paths('abc', 'def/ghi')
56
+ assert_equal 'abc/def/ghi', Recls.combine_paths('abc/', 'def/ghi')
57
+ assert_equal 'abc/./def/ghi', Recls.combine_paths('abc/.', 'def/ghi')
58
+ assert_equal 'abc/./def/ghi', Recls.combine_paths('abc/./', 'def/ghi')
59
+ assert_equal 'abc/./def/ghi', Recls.combine_paths('abc/.', 'def/ghi', clean_path: false)
60
+ assert_equal 'abc/./def/ghi', Recls.combine_paths('abc/./', 'def/ghi', clean: false)
61
+ assert_equal 'abc/def/ghi', Recls.combine_paths('abc/.', 'def/ghi', clean_path: true)
62
+ assert_equal 'abc/def/ghi', Recls.combine_paths('abc/./', 'def/ghi', clean: true)
63
+ assert_equal 'abc/def/ghi', Recls.combine_paths('abc/./.', 'def/ghi', clean_path: true)
64
+ assert_equal 'abc/../def/ghi', Recls.combine_paths('abc/..', 'def/ghi')
65
+ assert_equal 'def/ghi', Recls.combine_paths('abc/..', 'def/ghi', clean_path: true)
66
+ end
67
+
68
+ def test_multiple_relative
69
+
70
+ assert_equal 'a/b/c/d/e/f/g', Recls.combine_paths('a', 'b', 'c', 'd/e/f/', 'g', clean: false)
71
+ assert_equal 'a/b/c/d/e/f/g', Recls.combine_paths('a', 'b', 'c', 'd/e/f/', 'g', clean: true)
72
+
73
+ assert_equal 'a/b/c/../d/e/f/g', Recls.combine_paths('a', 'b', 'c', '..', 'd/e/f/', 'g', clean: false)
74
+ assert_equal 'a/b/d/e/f/g', Recls.combine_paths('a', 'b', 'c', '..', 'd/e/f/', 'g/', clean: true)
75
+ assert_equal 'a/b/d/e/f/g/', Recls.combine_paths('a', 'b', 'c', '..', 'd/e/f/', 'g/', canonicalise: true)
76
+ end
77
+
78
+ def test_various_absolute_placings
79
+
80
+ assert_equal '/a/b/c/d/e/f/g', Recls.combine_paths('/', 'a', 'b', 'c', 'd/e', 'f/g')
81
+
82
+ assert_equal '/b/c/d/e/f/g', Recls.combine_paths('/', 'a', '/b', 'c', 'd/e', 'f/g')
83
+
84
+ assert_equal '/c/d/e/f/g', Recls.combine_paths('/', 'a', 'b', '/c', 'd/e', 'f/g')
85
+
86
+ assert_equal '/d/e/f/g', Recls.combine_paths('/', 'a', 'b', 'c', '/d/e', 'f/g')
87
+
88
+ assert_equal '/f/g', Recls.combine_paths('/', 'a', 'b', 'c', 'd/e', '/f/g')
89
+ assert_equal '/f/g/', Recls.combine_paths('/', 'a', 'b', 'c', 'd/e', '/f/g/')
90
+ assert_equal '/f/g', Recls.combine_paths('/', 'a', 'b', 'c', 'd/e', '/f/g/', clean: true)
91
+ assert_equal '/f/g/', Recls.combine_paths('/', 'a', 'b', 'c', 'd/e', '/f/g/', canonicalise: true)
92
+ end
93
+ end
94
+
12
95
  class Test_canonicalise_path < Test::Unit::TestCase
13
96
 
14
97
  def test_nil
15
98
 
16
- assert_nil(Recls::canonicalise_path(nil))
17
-
99
+ assert_nil(Recls.canonicalise_path(nil))
18
100
  end
19
101
 
20
102
  def test_empty
21
103
 
22
- assert_equal('', Recls::canonicalise_path(''))
23
-
104
+ assert_equal('', Recls.canonicalise_path(''))
24
105
  end
25
106
 
26
107
  def test_dots_directories
27
108
 
28
- assert_equal('.', Recls::canonicalise_path('.'))
29
- assert_equal('./', Recls::canonicalise_path('./'))
30
- assert_equal('.', Recls::canonicalise_path('././.'))
31
- assert_equal('./', Recls::canonicalise_path('./././'))
32
-
33
- assert_equal('..', Recls::canonicalise_path('..'))
34
- assert_equal('../', Recls::canonicalise_path('../'))
35
- assert_equal('..', Recls::canonicalise_path('../.'))
36
- assert_equal('../', Recls::canonicalise_path('.././'))
109
+ assert_equal('.', Recls.canonicalise_path('.'))
110
+ assert_equal('./', Recls.canonicalise_path('./'))
111
+ assert_equal('.', Recls.canonicalise_path('././.'))
112
+ assert_equal('./', Recls.canonicalise_path('./././'))
37
113
 
114
+ assert_equal('..', Recls.canonicalise_path('..'))
115
+ assert_equal('../', Recls.canonicalise_path('../'))
116
+ assert_equal('..', Recls.canonicalise_path('../.'))
117
+ assert_equal('../', Recls.canonicalise_path('.././'))
38
118
  end
39
119
 
40
120
  def test_files_only
41
121
 
42
- assert_equal('a', Recls::canonicalise_path('a'))
43
- assert_equal('file', Recls::canonicalise_path('file'))
44
- assert_equal('file.ext', Recls::canonicalise_path('file.ext'))
45
-
122
+ assert_equal('a', Recls.canonicalise_path('a'))
123
+ assert_equal('file', Recls.canonicalise_path('file'))
124
+ assert_equal('file.ext', Recls.canonicalise_path('file.ext'))
46
125
  end
47
126
 
48
127
  def test_zero_parts
49
128
 
50
129
  if Recls::Ximpl::OS::OS_IS_WINDOWS
51
130
 
52
- assert_equal('H:', Recls::canonicalise_path('H:'))
53
-
54
- assert_equal('\\\\server', Recls::canonicalise_path('\\\\server'))
55
- assert_equal('\\\\server\\', Recls::canonicalise_path('\\\\server\\'))
56
- assert_equal('\\\\server\\share', Recls::canonicalise_path('\\\\server\\share'))
57
- assert_equal('\\\\server\\share/', Recls::canonicalise_path('\\\\server\\share/'))
131
+ assert_equal('H:', Recls.canonicalise_path('H:'))
58
132
 
133
+ assert_equal('\\\\server', Recls.canonicalise_path('\\\\server'))
134
+ assert_equal('\\\\server\\', Recls.canonicalise_path('\\\\server\\'))
135
+ assert_equal('\\\\server\\share', Recls.canonicalise_path('\\\\server\\share'))
136
+ assert_equal('\\\\server\\share/', Recls.canonicalise_path('\\\\server\\share/'))
59
137
  end
60
-
61
138
  end
62
139
 
63
140
  def test_canonicalised_directories_one_level
64
141
 
65
- assert_equal('abc', Recls::canonicalise_path('abc'))
66
- assert_equal('abc/', Recls::canonicalise_path('abc/'))
67
- assert_equal('/abc', Recls::canonicalise_path('/abc'))
68
- assert_equal('/abc/', Recls::canonicalise_path('/abc/'))
69
-
70
- end # test_canonicalised_directories_one_level
142
+ assert_equal('abc', Recls.canonicalise_path('abc'))
143
+ assert_equal('abc/', Recls.canonicalise_path('abc/'))
144
+ assert_equal('/abc', Recls.canonicalise_path('/abc'))
145
+ assert_equal('/abc/', Recls.canonicalise_path('/abc/'))
146
+ end
71
147
 
72
148
  def test_canonicalised_directories_two_levels
73
149
 
74
- assert_equal('abc/def', Recls::canonicalise_path('abc/def'))
75
- assert_equal('abc/def/', Recls::canonicalise_path('abc/def/'))
76
- assert_equal('/abc/def', Recls::canonicalise_path('/abc/def'))
77
- assert_equal('/abc/def/', Recls::canonicalise_path('/abc/def/'))
78
-
79
- end # test_canonicalised_directories_two_levels
150
+ assert_equal('abc/def', Recls.canonicalise_path('abc/def'))
151
+ assert_equal('abc/def/', Recls.canonicalise_path('abc/def/'))
152
+ assert_equal('/abc/def', Recls.canonicalise_path('/abc/def'))
153
+ assert_equal('/abc/def/', Recls.canonicalise_path('/abc/def/'))
154
+ end
80
155
 
81
156
  def test_uncanonicalised_directories_one_level
82
157
 
83
- assert_equal('.', Recls::canonicalise_path('.'))
84
- assert_equal('./', Recls::canonicalise_path('./'))
85
- assert_equal('/', Recls::canonicalise_path('/.'))
86
- assert_equal('/', Recls::canonicalise_path('/./'))
87
-
88
- assert_equal('..', Recls::canonicalise_path('..'))
89
- assert_equal('../', Recls::canonicalise_path('../'))
90
- assert_equal('/', Recls::canonicalise_path('/..'))
91
- assert_equal('/', Recls::canonicalise_path('/../'))
158
+ assert_equal('.', Recls.canonicalise_path('.'))
159
+ assert_equal('./', Recls.canonicalise_path('./'))
160
+ assert_equal('/', Recls.canonicalise_path('/.'))
161
+ assert_equal('/', Recls.canonicalise_path('/./'))
92
162
 
93
- end # def test_uncanonicalised_directories_one_level
163
+ assert_equal('..', Recls.canonicalise_path('..'))
164
+ assert_equal('../', Recls.canonicalise_path('../'))
165
+ assert_equal('/', Recls.canonicalise_path('/..'))
166
+ assert_equal('/', Recls.canonicalise_path('/../'))
167
+ end
94
168
 
95
169
  def test_single_canonicalisation
96
170
 
97
- assert_equal('dir.1/', Recls::canonicalise_path('dir.1/'))
98
- assert_equal('dir.1/', Recls::canonicalise_path('dir.1/./'))
99
- assert_equal('dir.1/', Recls::canonicalise_path('./dir.1/./'))
100
- assert_equal('dir.1/', Recls::canonicalise_path('./dir.1/.'))
101
-
171
+ assert_equal('dir.1/', Recls.canonicalise_path('dir.1/'))
172
+ assert_equal('dir.1/', Recls.canonicalise_path('dir.1/./'))
173
+ assert_equal('dir.1/', Recls.canonicalise_path('./dir.1/./'))
174
+ assert_equal('dir.1/', Recls.canonicalise_path('./dir.1/.'))
102
175
  end
103
176
 
104
177
  def test_double_canonicalisation
105
178
 
106
- assert_equal('dir.1/dir.2/', Recls::canonicalise_path('dir.1/dir.2/'))
107
- assert_equal('dir.1/dir.2/', Recls::canonicalise_path('dir.1/dir.2/dir.3/../'))
108
- assert_equal('dir.1/dir.2/', Recls::canonicalise_path('dir.1/dir.2/dir.3/../'))
109
- assert_equal('dir.1/dir.2/', Recls::canonicalise_path('dir.1/dir.3/../dir.2/'))
110
- assert_equal('dir.1/dir.2/', Recls::canonicalise_path('dir.3/../dir.1/dir.2/'))
179
+ assert_equal('dir.1/dir.2/', Recls.canonicalise_path('dir.1/dir.2/'))
180
+ assert_equal('dir.1/dir.2/', Recls.canonicalise_path('dir.1/dir.2/dir.3/../'))
181
+ assert_equal('dir.1/dir.2/', Recls.canonicalise_path('dir.1/dir.2/dir.3/../'))
182
+ assert_equal('dir.1/dir.2/', Recls.canonicalise_path('dir.1/dir.3/../dir.2/'))
183
+ assert_equal('dir.1/dir.2/', Recls.canonicalise_path('dir.3/../dir.1/dir.2/'))
111
184
 
112
- assert_equal('../dir.1/dir.2/', Recls::canonicalise_path('../dir.1/dir.2/'))
113
- assert_equal('../dir.4/', Recls::canonicalise_path('../dir.1/../dir.4/'))
185
+ assert_equal('../dir.1/dir.2/', Recls.canonicalise_path('../dir.1/dir.2/'))
186
+ assert_equal('../dir.4/', Recls.canonicalise_path('../dir.1/../dir.4/'))
114
187
 
115
- assert_equal('/dir.1/dir.2/', Recls::canonicalise_path('/dir.1/dir.2/'))
116
- assert_equal('/dir.1/dir.2/', Recls::canonicalise_path('/dir.1/dir.2/dir.3/../'))
117
- assert_equal('/dir.1/dir.2/', Recls::canonicalise_path('/dir.1/dir.2/dir.3/../'))
118
- assert_equal('/dir.1/dir.2/', Recls::canonicalise_path('/dir.1/dir.3/../dir.2/'))
119
- assert_equal('/dir.1/dir.2/', Recls::canonicalise_path('/dir.3/../dir.1/dir.2/'))
188
+ assert_equal('/dir.1/dir.2/', Recls.canonicalise_path('/dir.1/dir.2/'))
189
+ assert_equal('/dir.1/dir.2/', Recls.canonicalise_path('/dir.1/dir.2/dir.3/../'))
190
+ assert_equal('/dir.1/dir.2/', Recls.canonicalise_path('/dir.1/dir.2/dir.3/../'))
191
+ assert_equal('/dir.1/dir.2/', Recls.canonicalise_path('/dir.1/dir.3/../dir.2/'))
192
+ assert_equal('/dir.1/dir.2/', Recls.canonicalise_path('/dir.3/../dir.1/dir.2/'))
120
193
 
121
- assert_equal('/dir.1/dir.2/', Recls::canonicalise_path('/../dir.1/dir.2/'))
122
- assert_equal('/dir.4/', Recls::canonicalise_path('/../dir.1/../dir.4/'))
194
+ assert_equal('/dir.1/dir.2/', Recls.canonicalise_path('/../dir.1/dir.2/'))
195
+ assert_equal('/dir.4/', Recls.canonicalise_path('/../dir.1/../dir.4/'))
123
196
 
124
- assert_equal('/dir.14/', Recls::canonicalise_path('/dir.14/dir.2/..'))
125
- assert_equal('/', Recls::canonicalise_path('/dir.14/dir.2/../..'))
126
- assert_equal('/', Recls::canonicalise_path('/dir.14/dir.2/../../..'))
127
- assert_equal('dir.14/', Recls::canonicalise_path('dir.14/dir.2/..'))
128
- assert_equal('.', Recls::canonicalise_path('dir.14/dir.2/../..'))
129
- assert_equal('..', Recls::canonicalise_path('dir.14/dir.2/../../..'))
197
+ assert_equal('/dir.14/', Recls.canonicalise_path('/dir.14/dir.2/..'))
198
+ assert_equal('/', Recls.canonicalise_path('/dir.14/dir.2/../..'))
199
+ assert_equal('/', Recls.canonicalise_path('/dir.14/dir.2/../../..'))
200
+ assert_equal('dir.14/', Recls.canonicalise_path('dir.14/dir.2/..'))
201
+ assert_equal('.', Recls.canonicalise_path('dir.14/dir.2/../..'))
202
+ assert_equal('..', Recls.canonicalise_path('dir.14/dir.2/../../..'))
130
203
 
131
204
  if Recls::Ximpl::OS::OS_IS_WINDOWS
132
205
 
133
- assert_equal('H:\\dir.1\\dir.2\\', Recls::canonicalise_path('H:\\dir.1\\dir.2\\'))
134
- assert_equal('H:\\dir.1\\dir.2\\', Recls::canonicalise_path('H:\\dir.1\\dir.2\\dir.3\\..\\'))
135
- assert_equal('H:\\dir.1\\dir.2\\', Recls::canonicalise_path('H:\\dir.1\\dir.2\\dir.3\\..\\'))
136
- assert_equal('H:\\dir.1\\dir.2\\', Recls::canonicalise_path('H:\\dir.1\\dir.3\\..\\dir.2\\'))
137
- assert_equal('H:\\dir.1\\dir.2\\', Recls::canonicalise_path('H:\\dir.3\\..\\dir.1\\dir.2\\'))
138
-
139
- assert_equal('H:\\dir.43\\dir.5\\', Recls::canonicalise_path('H:\\..\\dir.43\\dir.5\\'))
140
- assert_equal('H:\\dir.42\\', Recls::canonicalise_path('H:\\..\\dir.1\\..\\dir.42\\'))
206
+ assert_equal('H:\\dir.1\\dir.2\\', Recls.canonicalise_path('H:\\dir.1\\dir.2\\'))
207
+ assert_equal('H:\\dir.1\\dir.2\\', Recls.canonicalise_path('H:\\dir.1\\dir.2\\dir.3\\..\\'))
208
+ assert_equal('H:\\dir.1\\dir.2\\', Recls.canonicalise_path('H:\\dir.1\\dir.2\\dir.3\\..\\'))
209
+ assert_equal('H:\\dir.1\\dir.2\\', Recls.canonicalise_path('H:\\dir.1\\dir.3\\..\\dir.2\\'))
210
+ assert_equal('H:\\dir.1\\dir.2\\', Recls.canonicalise_path('H:\\dir.3\\..\\dir.1\\dir.2\\'))
141
211
 
212
+ assert_equal('H:\\dir.43\\dir.5\\', Recls.canonicalise_path('H:\\..\\dir.43\\dir.5\\'))
213
+ assert_equal('H:\\dir.42\\', Recls.canonicalise_path('H:\\..\\dir.1\\..\\dir.42\\'))
142
214
  end
143
-
144
215
  end
145
216
 
146
217
  def test_complex_examples
147
218
 
148
- assert_equal('../dir.11/dir.22/dir.33/file3.', Recls::canonicalise_path('abc/.././././.././dir.1/../dir.11/dir.22/dir.33/file3.'))
149
- assert_equal('/dir.11/dir.22/dir.33/file3.', Recls::canonicalise_path('/abc/.././././.././dir.1/../dir.11/dir.22/dir.33/file3.'))
150
- assert_equal('../dir.11/dir.22/dir.33/file3.', Recls::canonicalise_path('./././abc/.././././.././dir.1/../dir.11/dir.22/././dir.33/././file3.'))
219
+ assert_equal('../dir.11/dir.22/dir.33/file3.', Recls.canonicalise_path('abc/.././././.././dir.1/../dir.11/dir.22/dir.33/file3.'))
220
+ assert_equal('/dir.11/dir.22/dir.33/file3.', Recls.canonicalise_path('/abc/.././././.././dir.1/../dir.11/dir.22/dir.33/file3.'))
221
+ assert_equal('../dir.11/dir.22/dir.33/file3.', Recls.canonicalise_path('./././abc/.././././.././dir.1/../dir.11/dir.22/././dir.33/././file3.'))
151
222
 
152
223
  if Recls::Ximpl::OS::OS_IS_WINDOWS
153
224
 
154
225
  end
155
-
156
226
  end
157
227
  end
158
228
 
229
+ # ############################## end of file ############################# #
230
+
231
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recls-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.5
4
+ version: 2.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Wilson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-22 00:00:00.000000000 Z
11
+ date: 2018-02-05 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  RECursive LS for Ruby