pleasant_path 1.3.0 → 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
  SHA256:
3
- metadata.gz: b6e3e6a96f3381618fe73ebb4d09a95cd607f22939398eb4352da162fed9581e
4
- data.tar.gz: 995c964b867b1632d22bf58da748afadcb0a2d3824680a1c8fdcbf69fd494d1e
3
+ metadata.gz: bf7518ec3e9771e1feeea6211f4aa6e60804166a861d83d481d1a6eb9275874f
4
+ data.tar.gz: d227b85723683286ee43921625b68e08cfeb656443d4e7ee90d2ff3538f7f817
5
5
  SHA512:
6
- metadata.gz: 3c0d567cbb4c9579685a4f1923b74787321d03f4118d46af4c863272ec1ef63af48e42c0cd17a6b431043bc43a32d621c810bbae9c05ca9a4933e2d8feecff31
7
- data.tar.gz: 10d3683e71e7dc881dde05622bdb1d7d53c83ce853f6376f9dc48bb53cc1150a1f67bf412bb80d7ff8717f1aaf03693c78c64d865c4c8820861b5149ae9fcdad
6
+ metadata.gz: 12c3fff1b2a1cd134c10176cca26b3d7cf0c8722fa1e3925fa7805bbc652a8886b98bd5d15df96d23609016090339a8088f31f0b66a7444c3af2d1d37b808e1d
7
+ data.tar.gz: e6d990d3271a9b89e3ae68b31e06c7a520f75b12d0a0baf2a528985551bed69f6700d012d395f91c0577ed769e736ac853373b0088c0097f4c033e58aa1770fe
@@ -1,5 +1,5 @@
1
- sudo: false
2
1
  language: ruby
2
+
3
3
  rvm:
4
- - 2.2.5
5
- before_install: gem install bundler -v 1.13.5
4
+ - 2.6
5
+ - 2.7
@@ -1,3 +1,19 @@
1
+ ## 2.0.0
2
+
3
+ * [BREAKING] Drop support for Ruby < 2.6
4
+ * [BREAKING] Remove `Pathname#dir_empty?`
5
+ * Use `Pathname#empty?` instead
6
+ * [BREAKING] Remove `Pathname#touch_file`
7
+ * Use `Pathname#make_file` instead
8
+ * [BREAKING] Remove `String#^`
9
+ * [BREAKING] Remove `String#glob`
10
+ * [BREAKING] Cease creating parent directories in `Pathname#move`
11
+ * [BREAKING] Cease creating parent directories in `Pathname#copy`
12
+ * [BREAKING] Cease prepending dot in `Pathname#rename_extname`
13
+ * [BREAKING] Change `Pathname#edit_text` to return the Pathname
14
+ * [BREAKING] Change `Pathname#edit_lines` to return the Pathname
15
+
16
+
1
17
  ## 1.3.0
2
18
 
3
19
  * Add `Pathname#find_dirs`
@@ -6,8 +22,8 @@
6
22
  * Add `Pathname#available_name`
7
23
  * Add `Pathname#move_as`
8
24
  * Add `Pathname#copy_as`
9
- * Add `eol` parameter to line-oriented methods (`Pathname#read_lines`,
10
- `Pathname#write_lines`, `Pathname#append_lines`, etc)
25
+ * Add `eol` parameter to line-oriented methods (e.g.
26
+ `Pathname#read_lines`, `Pathname#write_lines`, etc)
11
27
  * Move Array methods to Enumerable
12
28
  * Use `JSON.dump_default_options` and `JSON.load_default_options` in
13
29
  JSON-related API
@@ -17,16 +33,20 @@
17
33
 
18
34
  * Add `Pathname#existence`
19
35
  * Add `Pathname#chdir`
20
- * Fix `Object#write_to_yaml` to make parent directories as necessary
36
+ * Fix `Object#write_to_yaml` to create parent directories as necessary
21
37
 
22
38
 
23
39
  ## 1.1.0
24
40
 
25
- * Add `Pathname#copy` and `Pathname#copy_into`
26
- * Add `Pathname#rename_basename` and `Pathname#rename_extname`
27
- * Add `File.common_path` and `Pathname#common_path`
41
+ * Add `Pathname#copy`
42
+ * Add `Pathname#copy_into`
43
+ * Add `Pathname#rename_basename`
44
+ * Add `Pathname#rename_extname`
45
+ * Add `File.common_path`
46
+ * Add `Pathname#common_path`
28
47
  * Add `Pathname::NULL`
29
- * Add JSON-related and YAML-related APIs
48
+ * Add JSON-related API
49
+ * Add YAML-related API
30
50
  * Fix `File.edit_text` and `File.edit_lines` to properly truncate
31
51
 
32
52
 
data/Gemfile CHANGED
@@ -1,4 +1,7 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in pleasant_path.gemspec
4
4
  gemspec
5
+
6
+ gem "rake", "~> 12.0"
7
+ gem "minitest", "~> 5.0"
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
- # pleasant_path
1
+ # pleasant_path [![Build Status](https://travis-ci.org/jonathanhefner/pleasant_path.svg?branch=master)](https://travis-ci.org/jonathanhefner/pleasant_path)
2
2
 
3
3
  A [fluent API] for pleasant file IO, written as extensions to core Ruby
4
4
  objects. See API listing below, or browse the [full documentation].
5
5
 
6
6
  [fluent API]: https://en.wikipedia.org/wiki/Fluent_interface
7
- [full documentation]: http://www.rubydoc.info/gems/pleasant_path/
7
+ [full documentation]: https://www.rubydoc.info/gems/pleasant_path/
8
8
 
9
9
 
10
10
  ## Examples
@@ -22,58 +22,58 @@ objects. See API listing below, or browse the [full documentation].
22
22
 
23
23
  The following methods are available:
24
24
 
