path 1.3.3 → 2.0.0

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: 41ffc63c221b5b70d67fcce07e30daf31576d0dc
4
- data.tar.gz: 0c7c8abcc478aeb75915b56b9e7668c365ef543c
3
+ metadata.gz: dc79568913620a232363ac1c8337e5b163a1a910
4
+ data.tar.gz: 3b1e928062bba5999f0ffd1afd6ac8895b7838a0
5
5
  SHA512:
6
- metadata.gz: c441e94927c79b182bc5ed61677fa7c67a378a25a5ea2e5fec1c97d59ca9f6c7b8fb38e5db68d765b8aa1b0abf81b6b239c716cd47b7923bf4b7ac771f4b8bcc
7
- data.tar.gz: a0ba3ed7a92663942ce178ec3b755a37be4bb77f7e54bc2de04bb6d41f6d3dd4a64cc037df4a26319602b38af48fc7b594213237d34c31aec2de2d9f0e1d1042
6
+ metadata.gz: 81762a43a917e1b34e483753bdb72bfe5256a4eb777c07f32a5ae108b166ef67da09bef20af735b4c3e3154bdb606fffd7cc5134c99e9e474d4bb1d5ed99927e
7
+ data.tar.gz: 8456c2c9eda72afbe858e5a22cf6648297acd75a3101d5b5abc7a4d4a117dcae2e86b807f0ec585367295a2b2354f4ce3272917ef6e0a7c16d3f9ce7d7530b0f
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (C) 2011-2012 Benoit Daloze
1
+ Copyright (C) 2011-2013 Benoit Daloze
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Path - a Path manipulation library
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/path.png)](https://rubygems.org/gems/path)
4
+ [![Build Status](https://travis-ci.org/eregon/path.svg?branch=master)](https://travis-ci.org/eregon/path)
5
+ [![Build Status](https://ci.appveyor.com/api/projects/status/jg6fx1692mw8mu58/branch/master?svg=true)](https://ci.appveyor.com/project/eregon/path/branch/master)
6
+
3
7
  [Path](http://rubydoc.info/github/eregon/path/master/Path) is a library to manage paths.
4
8
  It is similar to Pathname, but has some extra goodness.
5
9
  The method names are intended to be short and explicit, and avoid too much duplication like having 'name' or 'path' in the method name.
@@ -7,7 +11,13 @@ The method names are intended to be short and explicit, and avoid too much dupli
7
11
  I believe the object-oriented approach to manipulate paths is very elegant and useful.
8
12
  Paths are naturally the subject of their methods and even if they are simple Strings behind, they carry way much more information and deserve a first-class status.
9
13
 
10
- Also, using a path library like this avoid to remember in which class the functionality is implemented, everything is in one place (if not, please open an issue!).
14
+ With `Path`, there is no need to remember in which class the functionality is implemented, everything is in one place (if not, please open an issue!).
15
+
16
+ ## Version 2
17
+
18
+ This is the second version of Path, which tries to respect even more
19
+ the standard library names and the principle of least surprise.
20
+ For the first version, see the branch [1.3.x](https://github.com/eregon/path/tree/1.3.x).
11
21
 
12
22
  ## Installation
13
23
 
@@ -31,7 +41,7 @@ Most methods of `FileUtils` should be there too.
31
41
  ``` ruby
32
42
  Path.new('/usr/bin')
33
43
  Path['/usr/bin']
34
- Path('/usr/bin') # unless NO_PATH_GLOBAL_FUNCTION is defined
44
+ Path('/usr/bin')
35
45
 
36
46
  Path.new('~myuser/path') # expanded if it begins with ~
37
47
 
@@ -50,7 +60,7 @@ Path.home or Path.~ # == Path(File.expand_path('~'))
50
60
  Path.~(user) # == Path(File.expand_path("~#{user}"))
51
61
  ```
52
62
 
53
- ### temporary
63
+ ### temporary paths
54
64
 
55
65
  ``` ruby
56
66
  Path.tmpfile
@@ -62,37 +72,25 @@ Path.tmpdir
62
72
  * expand => expand\_path
63
73
  * relative\_to => relative\_path\_from
64
74
 
65
- ### parts
66
-
67
- Path can split a path in two ways:
68
-
69
- The first way is the one done by File methods (dirname, basename, extname).
70
-
71
- The second is Path's own way in which the base is given without the extension and the extension is given without the leading dot.
72
- The rationale behind this is to have a true three-components path, splitting on the / and the . (See [this issue](https://github.com/eregon/path/pull/8#issuecomment-3499030) for details)
73
-
74
- dirname basename
75
- ____________ ______
76
- / \ / \
77
- /some/path/dir/file.ext
78
- \____________/ \__/ \_/
79
- dir base ext
75
+ ### parts and decomposition
80
76
 
81
- path = dirname / basename
82
- path = dirname / basename(extname) extname
83
- path = dir / base [. ext]
77
+ A path can be split in two or three parts:
84
78
 
85
- * dirname: "/some/path/dir"
86
- * basename: "file.ext"
87
- * extname: ".ext"
79
+ dir base
80
+ _______ ______
81
+ / \ / \
82
+ /some/dir/file.ext
83
+ \_______/ \__/\__/
84
+ dir stem ext
88
85
 
89
- <!-- -->
86
+ path = dir "/" base = dir "/" stem ext
90
87
 
91
- * dir: alias of dirname: "/some/paths/dir"
92
- * base: basename(extname), the basename without the extension: "file"
93
- * ext: extname without the leading dot: "ext"
88
+ All of these are methods of Path:
94
89
 
95
- <!-- -->
90
+ * dir: "/some/dir"
91
+ * base: "file.ext"
92
+ * ext: ".ext"
93
+ * stem: "file"
96
94
 
97
95
  ### join
98
96
 
@@ -103,18 +101,18 @@ The rationale behind this is to have a true three-components path, splitting on
103
101
  Path('/usr')/'bin'
104
102
  ```
105
103
 
106
- ### extensions
104
+ ### file extensions
107
105
 
108
106
  * add\_ext / add\_extension
109
107
  * rm\_ext / without\_extension
110
108
  * sub\_ext(new\_ext) / replace\_extension(new\_ext)
111
109
 
112
- ### glob
110
+ ### globbing
113
111
 
114
112
  * children: files under self, without . and ..
115
113
  * glob: relative glob to self, yield absolute paths
116
114
 
117
- ### structure
115
+ ### navigating the structure
118
116
 
119
117
  * parent: parent directory (don't use #dirname more than once, use #parent instead)
120
118
  * ascend, ancestors: self and all the parent directories
@@ -122,7 +120,7 @@ Path('/usr')/'bin'
122
120
  * backfind: ascends the parents until it finds the given path
123
121
 
124
122
  ``` ruby
125
- # Path.backfind is Path.here.backfind
123
+ # Path.backfind is Path.dir.backfind
126
124
  Path.backfind('lib') # => Path's lib folder
127
125
 
128
126
  # It accepts XPath-like context
@@ -135,7 +133,7 @@ Path.backfind('.[.git]') # => the root of this repository
135
133
  * write(contents)
136
134
  * append(contents)
137
135
 
138
- ### management
136
+ ### directory management
139
137
 
140
138
  * mkdir
141
139
  * mkdir\_p
@@ -161,12 +159,12 @@ earth.relocate(from, to, '.png') { |rel| "#{rel}-200" }
161
159
  One aim of Path is to help the user make the transition coming from
162
160
  String (not using a path library), Pathname, or another library.
163
161
 
164
- To this intend, [`Path + config`](http://rubydoc.info/github/eregon/path/master/Path#%2B-class_method) allows to configure the behavior of `Path#+`.
162
+ To this intent, [`Path.configure`](http://rubydoc.info/github/eregon/path/master/Path#configure-class_method) allows to configure the behavior of `Path#+`.
165
163
 
166
- Coming from String, one should use `Path + :string`, and run ruby with the verbose option (`-w`),
164
+ Coming from String, one should use `Path.configure(:+ => :string)`, and run ruby with the verbose option (`-w`),
167
165
  which will show where `+` is used as String concatenation.
168
166
 
169
- Coming from a path library using `+` as #join, one should just use the default (`Path + :warning`),
167
+ Coming from a path library using `+` as #join, one should just use the default (`Path.configure(:+ => :warning)`),
170
168
  which will show where `+` is used.
171
169
 
172
170
  ## Status
@@ -14,7 +14,6 @@ class Path
14
14
  # v This : is there to define a group without capturing
15
15
  new(from.first.rpartition(/:\d+(?:$|:in )/).first).expand
16
16
  end
17
- alias :here :file
18
17
 
19
18
  # {Path} to the directory of this file: +Path(__FILE__).dir+.
20
19
  def dir(from = nil)
@@ -146,9 +145,9 @@ class Path
146
145
  def relocate(from, to, new_ext = ext, &updater)
147
146
  updater ||= lambda { |path| path }
148
147
  renamer = lambda { |rel|
149
- Path(updater.call(rel.rm_ext)).add_ext(new_ext)
148
+ Path.new(updater.call(rel.rm_ext)).add_ext(new_ext)
150
149
  }
151
- to / renamer.call(self % from)
150
+ Path.new(to) / renamer.call(self % from)
152
151
  end
153
152
 
154
153
  # Setup
@@ -166,6 +165,3 @@ class Path
166
165
  eval path.read
167
166
  end
168
167
  end
169
-
170
- # to meet everyone's expectations and for compatibility with old gem name
171
- EPath = Path
@@ -2,6 +2,12 @@ class Path
2
2
  class << self
3
3
  # @!group Directory
4
4
 
5
+ # Escape the path to be suitable for globbing
6
+ # (so it contains no globbing special characters)
7
+ def glob_escape(path)
8
+ path.gsub(/\[|\]|\*|\?|\{|\}/, '\\\\' + '\0')
9
+ end
10
+
5
11
  # Returns or yields Path objects. See +Dir.glob+.
6
12
  # @yieldparam [Path] path
7
13
  def glob(pattern, flags = 0)
@@ -56,13 +62,16 @@ class Path
56
62
  Dir.open(@path, &block)
57
63
  end
58
64
 
59
- # Returns or yields Path objects. See +Dir.glob+.
65
+ # Returns or yields Path objects.
66
+ # Prepends the (escaped for globbing) +path+ to the pattern.
67
+ # See +Dir.glob+.
60
68
  # @yieldparam [Path] path
61
69
  def glob(pattern, flags = 0)
70
+ pattern = "#{Path.glob_escape(@path)}/#{pattern}"
62
71
  if block_given?
63
- Dir.glob(join(pattern), flags) { |f| yield Path.new(f) }
72
+ Dir.glob(pattern, flags) { |f| yield Path.new(f) }
64
73
  else
65
- Dir.glob(join(pattern), flags).map(&Path)
74
+ Dir.glob(pattern, flags).map(&Path)
66
75
  end
67
76
  end
68
77
 
@@ -145,4 +154,15 @@ class Path
145
154
  def each_child(with_directory=true, &b)
146
155
  children(with_directory).each(&b)
147
156
  end
157
+
158
+ # Equivalent of +parent.children - [self]+.
159
+ # Returns the siblings, the files in the same directory as the current +path+.
160
+ # Returns only the root if +path+ is the root.
161
+ def siblings(with_directory = true)
162
+ if root?
163
+ [self]
164
+ else
165
+ parent.children(with_directory) - [(with_directory ? self : basename)]
166
+ end
167
+ end
148
168
  end
@@ -1,12 +1,12 @@
1
1
  class Path
2
2
  # @!group File
3
3
 
4
- # Returns last access time. See +File.atime+.
4
+ # Returns the last access time. See +File.atime+.
5
5
  def atime
6
6
  File.atime(@path)
7
7
  end
8
8
 
9
- # Returns last change time (of the directory entry, not the file itself).
9
+ # Returns the last change time (of the directory entry, not the file itself).
10
10
  # See +File.ctime+.
11
11
  def ctime
12
12
  File.ctime(@path)
@@ -27,7 +27,7 @@ class Path
27
27
  File.lchmod(mode, @path)
28
28
  end
29
29
 
30
- # Changes the owner and group of the file. See +File.chown+.
30
+ # Changes the owner and group of +path+. See +File.chown+.
31
31
  def chown(owner, group)
32
32
  File.chown(owner, group, @path)
33
33
  end
@@ -60,7 +60,7 @@ class Path
60
60
  # Renames the file and returns the new Path. See +File.rename+.
61
61
  def rename(to)
62
62
  File.rename(@path, to)
63
- Path(to)
63
+ Path.new(to)
64
64
  end
65
65
 
66
66
  # Returns the stat of +path+ as a +File::Stat+ object. See +File.stat+.
@@ -114,13 +114,14 @@ class Path
114
114
  end
115
115
  alias :expand_path :expand
116
116
 
117
- # Returns the real (absolute) path of +self+ in the actual
117
+ # Returns the real (absolute) path for +self+ in the actual
118
118
  # filesystem not containing symlinks or useless dots.
119
119
  #
120
120
  # All components of the path must exist when this method is called.
121
121
  def realpath(basedir=nil)
122
122
  Path.new(real_path_internal(true, basedir))
123
123
  end
124
+ alias :real :realpath
124
125
 
125
126
  # Returns the real (absolute) path of +self+ in the actual filesystem.
126
127
  # The real path doesn't contain symlinks or useless dots.
@@ -1,15 +1,17 @@
1
1
  class Path
2
- # Path#find is an iterator to traverse a directory tree in a depth first
3
- # manner. It yields a Path for each file under "this" directory.
2
+ # Iterates over the directory tree in a depth first
3
+ # manner, yielding a Path for each file under "this" directory.
4
4
  #
5
- # Returns an enumerator if no block is given.
5
+ # Returns an Enumerator if no block is given.
6
6
  #
7
- # Since it is implemented by +find.rb+, +Find.prune+ can be used
8
- # to control the traversal.
7
+ # Since it is implemented by the standard library module Find, +Find.prune+
8
+ # can be used to control the traversal.
9
9
  #
10
10
  # If +self+ is +.+, yielded paths begin with a filename in the
11
11
  # current directory, not +./+.
12
12
  #
13
+ # See +Find.find+.
14
+ #
13
15
  # @yieldparam [Path] path
14
16
  def find
15
17
  return to_enum(__method__) unless block_given?
@@ -80,11 +80,9 @@ class Path
80
80
  # Returns the +path+ as a String.
81
81
  # {#path} is implemented for better readability (+file.path+ instead of +file.to_s+) and as an accessor.
82
82
  # {#to_path} is implemented so Path objects are usable with +open+, etc.
83
- # {#to_str} is implemented so Path objects are usable with +open+, etc with Ruby 1.8 (it is not defined in Ruby 1.9).
84
83
  attr_reader :path
85
84
  alias :to_s :path
86
85
  alias :to_path :path
87
- alias :to_str :path if RUBY_VERSION < '1.9'
88
86
 
89
87
  # Compare this path with +other+. The comparison is string-based.
90
88
  # Be aware that two different paths (+foo.txt+ and +./foo.txt+)
@@ -94,7 +92,7 @@ class Path
94
92
  end
95
93
  alias :eql? :==
96
94
 
97
- # Provides for comparing paths, case-sensitively.
95
+ # Provides a case-sensitive comparison operator for paths.
98
96
  def <=>(other)
99
97
  return nil unless Path === other
100
98
  @path.tr('/', "\0") <=> other.path.tr('/', "\0")
@@ -151,12 +149,11 @@ class Path
151
149
  end
152
150
  end
153
151
 
154
- unless defined?(NO_PATH_GLOBAL_FUNCTION)
155
- module Kernel
156
- # A shorthand method to create a {Path}. Same as {Path.new}.
157
- def Path(*args)
158
- Path.new(*args)
159
- end
160
- private :Path
152
+ # @private The extension to define the global method Path()
153
+ module Kernel
154
+ # A shorthand method to create a {Path}. Same as {Path.new}.
155
+ def Path(*args)
156
+ Path.new(*args)
161
157
  end
158
+ private :Path
162
159
  end
@@ -20,13 +20,13 @@ class Path
20
20
  end
21
21
  alias :cleanpath :clean
22
22
 
23
- # #parent returns the parent directory.
23
+ # Returns the parent directory.
24
24
  # This can be chained.
25
25
  def parent
26
26
  self / '..'
27
27
  end
28
28
 
29
- # Path#/ appends a path fragment to this one to produce a new Path.
29
+ # Path#/ appends a path fragment to +self+ to produce a new Path.
30
30
  #
31
31
  # p = Path.new("/usr") # => #<Path /usr>
32
32
  # p / "bin/ruby" # => #<Path /usr/bin/ruby>
@@ -39,18 +39,19 @@ class Path
39
39
 
40
40
  # Configures the behavior of {Path#+}. The default is +:warning+.
41
41
  #
42
- # Path + :defined # aliased to Path#/
43
- # Path + :warning # calls Path#/ but warns
44
- # Path + :error # not defined
45
- # Path + :string # like String#+. Warns if $VERBOSE (-w)
42
+ # Path.configure(:+ => :defined) # aliased to Path#/
43
+ # Path.configure(:+ => :warning) # calls Path#/ but warns
44
+ # Path.configure(:+ => :error) # not defined
45
+ # Path.configure(:+ => :string) # like String#+. Warns if $VERBOSE (-w)
46
46
  #
47
- # @param config [:defined, :warning, :error, :string] the configuration value
48
- def Path.+(config)
47
+ # @option config [:defined, :warning, :error, :string] :+ the configuration value
48
+ def Path.configure(config)
49
+ config = config[:+]
49
50
  unless [:defined, :warning, :error, :string].include? config
50
51
  raise ArgumentError, "Invalid configuration: #{config.inspect}"
51
52
  end
52
53
  if @plus_configured
53
- raise "Path.+ has already been called: #{@plus_configured}"
54
+ raise "Path.configure(:+ => ...) has already been called: #{@plus_configured}"
54
55
  end
55
56
  remove_method :+ if method_defined? :+
56
57
  case config
@@ -68,21 +69,18 @@ class Path
68
69
  def +(other)
69
70
  warn 'Warning: use of deprecated Path#+ as String#+: ' <<
70
71
  "#{inspect} + #{other.inspect}\n#{caller.first}" if $VERBOSE
71
- Path(to_s + other.to_s)
72
+ Path.new(to_s + other.to_s)
72
73
  end
73
74
  end
74
75
  @plus_configured = caller.first
75
76
  end
76
- class << self
77
- alias :configure_plus :+
78
- end
79
77
 
80
78
  @plus_configured = nil # Initialization
81
- Path.configure_plus(:warning)
79
+ Path.configure(:+ => :warning)
82
80
  @plus_configured = nil # Let the user overrides this default configuration
83
81
 
84
82
  # @!method +(other)
85
- # The behavior depends on the configuration with Path.{Path.+}.
83
+ # The behavior depends on the configuration with {Path.configure}.
86
84
  # It might behave as {Path#/}, String#+, give warnings,
87
85
  # or not be defined at all.
88
86
 
@@ -100,10 +98,10 @@ class Path
100
98
  self / result
101
99
  end
102
100
 
103
- # #relative_path_from returns a relative path from the argument to the
104
- # receiver. They must be both relative or both absolute.
101
+ # #relative_path_from returns a relative path from the given +base_directory+
102
+ # to the receiver. They must be both relative or both absolute.
105
103
  #
106
- # #relative_path_from doesn't access the filesystem. It assumes no symlinks.
104
+ # It doesn't access the filesystem and assumes no symlinks.
107
105
  #
108
106
  # @raise [ArgumentError] if it cannot find a relative path:
109
107
  # Either the base is relative and contains '..' (in that case you can expand
@@ -130,24 +128,6 @@ class Path
130
128
  alias :relative_to :relative_path_from
131
129
  alias :% :relative_path_from
132
130
 
133
- # @private
134
- module Helpers
135
- private
136
-
137
- # remove the leading . of +ext+ if present.
138
- def pure_ext(ext)
139
- ext = ext.to_s and ext.start_with?('.') ? ext[1..-1] : ext
140
- end
141
-
142
- # add a leading . to +ext+ if missing. Returns '' if +ext+ is empty.
143
- def dotted_ext(ext)
144
- ext = ext.to_s and (ext.empty? or ext.start_with?('.')) ? ext : ".#{ext}"
145
- end
146
- end
147
-
148
- include Helpers
149
- extend Helpers
150
-
151
131
  private
152
132
 
153
133
  def init
@@ -161,6 +141,7 @@ class Path
161
141
  def validate(path)
162
142
  raise ArgumentError, "path contains a null byte: #{path.inspect}" if path.include? "\0"
163
143
  path.gsub!(File::ALT_SEPARATOR, '/') if File::ALT_SEPARATOR
144
+ path = del_trailing_separator(path)
164
145
  path = File.expand_path(path) if path.start_with? '~'
165
146
  path
166
147
  end
@@ -230,7 +211,7 @@ class Path
230
211
  names.shift while names.first == '..' if is_root?(prefix)
231
212
  end
232
213
 
233
- # Clean the path simply by resolving and removing excess "." and ".." entries.
214
+ # Clean the path simply by resolving and removing excess +.+ and +..+ entries.
234
215
  # Nothing more, nothing less.
235
216
  def cleanpath_aggressive
236
217
  pre = @path
@@ -12,7 +12,7 @@ class Path
12
12
  # @yieldparam [Path] path
13
13
  def self.register_loader(*extensions, &loader)
14
14
  extensions.each { |ext|
15
- LOADERS[pure_ext(ext)] = loader
15
+ LOADERS[Path.dotted_ext(ext)] = loader
16
16
  }
17
17
  end
18
18
 
@@ -1,14 +1,25 @@
1
1
  class Path
2
2
  # @!group Path parts
3
3
 
4
+ # remove the leading . of +ext+ if present.
5
+ def self.pure_ext(ext)
6
+ ext = ext.to_s and ext.start_with?('.') ? ext[1..-1] : ext
7
+ end
8
+
9
+ # add a leading . to +ext+ if missing. Returns '' if +ext+ is empty.
10
+ def self.dotted_ext(ext)
11
+ ext = ext.to_s and (ext.empty? or ext.start_with?('.')) ? ext : ".#{ext}"
12
+ end
13
+
4
14
  # Returns the last component of the path. See +File.basename+.
5
- def basename(*args)
15
+ def base(*args)
6
16
  Path.new(File.basename(@path, *args))
7
17
  end
18
+ alias :basename :base
8
19
 
9
- # basename(extname)
10
- def base
11
- basename(extname)
20
+ # Returns the last component of the path, without the extension: base(ext)
21
+ def stem
22
+ base(ext)
12
23
  end
13
24
 
14
25
  # Returns all but the last component of the path.
@@ -17,20 +28,20 @@ class Path
17
28
  # Path('.').dir # => #<Path .>
18
29
  # Use #parent instead.
19
30
  # See +File.dirname+.
20
- def dirname
31
+ def dir
21
32
  Path.new(File.dirname(@path))
22
33
  end
23
- alias :dir :dirname
34
+ alias :dirname :dir
24
35
 
25
36
  # Returns the extension, with a leading dot. See +File.extname+.
26
- def extname
37
+ def ext
27
38
  File.extname(@path)
28
39
  end
40
+ alias :extname :ext
29
41
 
30
- # {#extname} without leading dot.
31
- def ext
32
- ext = extname
33
- ext.empty? ? ext : ext[1..-1]
42
+ # {#ext} without leading dot.
43
+ def pure_ext
44
+ Path.pure_ext(extname)
34
45
  end
35
46
 
36
47
  # Returns the #dirname and the #basename in an Array. See +File.split+.
@@ -45,7 +56,7 @@ class Path
45
56
  # Path('file').add_extension('txt') # => #<Path file.txt>
46
57
  def add_extension(ext)
47
58
  return self if ext.to_s.empty?
48
- Path.new @path+dotted_ext(ext)
59
+ Path.new @path + Path.dotted_ext(ext)
49
60
  end
50
61
  alias :add_ext :add_extension
51
62
 
@@ -65,7 +76,7 @@ class Path
65
76
  # Path('main.c++').replace_extension('cc') # => #<Path main.cc>
66
77
  def replace_extension(ext)
67
78
  return without_extension if ext.to_s.empty?
68
- Path.new(@path[0..-extname.size-1] << dotted_ext(ext))
79
+ Path.new(@path[0..-extname.size-1] << Path.dotted_ext(ext))
69
80
  end
70
81
  alias :sub_ext :replace_extension
71
82
 
@@ -74,6 +85,7 @@ class Path
74
85
  # Path.new("/usr/bin/ruby").each_filename { |filename| ... }
75
86
  # # yields "usr", "bin", and "ruby".
76
87
  #
88
+ # Returns an Enumerator if no block was given.
77
89
  # @yieldparam [String] filename
78
90
  def each_filename
79
91
  return to_enum(__method__) unless block_given?
@@ -97,7 +109,7 @@ class Path
97
109
  # #<Path path/to/some>
98
110
  # #<Path path/to/some/file.rb>
99
111
  #
100
- # It doesn't access actual filesystem.
112
+ # It doesn't access the filesystem.
101
113
  # @yieldparam [Path] path
102
114
  def descend
103
115
  return to_enum(:descend) unless block_given?
@@ -120,7 +132,7 @@ class Path
120
132
  # #<Path path/to>
121
133
  # #<Path path>
122
134
  #
123
- # It doesn't access actual filesystem.
135
+ # It doesn't access the filesystem.
124
136
  # @yieldparam [Path] path
125
137
  def ascend
126
138
  return to_enum(:ascend) unless block_given?
@@ -11,16 +11,16 @@ class Path
11
11
  not absolute?
12
12
  end
13
13
 
14
- # #root? is a predicate for root directories. I.e. it returns +true+ if the
14
+ # Predicate for root directories. Returns +true+ if the
15
15
  # path consists of consecutive slashes.
16
16
  #
17
- # It doesn't access actual filesystem. So it may return +false+ for some
17
+ # It doesn't access the filesystem. So it may return +false+ for some
18
18
  # paths which points to roots such as +/usr/..+.
19
19
  def root?
20
20
  is_root?(@path)
21
21
  end
22
22
 
23
- # #mountpoint? returns +true+ if +self+ points to a mountpoint.
23
+ # Returns +true+ if +self+ points to a mountpoint.
24
24
  def mountpoint?
25
25
  begin
26
26
  stat1 = lstat
@@ -1,5 +1,5 @@
1
1
  class Path
2
2
  # The version of the gem.
3
3
  # Set here to avoid duplication and allow introspection.
4
- VERSION = '1.3.3'
4
+ VERSION = '2.0.0'
5
5
  end
@@ -8,7 +8,6 @@ Gem::Specification.new do |s|
8
8
  s.email = 'eregontp@gmail.com'
9
9
  s.homepage = 'https://github.com/eregon/path'
10
10
  s.files = Dir['lib/**/*.rb'] + %w[README.md LICENSE path.gemspec]
11
+ s.licenses = ['MIT']
11
12
  s.version = Path::VERSION
12
-
13
- s.add_development_dependency 'rspec'
14
13
  end
metadata CHANGED
@@ -1,35 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: path
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - eregon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-02 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rspec
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: '0'
11
+ date: 2016-11-13 00:00:00.000000000 Z
12
+ dependencies: []
27
13
  description: Path is a library to easily manage paths and with a lot of extra goodness.
28
14
  email: eregontp@gmail.com
29
15
  executables: []
30
16
  extensions: []
31
17
  extra_rdoc_files: []
32
18
  files:
19
+ - LICENSE
20
+ - README.md
21
+ - lib/path.rb
33
22
  - lib/path/compatibility.rb
34
23
  - lib/path/dir.rb
35
24
  - lib/path/file.rb
@@ -44,12 +33,10 @@ files:
44
33
  - lib/path/predicates.rb
45
34
  - lib/path/require_tree.rb
46
35
  - lib/path/version.rb
47
- - lib/path.rb
48
- - README.md
49
- - LICENSE
50
36
  - path.gemspec
51
37
  homepage: https://github.com/eregon/path
52
- licenses: []
38
+ licenses:
39
+ - MIT
53
40
  metadata: {}
54
41
  post_install_message:
55
42
  rdoc_options: []
@@ -57,17 +44,17 @@ require_paths:
57
44
  - lib
58
45
  required_ruby_version: !ruby/object:Gem::Requirement
59
46
  requirements:
60
- - - '>='
47
+ - - ">="
61
48
  - !ruby/object:Gem::Version
62
49
  version: '0'
63
50
  required_rubygems_version: !ruby/object:Gem::Requirement
64
51
  requirements:
65
- - - '>='
52
+ - - ">="
66
53
  - !ruby/object:Gem::Version
67
54
  version: '0'
68
55
  requirements: []
69
56
  rubyforge_project:
70
- rubygems_version: 2.0.3
57
+ rubygems_version: 2.5.1
71
58
  signing_key:
72
59
  specification_version: 4
73
60
  summary: The Path manipulation library