25
- - [Pathname](http://www.rubydoc.info/gems/pleasant_path/Pathname)
26
- - [::NULL](http://www.rubydoc.info/gems/pleasant_path/Pathname#NULL-constant)
27
- - [#^](http://www.rubydoc.info/gems/pleasant_path/Pathname:%5E)
28
- - [#append_file](http://www.rubydoc.info/gems/pleasant_path/Pathname:append_file)
29
- - [#append_lines](http://www.rubydoc.info/gems/pleasant_path/Pathname:append_lines)
30
- - [#append_text](http://www.rubydoc.info/gems/pleasant_path/Pathname:append_text)
31
- - [#available_name](http://www.rubydoc.info/gems/pleasant_path/Pathname:available_name)
32
- - [#chdir](http://www.rubydoc.info/gems/pleasant_path/Pathname:chdir)
33
- - [#common_path](http://www.rubydoc.info/gems/pleasant_path/Pathname:common_path)
34
- - [#copy](http://www.rubydoc.info/gems/pleasant_path/Pathname:copy)
35
- - [#copy_as](http://www.rubydoc.info/gems/pleasant_path/Pathname:copy_as)
36
- - [#copy_into](http://www.rubydoc.info/gems/pleasant_path/Pathname:copy_into)
37
- - [#delete!](http://www.rubydoc.info/gems/pleasant_path/Pathname:delete%21)
38
- - [#dir?](http://www.rubydoc.info/gems/pleasant_path/Pathname:dir%3F)
39
- - [#dirs](http://www.rubydoc.info/gems/pleasant_path/Pathname:dirs)
40
- - [#dirs_r](http://www.rubydoc.info/gems/pleasant_path/Pathname:dirs_r)
41
- - [#edit_lines](http://www.rubydoc.info/gems/pleasant_path/Pathname:edit_lines)
42
- - [#edit_text](http://www.rubydoc.info/gems/pleasant_path/Pathname:edit_text)
43
- - [#existence](http://www.rubydoc.info/gems/pleasant_path/Pathname:existence)
44
- - [#files](http://www.rubydoc.info/gems/pleasant_path/Pathname:files)
45
- - [#files_r](http://www.rubydoc.info/gems/pleasant_path/Pathname:files_r)
46
- - [#find_dirs](http://www.rubydoc.info/gems/pleasant_path/Pathname:find_dirs)
47
- - [#find_files](http://www.rubydoc.info/gems/pleasant_path/Pathname:find_files)
48
- - [#make_dir](http://www.rubydoc.info/gems/pleasant_path/Pathname:make_dir)
49
- - [#make_dirname](http://www.rubydoc.info/gems/pleasant_path/Pathname:make_dirname)
50
- - [#make_file](http://www.rubydoc.info/gems/pleasant_path/Pathname:make_file)
51
- - [#move](http://www.rubydoc.info/gems/pleasant_path/Pathname:move)
52
- - [#move_as](http://www.rubydoc.info/gems/pleasant_path/Pathname:move_as)
53
- - [#move_into](http://www.rubydoc.info/gems/pleasant_path/Pathname:move_into)
54
- - [#parentname](http://www.rubydoc.info/gems/pleasant_path/Pathname:parentname)
55
- - [#read_lines](http://www.rubydoc.info/gems/pleasant_path/Pathname:read_lines)
56
- - [#rename_basename](http://www.rubydoc.info/gems/pleasant_path/Pathname:rename_basename)
57
- - [#rename_extname](http://www.rubydoc.info/gems/pleasant_path/Pathname:rename_extname)
58
- - [#to_pathname](http://www.rubydoc.info/gems/pleasant_path/Pathname:to_pathname)
59
- - [#write_lines](http://www.rubydoc.info/gems/pleasant_path/Pathname:write_lines)
60
- - [#write_text](http://www.rubydoc.info/gems/pleasant_path/Pathname:write_text)
61
- - [String](http://www.rubydoc.info/gems/pleasant_path/String)
62
- - [#/](http://www.rubydoc.info/gems/pleasant_path/String:%2F)
63
- - [#append_to_file](http://www.rubydoc.info/gems/pleasant_path/String:append_to_file)
64
- - [#path](http://www.rubydoc.info/gems/pleasant_path/String:path)
65
- - [#to_pathname](http://www.rubydoc.info/gems/pleasant_path/String:to_pathname)
66
- - [#write_to_file](http://www.rubydoc.info/gems/pleasant_path/String:write_to_file)
67
- - [Enumerable](http://www.rubydoc.info/gems/pleasant_path/Enumerable)
68
- - [#append_to_file](http://www.rubydoc.info/gems/pleasant_path/Enumerable:append_to_file)
69
- - [#write_to_file](http://www.rubydoc.info/gems/pleasant_path/Enumerable:write_to_file)
70
- - [File](http://www.rubydoc.info/gems/pleasant_path/File)
71
- - [.common_path](http://www.rubydoc.info/gems/pleasant_path/File.common_path)
72
- - [.edit_lines](http://www.rubydoc.info/gems/pleasant_path/File.edit_lines)
73
- - [.edit_text](http://www.rubydoc.info/gems/pleasant_path/File.edit_text)
74
- - [IO](http://www.rubydoc.info/gems/pleasant_path/IO)
75
- - [#read_lines](http://www.rubydoc.info/gems/pleasant_path/IO:read_lines)
76
- - [#write_lines](http://www.rubydoc.info/gems/pleasant_path/IO:write_lines)
25
+ - [Pathname](https://www.rubydoc.info/gems/pleasant_path/Pathname)
26
+ - [::NULL](https://www.rubydoc.info/gems/pleasant_path/Pathname#NULL-constant)
27
+ - [#^](https://www.rubydoc.info/gems/pleasant_path/Pathname:%5E)
28
+ - [#append_file](https://www.rubydoc.info/gems/pleasant_path/Pathname:append_file)
29
+ - [#append_lines](https://www.rubydoc.info/gems/pleasant_path/Pathname:append_lines)
30
+ - [#append_text](https://www.rubydoc.info/gems/pleasant_path/Pathname:append_text)
31
+ - [#available_name](https://www.rubydoc.info/gems/pleasant_path/Pathname:available_name)
32
+ - [#chdir](https://www.rubydoc.info/gems/pleasant_path/Pathname:chdir)
33
+ - [#common_path](https://www.rubydoc.info/gems/pleasant_path/Pathname:common_path)
34
+ - [#copy](https://www.rubydoc.info/gems/pleasant_path/Pathname:copy)
35
+ - [#copy_as](https://www.rubydoc.info/gems/pleasant_path/Pathname:copy_as)
36
+ - [#copy_into](https://www.rubydoc.info/gems/pleasant_path/Pathname:copy_into)
37
+ - [#delete!](https://www.rubydoc.info/gems/pleasant_path/Pathname:delete%21)
38
+ - [#dir?](https://www.rubydoc.info/gems/pleasant_path/Pathname:dir%3F)
39
+ - [#dirs](https://www.rubydoc.info/gems/pleasant_path/Pathname:dirs)
40
+ - [#dirs_r](https://www.rubydoc.info/gems/pleasant_path/Pathname:dirs_r)
41
+ - [#edit_lines](https://www.rubydoc.info/gems/pleasant_path/Pathname:edit_lines)
42
+ - [#edit_text](https://www.rubydoc.info/gems/pleasant_path/Pathname:edit_text)
43
+ - [#existence](https://www.rubydoc.info/gems/pleasant_path/Pathname:existence)
44
+ - [#files](https://www.rubydoc.info/gems/pleasant_path/Pathname:files)
45
+ - [#files_r](https://www.rubydoc.info/gems/pleasant_path/Pathname:files_r)
46
+ - [#find_dirs](https://www.rubydoc.info/gems/pleasant_path/Pathname:find_dirs)
47
+ - [#find_files](https://www.rubydoc.info/gems/pleasant_path/Pathname:find_files)
48
+ - [#make_dir](https://www.rubydoc.info/gems/pleasant_path/Pathname:make_dir)
49
+ - [#make_dirname](https://www.rubydoc.info/gems/pleasant_path/Pathname:make_dirname)
50
+ - [#make_file](https://www.rubydoc.info/gems/pleasant_path/Pathname:make_file)
51
+ - [#move](https://www.rubydoc.info/gems/pleasant_path/Pathname:move)
52
+ - [#move_as](https://www.rubydoc.info/gems/pleasant_path/Pathname:move_as)
53
+ - [#move_into](https://www.rubydoc.info/gems/pleasant_path/Pathname:move_into)
54
+ - [#parentname](https://www.rubydoc.info/gems/pleasant_path/Pathname:parentname)
55
+ - [#read_lines](https://www.rubydoc.info/gems/pleasant_path/Pathname:read_lines)
56
+ - [#rename_basename](https://www.rubydoc.info/gems/pleasant_path/Pathname:rename_basename)
57
+ - [#rename_extname](https://www.rubydoc.info/gems/pleasant_path/Pathname:rename_extname)
58
+ - [#to_pathname](https://www.rubydoc.info/gems/pleasant_path/Pathname:to_pathname)
59
+ - [#write_lines](https://www.rubydoc.info/gems/pleasant_path/Pathname:write_lines)
60
+ - [#write_text](https://www.rubydoc.info/gems/pleasant_path/Pathname:write_text)
61
+ - [String](https://www.rubydoc.info/gems/pleasant_path/String)
62
+ - [#/](https://www.rubydoc.info/gems/pleasant_path/String:%2F)
63
+ - [#append_to_file](https://www.rubydoc.info/gems/pleasant_path/String:append_to_file)
64
+ - [#path](https://www.rubydoc.info/gems/pleasant_path/String:path)
65
+ - [#to_pathname](https://www.rubydoc.info/gems/pleasant_path/String:to_pathname)
66
+ - [#write_to_file](https://www.rubydoc.info/gems/pleasant_path/String:write_to_file)
67
+ - [Enumerable](https://www.rubydoc.info/gems/pleasant_path/Enumerable)
68
+ - [#append_to_file](https://www.rubydoc.info/gems/pleasant_path/Enumerable:append_to_file)
69
+ - [#write_to_file](https://www.rubydoc.info/gems/pleasant_path/Enumerable:write_to_file)
70
+ - [File](https://www.rubydoc.info/gems/pleasant_path/File)
71
+ - [.common_path](https://www.rubydoc.info/gems/pleasant_path/File.common_path)
72
+ - [.edit_lines](https://www.rubydoc.info/gems/pleasant_path/File.edit_lines)
73
+ - [.edit_text](https://www.rubydoc.info/gems/pleasant_path/File.edit_text)
74
+ - [IO](https://www.rubydoc.info/gems/pleasant_path/IO)
75
+ - [#read_lines](https://www.rubydoc.info/gems/pleasant_path/IO:read_lines)
76
+ - [#write_lines](https://www.rubydoc.info/gems/pleasant_path/IO:write_lines)
77
77
 
78
78
 
79
79
  ## JSON-related and YAML-related API
@@ -90,30 +90,30 @@ require "pleasant_path/json"
90
90
  require "pleasant_path/yaml"
91
91
  ```
92
92
 
93
- [JSON module]: https://ruby-doc.org/stdlib/libdoc/json/rdoc/JSON.html
94
- [YAML module]: https://ruby-doc.org/stdlib/libdoc/yaml/rdoc/YAML.html
93
+ [JSON module]: https://docs.ruby-lang.org/en/master/JSON.html
94
+ [YAML module]: https://docs.ruby-lang.org/en/master/YAML.html
95
95
 
96
96
  The following methods are available:
97
97
 
98
98
  - Object
99
- - [write_to_json](http://www.rubydoc.info/gems/pleasant_path/Object:write_to_json)
100
- - [write_to_yaml](http://www.rubydoc.info/gems/pleasant_path/Object:write_to_yaml)
99
+ - [write_to_json](https://www.rubydoc.info/gems/pleasant_path/Object:write_to_json)
100
+ - [write_to_yaml](https://www.rubydoc.info/gems/pleasant_path/Object:write_to_yaml)
101
101
  - Pathname
102
- - [load_json](http://www.rubydoc.info/gems/pleasant_path/Pathname:load_json)
103
- - [load_yaml](http://www.rubydoc.info/gems/pleasant_path/Pathname:load_yaml)
104
- - [read_json](http://www.rubydoc.info/gems/pleasant_path/Pathname:read_json)
105
- - [read_yaml](http://www.rubydoc.info/gems/pleasant_path/Pathname:read_yaml)
102
+ - [load_json](https://www.rubydoc.info/gems/pleasant_path/Pathname:load_json)
103
+ - [load_yaml](https://www.rubydoc.info/gems/pleasant_path/Pathname:load_yaml)
104
+ - [read_json](https://www.rubydoc.info/gems/pleasant_path/Pathname:read_json)
105
+ - [read_yaml](https://www.rubydoc.info/gems/pleasant_path/Pathname:read_yaml)
106
106
 
107
107
 
108
108
  ## Installation
109
109
 
110
- Install from [Ruby Gems](https://rubygems.org/gems/pleasant_path):
110
+ Install the [gem](https://rubygems.org/gems/pleasant_path):
111
111
 
112
112
  ```bash
113
113
  $ gem install pleasant_path
114
114
  ```
115
115
 
116
- Then require in your Ruby script:
116
+ Then require in your Ruby code:
117
117
 
118
118
  ```ruby
119
119
  require "pleasant_path"
@@ -122,8 +122,7 @@ require "pleasant_path"
122
122
 
123
123
  ## Contributing
124
124
 
125
- Run `rake test` to run the tests. You can also run `rake irb` for an
126
- interactive prompt that pre-loads the project code.
125
+ Run `rake test` to run the tests.
127
126
 
128
127
 
129
128
  ## License
data/Rakefile CHANGED
@@ -1,18 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rake/testtask"
3
- require "yard"
4
-
5
-
6
- YARD::Rake::YardocTask.new(:doc) do |t|
7
- end
8
-
9
- desc "Launch IRB with this gem pre-loaded"
10
- task :irb do
11
- require "pleasant_path"
12
- require "irb"
13
- ARGV.clear
14
- IRB.start
15
- end
16
3
 
17
4
  Rake::TestTask.new(:test) do |t|
18
5
  t.libs << "test"
@@ -1,9 +1,9 @@
1
1
  module Enumerable
2
2
 
3
- # Writes each object in the Enumerable as a string plus end-of-line
4
- # (EOL) characters to the specified +file+, overwriting the file if it
5
- # exists. Creates the file if it does not exist, including any
6
- # necessary parent directories. Returns the Enumerable.
3
+ # Writes each object in the Enumerable as a string plus +eol+
4
+ # (end-of-line) characters to the specified +file+, overwriting the
5
+ # file if it exists. Creates the file if it does not exist, including
6
+ # any necessary parent directories. Returns the Enumerable.
7
7
  #
8
8
  # @see Pathname#write_lines
9
9
  #
@@ -19,10 +19,10 @@ module Enumerable
19
19
  self
20
20
  end
21
21
 
22
- # Appends each object in the Enumerable as a string plus end-of-line
23
- # (EOL) characters to the specified +file+. Creates the file if it
24
- # does not exist, including any necessary parent directories. Returns
25
- # the Enumerable.
22
+ # Appends each object in the Enumerable as a string plus +eol+
23
+ # (end-of-line) characters to the specified +file+. Creates the file
24
+ # if it does not exist, including any necessary parent directories.
25
+ # Returns the Enumerable.
26
26
  #
27
27
  # @see Pathname#append_lines
28
28
  #
@@ -2,7 +2,7 @@
2
2
 
3
3
  class File
4
4
 
5
- # Returns the longest path that all of +paths+ have in common.
5
+ # Returns the longest path that all given +paths+ have in common.
6
6
  #
7
7
  # @example
8
8
  # File.common_path(["a/b/x", "a/b/y", "a/b/z"]) # == "a/b/"
@@ -23,10 +23,10 @@ class File
23
23
  short[0, i == short.length ? i : (last + 1)]
24
24
  end
25
25
 
26
- # Reads the entire contents of the file indicated by +filename+ as a
27
- # string, and yields that string to the given block for editing.
28
- # Writes the return value of the block back to the file, overwriting
29
- # previous contents. Returns the return value of the block.
26
+ # Reads the file indicated by +filename+, and yields the entire
27
+ # contents as a String to the given block for editing. Writes the
28
+ # return value of the block back to the file, overwriting previous
29
+ # contents. Returns the return value of the block.
30
30
  #
31
31
  # @example Update JSON data file
32
32
  # File.read("data.json") # == '{"nested":{"key":"value"}}'
@@ -54,11 +54,11 @@ class File
54
54
  end
55
55
  end
56
56
 
57
- # Reads the entire contents of the file indicated by +filename+ as an
58
- # array of lines, and yields that array to the given block for
59
- # editing. Writes the return value of the block back to the file,
60
- # overwriting previous contents. End-of-line (EOL) characters are
61
- # stripped when reading, and appended after each line when writing.
57
+ # Reads the file indicated by +filename+, and yields the entire
58
+ # contents as an Array of lines to the given block for editing.
59
+ # Writes the return value of the block back to the file, overwriting
60
+ # previous contents. +eol+ (end-of-line) characters are stripped from
61
+ # each line when reading, and appended to each line when writing.
62
62
  # Returns the return value of the block.
63
63
  #
64
64
  # @example Dedup lines of file
@@ -2,7 +2,7 @@
2
2
 
3
3
  class IO
4
4
 
5
- # Writes each object in +lines+ as a string plus end-of-line (EOL)
5
+ # Writes each object in +lines+ as a string plus +eol+ (end-of-line)
6
6
  # characters to the IO. Returns +lines+, unmodified.
7
7
  #
8
8
  # @example
@@ -14,7 +14,7 @@ class IO
14
14
  #
15
15
  # @param lines [Enumerable<#to_s>]
16
16
  # @param eol [String]
17
- # @return [Enumerable<#to_s>]
17
+ # @return [lines]
18
18
  def write_lines(lines, eol: $/)
19
19
  lines.each do |line|
20
20
  self.write(line)
@@ -24,11 +24,11 @@ class IO
24
24
  lines
25
25
  end
26
26
 
27
- # Reads all lines from the IO, and returns them with all end-of-line
28
- # (EOL) characters stripped.
27
+ # Reads all lines from the IO, and returns them with +eol+
28
+ # (end-of-line) characters stripped.
29
29
  #
30
30
  # @note Not to be confused with +IO#readlines+, which retains
31
- # end-of-line (EOL) characters.
31
+ # end-of-line characters.
32
32
  #
33
33
  # @example
34
34
  # File.read("in.txt") # == "one\ntwo\n"
@@ -6,17 +6,17 @@ class Object
6
6
  # Object, unmodified.
7
7
  #
8
8
  # For information about +options+ see
9
- # {https://docs.ruby-lang.org/en/trunk/JSON.html#method-i-generate
9
+ # {https://docs.ruby-lang.org/en/master/JSON.html#method-i-generate
10
10
  # +JSON.generate+}. By default, this method uses
11
- # {https://docs.ruby-lang.org/en/trunk/JSON.html#attribute-c-dump_default_options
11
+ # {https://docs.ruby-lang.org/en/master/JSON.html#attribute-c-dump_default_options
12
12
  # +JSON.dump_default_options+}.
13
13
  #
14
14
  # @example
15
- # { "key" => "value" }.write_to_json("out.json") # == { "key" => "value" }
16
- # File.read("out.json") # == '{"key":"value"}'
15
+ # { "key" => "value" }.write_to_json("file.json") # == { "key" => "value" }
16
+ # File.read("file.json") # == '{"key":"value"}'
17
17
  #
18
18
  # @param file [String, Pathname]
19
- # @param options [Hash<Symbol, Object>]
19
+ # @param options [Hash{Symbol => Object}]
20
20
  # @return [self]
21
21
  def write_to_json(file, options = {})
22
22
  options = JSON.dump_default_options.merge(options)
@@ -2,36 +2,37 @@
2
2
 
3
3
  class Pathname
4
4
 
5
- # Parses the contents of the file indicated by the Pathname as JSON.
6
- # The returned result will composed of only basic data types, e.g.
7
- # +nil+, +true+, +false+, +Numeric+, +String+, +Array+, and +Hash+.
5
+ # Reads the file indicated by the Pathname, and parses the contents as
6
+ # JSON. The returned result will be composed of only basic data
7
+ # types, e.g. +nil+, +true+, +false+, +Numeric+, +String+, +Array+,
8
+ # and +Hash+.
8
9
  #
9
10
  # For information about +options+, see
10
- # {https://docs.ruby-lang.org/en/trunk/JSON.html#method-i-parse
11
+ # {https://docs.ruby-lang.org/en/master/JSON.html#method-i-parse
11
12
  # +JSON.parse+}. By default, this method uses
12
- # {https://docs.ruby-lang.org/en/trunk/JSON.html#attribute-c-load_default_options
13
+ # {https://docs.ruby-lang.org/en/master/JSON.html#attribute-c-load_default_options
13
14
  # +JSON.load_default_options+} plus +create_additions: false+.
14
15
  #
15
16
  # @example
16
- # File.write("in.json", '{"key": "value"}')
17
+ # File.write("file.json", '{"key": "value"}')
17
18
  #
18
- # Pathname.new("in.json").read_json # == { "key" => "value" }
19
+ # Pathname.new("file.json").read_json # == { "key" => "value" }
19
20
  #
20
- # @param options [Hash<Symbol, Object>]
21
+ # @param options [Hash{Symbol => Object}]
21
22
  # @return [nil, true, false, Numeric, String, Symbol, Array, Hash]
22
23
  def read_json(options = {})
23
24
  JSON.load(self, nil, { create_additions: false, **options })
24
25
  end
25
26
 
26
- # Parses the contents of the file indicated by the Pathname as JSON,
27
- # deserializing arbitrary data types via type information embedded in
28
- # the JSON. This is *UNSAFE* for JSON from an untrusted source. To
29
- # consume untrusted JSON, use {Pathname#read_json} instead.
27
+ # Reads the file indicated by the Pathname, and parses the contents as
28
+ # JSON, deserializing arbitrary data types via type information
29
+ # embedded in the JSON. This is *UNSAFE* for JSON from an untrusted
30
+ # source. To consume untrusted JSON, use {read_json} instead.
30
31
  #
31
32
  # For information about +options+, see
32
- # {https://docs.ruby-lang.org/en/trunk/JSON.html#method-i-parse
33
+ # {https://docs.ruby-lang.org/en/master/JSON.html#method-i-parse
33
34
  # +JSON.parse+}. By default, this method uses
34
- # {https://docs.ruby-lang.org/en/trunk/JSON.html#attribute-c-load_default_options
35
+ # {https://docs.ruby-lang.org/en/master/JSON.html#attribute-c-load_default_options
35
36
  # +JSON.load_default_options+}.
36
37
  #
37
38
  # For information about serializing custom types to JSON, see the
@@ -42,11 +43,11 @@ class Pathname
42
43
  # require "json/add/core" # provides Struct#to_json
43
44
  # Point = Struct.new(:x, :y)
44
45
  # point = Point.new(10, 20)
45
- # File.write("in.json", point.to_json)
46
+ # File.write("file.json", point.to_json)
46
47
  #
47
- # Pathname.new("in.json").load_json # == Point.new(10, 20)
48
+ # Pathname.new("file.json").load_json # == Point.new(10, 20)
48
49
  #
49
- # @param options [Hash<Symbol, Object>]
50
+ # @param options [Hash{Symbol => Object}]
50
51
  # @return [Object]
51
52
  def load_json(options = {})
52
53
  JSON.load(self, nil, options)
@@ -2,9 +2,9 @@
2
2
 
3
3
  class Pathname
4
4
 
5
- # {https://docs.ruby-lang.org/en/trunk/File/File/Constants.html#NULL +File::NULL+}
6
- # as a Pathname. On POSIX systems, this should be equivalent to
7
- # +Pathname.new("/dev/null")+.
5
+ # {https://docs.ruby-lang.org/en/master/File/File/Constants.html#NULL
6
+ # +File::NULL+} as a Pathname. On POSIX systems, this should be
7
+ # equivalent to +Pathname.new("/dev/null")+.
8
8
  NULL = Pathname.new(File::NULL)
9
9
 
10
10
  # Returns the Pathname unmodified. Exists for parity with
@@ -15,7 +15,7 @@ class Pathname
15
15
  self
16
16
  end
17
17
 
18
- # Joins the Pathname +dirname+ with the given +sibling+.
18
+ # Joins the Pathname's +dirname+ with the given +sibling+.
19
19
  #
20
20
  # The mnemonic for this operator is that the result is formed by going
21
21
  # up one directory level from the original path, then going back down
@@ -30,18 +30,17 @@ class Pathname
30
30
  self.dirname / sibling
31
31
  end
32
32
 
33
- # Returns the +basename+ of the parent directory (+dirname+).
33
+ # Returns the +basename+ of the Pathname's +dirname+.
34
34
  #
35
35
  # @example
36
- # Pathname.new("path/to/file").parentname # == Pathname.new("to")
36
+ # Pathname.new("grand/parent/base").parentname # == Pathname.new("parent")
37
37
  #
38
38
  # @return [Pathname]
39
39
  def parentname
40
40
  self.dirname.basename
41
41
  end
42
42
 
43
- # Returns the Pathname if +exist?+ returns true, otherwise returns
44
- # nil.
43
+ # Returns the Pathname if +exist?+ is true, otherwise returns nil.
45
44
  #
46
45
  # @example
47
46
  # FileUtils.mkdir("dir1")
@@ -84,15 +83,8 @@ class Pathname
84
83
  # @return [Boolean]
85
84
  alias :dir? :directory?
86
85
 
87
- # @deprecated Use +Pathname#empty?+.
88
- #
89
- # Alias of +Pathname#empty?+.
90
- #
91
- # @return [Boolean]
92
- alias :dir_empty? :empty?
93
-
94
- # Returns the immediate child directories of the directory indicated
95
- # by the Pathname. Returned Pathnames are prefixed by the original
86
+ # Returns the direct child directories of the directory indicated by
87
+ # the Pathname. Returned Pathnames are prefixed by the original
96
88
  # Pathname.
97
89
  #
98
90
  # @example
@@ -142,18 +134,18 @@ class Pathname
142
134
  # directory indicated by the Pathname. Iterated Pathnames are
143
135
  # prefixed by the original Pathname, and are in depth-first order.
144
136
  #
145
- # If no block is given, this method returns an Enumerator. Otherwise,
146
- # the block is called with each descendent Pathname, and this method
147
- # returns the original Pathname.
148
- #
149
- # @see https://docs.ruby-lang.org/en/trunk/Pathname.html#method-i-find Pathname#find
137
+ # If a block is given, each descendent Pathname is yielded, and this
138
+ # method returns the original Pathname. Otherwise, an Enumerator is
139
+ # returned.
150
140
  #
151
- # @overload find_dirs()
152
- # @return [Enumerator<Pathname>]
141
+ # @see https://docs.ruby-lang.org/en/master/Pathname.html#method-i-find Pathname#find
153
142
  #
154
143
  # @overload find_dirs(&block)
155
144
  # @yieldparam descendent [Pathname]
156
- # @return [Pathname]
145
+ # @return [self]
146
+ #
147
+ # @overload find_dirs()
148
+ # @return [Enumerator<Pathname>]
157
149
  def find_dirs
158
150
  return to_enum(__method__) unless block_given?
159
151
 
@@ -168,7 +160,7 @@ class Pathname
168
160
  self
169
161
  end
170
162
 
171
- # Returns the immediate child files of the directory indicated by the
163
+ # Returns the direct child files of the directory indicated by the
172
164
  # Pathname. Returned Pathnames are prefixed by the original Pathname.
173
165
  #
174
166
  # @example
@@ -218,18 +210,18 @@ class Pathname
218
210
  # indicated by the Pathname. Iterated Pathnames are prefixed by the
219
211
  # original Pathname, and are in depth-first order.
220
212
  #
221
- # If no block is given, this method returns an Enumerator. Otherwise,
222
- # the block is called with each descendent Pathname, and this method
223
- # returns the original Pathname.
213
+ # If a block is given, each descendent Pathname is yielded, and this
214
+ # method returns the original Pathname. Otherwise, an Enumerator is
215
+ # returned.
224
216
  #
225
- # @see https://docs.ruby-lang.org/en/trunk/Pathname.html#method-i-find Pathname#find
226
- #
227
- # @overload find_files()
228
- # @return [Enumerator<Pathname>]
217
+ # @see https://docs.ruby-lang.org/en/master/Pathname.html#method-i-find Pathname#find
229
218
  #
230
219
  # @overload find_files(&block)
231
220
  # @yieldparam descendent [Pathname]
232
- # @return [Pathname]
221
+ # @return [self]
222
+ #
223
+ # @overload find_files()
224
+ # @return [Enumerator<Pathname>]
233
225
  def find_files
234
226
  return to_enum(__method__) unless block_given?
235
227
 
@@ -243,10 +235,10 @@ class Pathname
243
235
  # Changes the current working directory to the Pathname. If no block
244
236
  # is given, this method returns the Pathname. Otherwise, the block is
245
237
  # called with the Pathname, the original working directory is restored
246
- # after the block exits, this method returns the return value of the
247
- # block.
238
+ # after the block exits, and this method returns the return value of
239
+ # the block.
248
240
  #
249
- # @see https://docs.ruby-lang.org/en/trunk/Dir.html#method-c-chdir Dir.chdir
241
+ # @see https://docs.ruby-lang.org/en/master/Dir.html#method-c-chdir Dir.chdir
250
242
  #
251
243
  # @example
252
244
  # FileUtils.mkdir("dir1")
@@ -259,12 +251,12 @@ class Pathname
259
251
  # Pathname.pwd # == Pathname.new("dir1")
260
252
  #
261
253
  # @overload chdir()
262
- # @return [Pathname]
254
+ # @return [self]
263
255
  #
264
256
  # @overload chdir(&block)
265
257
  # @yieldparam working_dir [Pathname]
266
- # @yieldreturn [Object] retval
267
- # @return [retval]
258
+ # @yieldreturn [Object]
259
+ # @return [Object]
268
260
  #
269
261
  # @raise [SystemCallError]
270
262
  # if the Pathname does not point to an existing directory
@@ -282,7 +274,7 @@ class Pathname
282
274
  # Creates the directory indicated by the Pathname, including any
283
275
  # necessary parent directories. Returns the Pathname.
284
276
  #
285
- # @see https://docs.ruby-lang.org/en/trunk/Pathname.html#method-i-mkpath Pathname#mkpath
277
+ # @see https://docs.ruby-lang.org/en/master/Pathname.html#method-i-mkpath Pathname#mkpath
286
278
  #
287
279
  # @example
288
280
  # Dir.exist?("path") # == false
@@ -301,8 +293,8 @@ class Pathname
301
293
  self
302
294
  end
303
295
 
304
- # Creates the directory indicated by the Pathname +dirname+, including
305
- # any necessary parent directories. Returns the Pathname.
296
+ # Creates the directory indicated by the Pathname's +dirname+,
297
+ # including any necessary parent directories. Returns the Pathname.
306
298
  #
307
299
  # @example
308
300
  # Dir.exist?("path") # == false
@@ -336,40 +328,15 @@ class Pathname
336
328
  # Dir.exist?("path/to") # == true
337
329
  # File.exist?("path/to/file") # == true
338
330
  #
339
- # @return [Pathname]
331
+ # @return [self]
340
332
  # @raise [SystemCallError]
341
- # if the Pathname points to an existent directory
333
+ # if the Pathname points to an existing directory, or if any element
334
+ # of the +dirname+ points to an existing file (non-directory)
342
335
  def make_file
343
336
  self.make_dirname.open("a"){}
344
337
  self
345
338
  end
346
339
 
347
- # @deprecated Use {Pathname#make_file}.
348
- #
349
- # Creates the file indicated by the Pathname, including any necessary
350
- # parent directories. If the file already exists, its modification
351
- # time (mtime) and access time (atime) are updated. Returns the
352
- # Pathname.
353
- #
354
- # @see https://docs.ruby-lang.org/en/trunk/FileUtils.html#method-c-touch FileUtils.touch
355
- #
356
- # @example
357
- # Dir.exist?("path") # == false
358
- # Dir.exist?("path/to") # == false
359
- #
360
- # Pathname.new("path/to/file").touch_file # == Pathname.new("path/to/file")
361
- #
362
- # Dir.exist?("path") # == true
363
- # Dir.exist?("path/to") # == true
364
- # File.exist?("path/to/file") # == true
365
- #
366
- # @return [self]
367
- def touch_file
368
- self.make_dirname
369
- FileUtils.touch(self)
370
- self
371
- end
372
-
373
340
  # Recursively deletes the directory or file indicated by the Pathname.
374
341
  # Similar to +Pathname#rmtree+, but does not raise an exception if the
375
342
  # file does not exist. Returns the Pathname.
@@ -450,42 +417,36 @@ class Pathname
450
417
  end
451
418
 
452
419
  # Moves the file or directory indicated by the Pathname to
453
- # +destination+, in the same manner as +FileUtils.mv+. Creates any
454
- # necessary parent directories of the destination. Returns
420
+ # +destination+, in the same manner as +FileUtils.mv+. Returns
455
421
  # +destination+ as a Pathname.
456
422
  #
457
- # @see https://docs.ruby-lang.org/en/trunk/FileUtils.html#method-c-mv FileUtils.mv
423
+ # @see https://docs.ruby-lang.org/en/master/FileUtils.html#method-c-mv FileUtils.mv
458
424
  #
459
425
  # @example
460
- # File.exist?("path/to/file") # == true
461
- # Dir.exist?("other") # == false
462
- # Dir.exist?("other/dir") # == false
463
- # File.exist?("other/dir/same_file") # == false
426
+ # FileUtils.mkpath("dir/files")
427
+ # FileUtils.touch("dir/files/file1")
428
+ # FileUtils.mkpath("other_dir")
464
429
  #
465
- # Pathname.new("path/to/file").move("other/dir/same_file")
466
- # # == Pathname.new("other/dir/same_file")
430
+ # Pathname.new("dir/files").move("other_dir/same_files")
431
+ # # == Pathname.new("other_dir/same_files")
467
432
  #
468
- # File.exist?("path/to/file") # == false
469
- # Dir.exist?("other") # == true
470
- # Dir.exist?("other/dir") # == true
471
- # File.exist?("other/dir/same_file") # == true
433
+ # Dir.exist?("dir/files") # == false
434
+ # File.exist?("other_dir/same_files/file1") # == true
472
435
  #
473
436
  # @param destination [Pathname, String]
474
437
  # @return [Pathname]
475
438
  def move(destination)
476
- destination = destination.to_pathname
477
- destination.make_dirname
478
439
  FileUtils.mv(self, destination)
479
- destination
440
+ destination.to_pathname
480
441
  end
481
442
 
482
- # Moves the file or directory indicated by the Pathname to a
483
- # destination, replacing any existing file or directory.
443
+ # Moves the file or directory indicated by the Pathname to
444
+ # +destination+, replacing any existing file or directory.
484
445
  #
485
446
  # If a block is given and a file or directory does exist at the
486
447
  # destination, the block is called with the source and destination
487
448
  # Pathnames, and the return value of the block is used as the new
488
- # destination. If the block returns the source Pathname or +nil+, the
449
+ # destination. If the block returns the source Pathname or nil, the
489
450
  # move is aborted.
490
451
  #
491
452
  # Creates any necessary parent directories of the destination.
@@ -574,7 +535,7 @@ class Pathname
574
535
  File.rename(self, destination)
575
536
  else
576
537
  destination.delete!
577
- self.move(destination)
538
+ self.move(destination.make_dirname)
578
539
  end
579
540
  end
580
541
 
@@ -589,7 +550,7 @@ class Pathname
589
550
  # resultant destination, the block is called with the source and
590
551
  # destination Pathnames, and the return value of the block is used as
591
552
  # the new destination. If the block returns the source Pathname or
592
- # +nil+, the move is aborted.
553
+ # nil, the move is aborted.
593
554
  #
594
555
  # Creates any necessary parent directories of the destination.
595
556
  # Returns the destination as a Pathname (or the source Pathname in the
@@ -643,42 +604,36 @@ class Pathname
643
604
  end
644
605
 
645
606
  # Copies the file or directory indicated by the Pathname to
646
- # +destination+, in the same manner as +FileUtils.cp_r+. Creates any
647
- # necessary parent directories of the destination. Returns
607
+ # +destination+, in the same manner as +FileUtils.cp_r+. Returns
648
608
  # +destination+ as a Pathname.
649
609
  #
650
- # @see https://docs.ruby-lang.org/en/trunk/FileUtils.html#method-c-cp_r FileUtils.cp_r
610
+ # @see https://docs.ruby-lang.org/en/master/FileUtils.html#method-c-cp_r FileUtils.cp_r
651
611
  #
652
612
  # @example
653
- # File.exist?("path/to/file") # == true
654
- # Dir.exist?("other") # == false
655
- # Dir.exist?("other/dir") # == false
656
- # File.exist?("other/dir/same_file") # == false
613
+ # FileUtils.mkpath("dir/files")
614
+ # FileUtils.touch("dir/files/file1")
615
+ # FileUtils.mkpath("other_dir")
657
616
  #
658
- # Pathname.new("path/to/file").copy("other/dir/same_file")
659
- # # == Pathname.new("other/dir/same_file")
617
+ # Pathname.new("dir/files").copy("other_dir/same_files")
618
+ # # == Pathname.new("other_dir/same_files")
660
619
  #
661
- # File.exist?("path/to/file") # == true
662
- # Dir.exist?("other") # == true
663
- # Dir.exist?("other/dir") # == true
664
- # File.exist?("other/dir/same_file") # == true
620
+ # File.exist?("dir/files/file1") # == true
621
+ # File.exist?("other_dir/same_files/file1") # == true
665
622
  #
666
623
  # @param destination [Pathname, String]
667
624
  # @return [Pathname]
668
625
  def copy(destination)
669
- destination = destination.to_pathname
670
- destination.make_dirname
671
626
  FileUtils.cp_r(self, destination)
672
- destination
627
+ destination.to_pathname
673
628
  end
674
629
 
675
- # Copies the file or directory indicated by the Pathname to a
676
- # destination, replacing any existing file or directory.
630
+ # Copies the file or directory indicated by the Pathname to
631
+ # +destination+, replacing any existing file or directory.
677
632
  #
678
633
  # If a block is given and a file or directory does exist at the
679
634
  # destination, the block is called with the source and destination
680
635
  # Pathnames, and the return value of the block is used as the new
681
- # destination. If the block returns the source Pathname or +nil+, the
636
+ # destination. If the block returns the source Pathname or nil, the
682
637
  # copy is aborted.
683
638
  #
684
639
  # Creates any necessary parent directories of the destination.
@@ -760,7 +715,7 @@ class Pathname
760
715
 
761
716
  if destination
762
717
  destination.delete! unless File.identical?(self, destination)
763
- self.copy(destination)
718
+ self.copy(destination.make_dirname)
764
719
  end
765
720
 
766
721
  destination || self
@@ -775,7 +730,7 @@ class Pathname
775
730
  # resultant destination, the block is called with the source and
776
731
  # destination Pathnames, and the return value of the block is used as
777
732
  # the new destination. If the block returns the source Pathname or
778
- # +nil+, the copy is aborted.
733
+ # nil, the copy is aborted.
779
734
  #
780
735
  # Creates any necessary parent directories of the destination.
781
736
  # Returns the destination as a Pathname (or the source Pathname in the
@@ -841,7 +796,7 @@ class Pathname
841
796
  # resultant destination, the block is called with the source and
842
797
  # destination Pathnames, and the return value of the block is used as
843
798
  # the new destination. If the block returns the source Pathname or
844
- # +nil+, the rename is aborted.
799
+ # nil, the rename is aborted.
845
800
  #
846
801
  # Returns the destination as a Pathname (or the source Pathname in the
847
802
  # case that the rename is aborted).
@@ -900,7 +855,7 @@ class Pathname
900
855
  # resultant destination, the block is called with the source and
901
856
  # destination Pathnames, and the return value of the block is used as
902
857
  # the new destination. If the block returns the source Pathname or
903
- # +nil+, the rename is aborted.
858
+ # nil, the rename is aborted.
904
859
  #
905
860
  # Returns the destination as a Pathname (or the source Pathname in the
906
861
  # case that the rename is aborted).
@@ -968,9 +923,6 @@ class Pathname
968
923
  # @yieldreturn [Pathname, nil]
969
924
  # @return [Pathname]
970
925
  def rename_extname(new_extname, &block)
971
- unless new_extname.start_with?(".") || new_extname.empty?
972
- new_extname = ".#{new_extname}"
973
- end
974
926
  self.move_as(self.sub_ext(new_extname), &block)
975
927
  end
976
928
 
@@ -1016,7 +968,7 @@ class Pathname
1016
968
  self
1017
969
  end
1018
970
 
1019
- # Writes each object in +lines+ as a string plus end-of-line (EOL)
971
+ # Writes each object in +lines+ as a string plus +eol+ (end-of-line)
1020
972
  # characters to the file indicated by the Pathname, overwriting the
1021
973
  # file if it exists. Creates the file if it does not exist, including
1022
974
  # any necessary parent directories. Returns the Pathname.
@@ -1037,7 +989,7 @@ class Pathname
1037
989
  self
1038
990
  end
1039
991
 
1040
- # Appends each object in +lines+ as a string plus end-of-line (EOL)
992
+ # Appends each object in +lines+ as a string plus +eol+ (end-of-line)
1041
993
  # characters to the file indicated by the Pathname. Creates the file
1042
994
  # if it does not exist, including any necessary parent directories.
1043
995
  # Returns the Pathname.
@@ -1064,12 +1016,12 @@ class Pathname
1064
1016
  alias :read_text :read
1065
1017
 
1066
1018
  # Reads all lines from the file indicated by the Pathname, and returns
1067
- # them with all end-of-line (EOL) characters stripped.
1019
+ # them with +eol+ (end-of-line) characters stripped.
1068
1020
  #
1069
1021
  # @see IO#read_lines
1070
1022
  #
1071
1023
  # @note Not to be confused with +Pathname#readlines+, which retains
1072
- # end-of-line (EOL) characters.
1024
+ # end-of-line characters.
1073
1025
  #
1074
1026
  # @example
1075
1027
  # File.read("path/to/file") # == "one\ntwo\n"
@@ -1082,10 +1034,10 @@ class Pathname
1082
1034
  self.open("r"){|f| f.read_lines(eol: eol) }
1083
1035
  end
1084
1036
 
1085
- # Reads the entire contents of the file indicated by the Pathname as a
1086
- # string, and yields that string to the given block for editing.
1087
- # Writes the return value of the block back to the file, overwriting
1088
- # previous contents. Returns the return value of the block.
1037
+ # Reads the file indicated by the Pathname, and yields the entire
1038
+ # contents as a String to the given block for editing. Writes the
1039
+ # return value of the block back to the file, overwriting previous
1040
+ # contents. Returns the Pathname.
1089
1041
  #
1090
1042
  # @see File.edit_text
1091
1043
  #
@@ -1103,17 +1055,18 @@ class Pathname
1103
1055
  # @yield [text]
1104
1056
  # @yieldparam text [String]
1105
1057
  # @yieldreturn [String]
1106
- # @return [String]
1058
+ # @return [self]
1107
1059
  def edit_text(&block)
1108
1060
  File.edit_text(self, &block)
1061
+ self
1109
1062
  end
1110
1063
 
1111
- # Reads the entire contents of the file indicated by the Pathname as
1112
- # an array of lines, and yields that array to the given block for
1113
- # editing. Writes the return value of the block back to the file,
1114
- # overwriting previous contents. End-of-line (EOL) characters are
1115
- # stripped when reading, and appended after each line when writing.
1116
- # Returns the return value of the block.
1064
+ # Reads the file indicated by the Pathname, and yields the entire
1065
+ # contents as an Array of lines to the given block for editing.
1066
+ # Writes the return value of the block back to the file, overwriting
1067
+ # previous contents. +eol+ (end-of-line) characters are stripped from
1068
+ # each line when reading, and appended to each line when writing.
1069
+ # Returns the Pathname.
1117
1070
  #
1118
1071
  # @see File.edit_lines
1119
1072
  #
@@ -1129,9 +1082,10 @@ class Pathname
1129
1082
  # @yield [lines]
1130
1083
  # @yieldparam lines [Array<String>]
1131
1084
  # @yieldreturn [Array<String>]
1132
- # @return [Array<String>]
1085
+ # @return [self]
1133
1086
  def edit_lines(eol: $/, &block)
1134
1087
  File.edit_lines(self, eol: eol, &block)
1088
+ self
1135
1089
  end
1136
1090
 
1137
1091
  # Appends the contents of file indicated by +source+ to the file
@@ -27,41 +27,6 @@ class String
27
27
  self.path / child
28
28
  end
29
29
 
30
- # @deprecated Use {Pathname#^}.
31
- #
32
- # Constructs a Pathname from the String, and appends +sibling+ to the
33
- # +dirname+ of the Pathname.
34
- #
35
- # The mnemonic for this operator is that the result is formed by going
36
- # up one directory level from the original path, then going back down
37
- # to +sibling+.
38
- #
39
- # @see Pathname#^
40
- #
41
- # @example
42
- # "path/to/file1" ^ "file2" # == Pathname.new("path/to/file2")
43
- #
44
- # @param sibling [Pathname, String]
45
- # @return [Pathname]
46
- def ^(sibling)
47
- self.path ^ sibling
48
- end
49
-
50
- # @deprecated Use +Pathname.glob+.
51
- #
52
- # Returns an array of Pathnames which match the filename pattern
53
- # contained in the String.
54
- #
55
- # @see https://docs.ruby-lang.org/en/trunk/Pathname.html#method-i-glob Pathname.glob
56
- #
57
- # @example
58
- # "*.txt".glob # == Pathname.glob("*.txt")
59
- #
60
- # @return [Array<Pathname>]
61
- def glob
62
- Pathname.glob(self)
63
- end
64
-
65
30
  # Writes the String to the specified +file+, overwriting the file if
66
31
  # it exists. Creates the file if it does not exist, including
67
32
  # any necessary parent directories. Returns the String.
@@ -1,3 +1,3 @@
1
1
  module PleasantPath
2
- VERSION = "1.3.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -8,15 +8,15 @@ class Object
8
8
  # Object, unmodified.
9
9
  #
10
10
  # For information about +options+ see
11
- # {https://docs.ruby-lang.org/en/trunk/Psych.html#method-c-dump
11
+ # {https://docs.ruby-lang.org/en/master/Psych.html#method-c-dump
12
12
  # +YAML.dump+}.
13
13
  #
14
14
  # @example
15
- # { "key" => "value" }.write_to_yaml("out.yaml") # == { "key" => "value" }
16
- # File.read("out.yaml") # == "---\nkey: value\n"
15
+ # { "key" => "value" }.write_to_yaml("file.yaml") # == { "key" => "value" }
16
+ # File.read("file.yaml") # == "---\nkey: value\n"
17
17
  #
18
18
  # @param file [String, Pathname]
19
- # @param options [Hash<Symbol, Object>]
19
+ # @param options [Hash{Symbol => Object}]
20
20
  # @return [self]
21
21
  def write_to_yaml(file, options = {})
22
22
  file.to_pathname.make_dirname.open("w") do |f|
@@ -2,38 +2,32 @@
2
2
 
3
3
  class Pathname
4
4
 
5
- # Parses the contents of the file indicated by the Pathname as YAML.
6
- # The returned result will composed of only basic data types, e.g.
7
- # +nil+, +true+, +false+, +Numeric+, +String+, +Array+, and +Hash+.
5
+ # Reads the file indicated by the Pathname, and parses the contents as
6
+ # YAML. The returned result will be composed of only basic data
7
+ # types, e.g. +nil+, +true+, +false+, +Numeric+, +String+, +Array+,
8
+ # and +Hash+.
8
9
  #
9
10
  # @example
10
- # File.write("in.yaml", "key: value")
11
+ # File.write("file.yaml", "key: value")
11
12
  #
12
- # Pathname.new("in.yaml").read_yaml # == { "key" => "value" }
13
+ # Pathname.new("file.yaml").read_yaml # == { "key" => "value" }
13
14
  #
14
15
  # @return [nil, true, false, Numeric, String, Array, Hash]
15
16
  def read_yaml
16
- self.open("r") do |f|
17
- # HACK fix Ruby 2.6 warning, but still support Ruby < 2.6
18
- if Gem::Version.new(Psych::VERSION) >= Gem::Version.new("3.1.0.pre1")
19
- YAML.safe_load(f, filename: self)
20
- else
21
- YAML.safe_load(f, [], [], false, self)
22
- end
23
- end
17
+ self.open("r"){|f| YAML.safe_load(f, filename: self) }
24
18
  end
25
19
 
26
- # Parses the contents of the file indicated by the Pathname as YAML,
27
- # deserializing arbitrary data types via type information embedded in
28
- # the YAML. This is *UNSAFE* for YAML from an untrusted source. To
29
- # consume untrusted YAML, use {Pathname#read_yaml} instead.
20
+ # Reads the file indicated by the Pathname, and parses the contents as
21
+ # YAML, deserializing arbitrary data types via type information
22
+ # embedded in the YAML. This is *UNSAFE* for YAML from an untrusted
23
+ # source. To consume untrusted YAML, use {read_yaml} instead.
30
24
  #
31
25
  # @example
32
26
  # Point = Struct.new(:x, :y)
33
27
  # point = Point.new(10, 20)
34
- # File.write("in.yaml", point.to_yaml)
28
+ # File.write("file.yaml", point.to_yaml)
35
29
  #
36
- # Pathname.new("in.yaml").load_yaml # == Point.new(10, 20)
30
+ # Pathname.new("file.yaml").load_yaml # == Point.new(10, 20)
37
31
  #
38
32
  # @return [Object]
39
33
  def load_yaml
@@ -1,27 +1,26 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'pleasant_path/version'
1
+ require_relative "lib/pleasant_path/version"
5
2
 
6
3
  Gem::Specification.new do |spec|
7
4
  spec.name = "pleasant_path"
8
5
  spec.version = PleasantPath::VERSION
9
6
  spec.authors = ["Jonathan Hefner"]
10
- spec.email = ["jonathan.hefner@gmail.com"]
7
+ spec.email = ["jonathan@hefner.pro"]
11
8
 
12
9
  spec.summary = %q{A fluent API for pleasant file IO.}
13
10
  spec.homepage = "https://github.com/jonathanhefner/pleasant_path"
14
11
  spec.license = "MIT"
12
+ spec.required_ruby_version = ">= 2.6"
15
13
 
16
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
- f.match(%r{^(test|spec|features)/})
14
+ spec.metadata["homepage_uri"] = spec.homepage
15
+ spec.metadata["source_code_uri"] = spec.homepage
16
+ spec.metadata["changelog_uri"] = spec.metadata["source_code_uri"] + "/blob/master/CHANGELOG.md"
17
+
18
+ # Specify which files should be added to the gem when it is released.
19
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
20
+ spec.files = Dir.chdir(__dir__) do
21
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
22
  end
19
23
  spec.bindir = "exe"
20
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
25
  spec.require_paths = ["lib"]
22
-
23
- spec.add_development_dependency "bundler", "~> 1.13"
24
- spec.add_development_dependency "rake", "~> 10.0"
25
- spec.add_development_dependency "minitest", "~> 5.0"
26
- spec.add_development_dependency "yard", "~> 0.9"
27
26
  end
metadata CHANGED
@@ -1,74 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pleasant_path
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Hefner
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-04 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.13'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.13'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '10.0'
41
- - !ruby/object:Gem::Dependency
42
- name: minitest
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '5.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '5.0'
55
- - !ruby/object:Gem::Dependency
56
- name: yard
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.9'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.9'
11
+ date: 2020-02-02 00:00:00.000000000 Z
12
+ dependencies: []
69
13
  description:
70
14
  email:
71
- - jonathan.hefner@gmail.com
15
+ - jonathan@hefner.pro
72
16
  executables: []
73
17
  extensions: []
74
18
  extra_rdoc_files: []
@@ -97,7 +41,10 @@ files:
97
41
  homepage: https://github.com/jonathanhefner/pleasant_path
98
42
  licenses:
99
43
  - MIT
100
- metadata: {}
44
+ metadata:
45
+ homepage_uri: https://github.com/jonathanhefner/pleasant_path
46
+ source_code_uri: https://github.com/jonathanhefner/pleasant_path
47
+ changelog_uri: https://github.com/jonathanhefner/pleasant_path/blob/master/CHANGELOG.md
101
48
  post_install_message:
102
49
  rdoc_options: []
103
50
  require_paths:
@@ -106,14 +53,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
53
  requirements:
107
54
  - - ">="
108
55
  - !ruby/object:Gem::Version
109
- version: '0'
56
+ version: '2.6'
110
57
  required_rubygems_version: !ruby/object:Gem::Requirement
111
58
  requirements:
112
59
  - - ">="
113
60
  - !ruby/object:Gem::Version
114
61
  version: '0'
115
62
  requirements: []
116
- rubygems_version: 3.0.1
63
+ rubygems_version: 3.1.2
117
64
  signing_key:
118
65
  specification_version: 4
119
66
  summary: A fluent API for pleasant file IO.