ptools 1.4.2 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGES.md +11 -0
- data/LICENSE +177 -0
- data/MANIFEST.md +2 -0
- data/README.md +27 -25
- data/Rakefile +4 -1
- data/lib/ptools.rb +95 -129
- data/ptools.gemspec +11 -8
- data/spec/binary_spec.rb +31 -30
- data/spec/constants_spec.rb +3 -3
- data/spec/head_spec.rb +18 -18
- data/spec/image_spec.rb +163 -26
- data/spec/img/jpg_no_ext +0 -0
- data/spec/img/test.bmp +0 -0
- data/spec/img/test.tiff +0 -0
- data/spec/nlconvert_spec.rb +51 -53
- data/spec/sparse_spec.rb +17 -21
- data/spec/spec_helper.rb +7 -0
- data/spec/tail_spec.rb +55 -55
- data/spec/touch_spec.rb +22 -22
- data/spec/wc_spec.rb +28 -28
- data/spec/whereis_spec.rb +29 -30
- data/spec/which_spec.rb +52 -60
- data.tar.gz.sig +0 -0
- metadata +39 -5
- metadata.gz.sig +2 -4
data/spec/touch_spec.rb
CHANGED
@@ -8,40 +8,40 @@ require 'rspec'
|
|
8
8
|
require 'ptools'
|
9
9
|
|
10
10
|
RSpec.describe File, :touch do
|
11
|
-
let(:dirname) {
|
11
|
+
let(:dirname) { described_class.dirname(__FILE__) }
|
12
12
|
let(:filename) { 'test_file_touch.txt' }
|
13
|
-
let(:xfile) {
|
13
|
+
let(:xfile) { described_class.join(dirname, filename) }
|
14
14
|
|
15
15
|
before do
|
16
|
-
|
17
|
-
@test_file =
|
16
|
+
described_class.open(xfile, 'w'){ |fh| 10.times{ |n| fh.puts "line #{n}" } }
|
17
|
+
@test_file = described_class.join(dirname, 'delete.this')
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
after do
|
21
|
+
described_class.delete(@test_file) if described_class.exist?(@test_file)
|
22
|
+
described_class.delete(xfile) if described_class.exist?(xfile)
|
23
23
|
end
|
24
24
|
|
25
|
-
example
|
26
|
-
expect(
|
27
|
-
expect
|
28
|
-
expect(File.size(@test_file)).to eq(0)
|
25
|
+
example 'touch basic functionality' do
|
26
|
+
expect(described_class).to respond_to(:touch)
|
27
|
+
expect{ described_class.touch(@test_file) }.not_to raise_error
|
29
28
|
end
|
30
29
|
|
31
|
-
example
|
32
|
-
|
33
|
-
|
34
|
-
expect
|
35
|
-
expect(File.size(xfile) == stat.size).to be true
|
36
|
-
expect(File.mtime(xfile) == stat.mtime).to be false
|
30
|
+
example 'touch a new file returns expected results' do
|
31
|
+
expect(described_class.touch(@test_file)).to eq(described_class)
|
32
|
+
expect(described_class.exist?(@test_file)).to be true
|
33
|
+
expect(described_class.size(@test_file)).to eq(0)
|
37
34
|
end
|
38
35
|
|
39
|
-
example
|
40
|
-
|
36
|
+
example 'touch an existing file returns expected results' do
|
37
|
+
stat = described_class.stat(xfile)
|
38
|
+
sleep 1
|
39
|
+
expect{ described_class.touch(xfile) }.not_to raise_error
|
40
|
+
expect(described_class.size(xfile) == stat.size).to be true
|
41
|
+
expect(described_class.mtime(xfile) == stat.mtime).to be false
|
41
42
|
end
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
File.delete(xfile) if File.exist?(xfile)
|
44
|
+
example 'touch requires an argument' do
|
45
|
+
expect{ described_class.touch }.to raise_error(ArgumentError)
|
46
46
|
end
|
47
47
|
end
|
data/spec/wc_spec.rb
CHANGED
@@ -11,55 +11,55 @@ RSpec.describe File, :wc do
|
|
11
11
|
let(:test_file) { 'test_file_wc.txt' }
|
12
12
|
|
13
13
|
before do
|
14
|
-
|
14
|
+
described_class.open(test_file, 'w'){ |fh| 25.times{ |n| fh.puts "line#{n+1}" } }
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
expect{ File.wc(test_file) }.not_to raise_error
|
17
|
+
after do
|
18
|
+
described_class.delete(test_file) if described_class.exist?(test_file)
|
20
19
|
end
|
21
20
|
|
22
|
-
example
|
23
|
-
expect
|
24
|
-
expect{
|
25
|
-
expect{ File.wc(test_file, 'words') }.not_to raise_error
|
26
|
-
expect{ File.wc(test_file, 'lines') }.not_to raise_error
|
21
|
+
example 'wc method basic functionality' do
|
22
|
+
expect(described_class).to respond_to(:wc)
|
23
|
+
expect{ described_class.wc(test_file) }.not_to raise_error
|
27
24
|
end
|
28
25
|
|
29
|
-
example
|
30
|
-
expect{
|
26
|
+
example 'wc accepts specific optional arguments' do
|
27
|
+
expect{ described_class.wc(test_file, 'bytes') }.not_to raise_error
|
28
|
+
expect{ described_class.wc(test_file, 'chars') }.not_to raise_error
|
29
|
+
expect{ described_class.wc(test_file, 'words') }.not_to raise_error
|
30
|
+
expect{ described_class.wc(test_file, 'lines') }.not_to raise_error
|
31
31
|
end
|
32
32
|
|
33
|
-
example
|
34
|
-
expect
|
35
|
-
expect(File.wc(test_file)).to eq([166, 166, 25, 25])
|
33
|
+
example 'argument to wc ignores the case of the option argument' do
|
34
|
+
expect{ described_class.wc(test_file, 'LINES') }.not_to raise_error
|
36
35
|
end
|
37
36
|
|
38
|
-
example
|
39
|
-
expect(
|
37
|
+
example 'wc with no option returns expected results' do
|
38
|
+
expect(described_class.wc(test_file)).to be_kind_of(Array)
|
39
|
+
expect(described_class.wc(test_file)).to eq([166, 166, 25, 25])
|
40
40
|
end
|
41
41
|
|
42
|
-
example
|
43
|
-
expect(
|
42
|
+
example 'wc with bytes option returns the expected result' do
|
43
|
+
expect(described_class.wc(test_file, 'bytes')).to eq(166)
|
44
44
|
end
|
45
45
|
|
46
|
-
example
|
47
|
-
expect(
|
46
|
+
example 'wc with chars option returns the expected result' do
|
47
|
+
expect(described_class.wc(test_file, 'chars')).to eq(166)
|
48
48
|
end
|
49
49
|
|
50
|
-
example
|
51
|
-
expect(
|
50
|
+
example 'wc with words option returns the expected result' do
|
51
|
+
expect(described_class.wc(test_file, 'words')).to eq(25)
|
52
52
|
end
|
53
53
|
|
54
|
-
example
|
55
|
-
expect
|
54
|
+
example 'wc with lines option returns the expected result' do
|
55
|
+
expect(described_class.wc(test_file, 'lines')).to eq(25)
|
56
56
|
end
|
57
57
|
|
58
|
-
example
|
59
|
-
expect{
|
58
|
+
example 'wc requires at least on argument' do
|
59
|
+
expect{ described_class.wc }.to raise_error(ArgumentError)
|
60
60
|
end
|
61
61
|
|
62
|
-
|
63
|
-
|
62
|
+
example 'an invalid option raises an error' do
|
63
|
+
expect{ described_class.wc(test_file, 'bogus') }.to raise_error(ArgumentError)
|
64
64
|
end
|
65
65
|
end
|
data/spec/whereis_spec.rb
CHANGED
@@ -14,11 +14,11 @@ RSpec.describe File, :whereis do
|
|
14
14
|
let(:bin_dir) { RbConfig::CONFIG['bindir'] }
|
15
15
|
|
16
16
|
before do
|
17
|
-
@expected_locs = [
|
17
|
+
@expected_locs = [described_class.join(bin_dir, ruby)]
|
18
18
|
|
19
19
|
if windows
|
20
20
|
@expected_locs[0] << '.exe'
|
21
|
-
@expected_locs[0].tr!(
|
21
|
+
@expected_locs[0].tr!('/', '\\')
|
22
22
|
end
|
23
23
|
|
24
24
|
unless windows
|
@@ -31,57 +31,56 @@ RSpec.describe File, :whereis do
|
|
31
31
|
@actual_locs = nil
|
32
32
|
end
|
33
33
|
|
34
|
-
example
|
35
|
-
expect(
|
36
|
-
expect{
|
37
|
-
expect(
|
34
|
+
example 'whereis basic functionality' do
|
35
|
+
expect(described_class).to respond_to(:whereis)
|
36
|
+
expect{ described_class.whereis('ruby') }.not_to raise_error
|
37
|
+
expect(described_class.whereis('ruby')).to be_kind_of(Array).or be_nil
|
38
38
|
end
|
39
39
|
|
40
|
-
example
|
41
|
-
expect{
|
40
|
+
example 'whereis accepts an optional second argument' do
|
41
|
+
expect{ described_class.whereis('ruby', '/usr/bin:/usr/local/bin') }.not_to raise_error
|
42
42
|
end
|
43
43
|
|
44
|
-
example
|
45
|
-
expect{ @actual_locs =
|
44
|
+
example 'whereis returns expected values' do
|
45
|
+
expect{ @actual_locs = described_class.whereis(ruby) }.not_to raise_error
|
46
46
|
expect(@actual_locs).to be_kind_of(Array)
|
47
47
|
expect((@expected_locs & @actual_locs).size > 0).to be true
|
48
48
|
end
|
49
49
|
|
50
|
-
example
|
51
|
-
expect(
|
50
|
+
example 'whereis returns nil if program not found' do
|
51
|
+
expect(described_class.whereis('xxxyyy')).to be_nil
|
52
52
|
end
|
53
53
|
|
54
|
-
example
|
55
|
-
expect(
|
54
|
+
example 'whereis returns nil if program cannot be found in provided path' do
|
55
|
+
expect(described_class.whereis(ruby, '/foo/bar')).to be_nil
|
56
56
|
end
|
57
57
|
|
58
|
-
example
|
59
|
-
absolute =
|
58
|
+
example 'whereis returns single element array or nil if absolute path is provided' do
|
59
|
+
absolute = described_class.join(bin_dir, ruby)
|
60
60
|
absolute << '.exe' if windows
|
61
61
|
|
62
|
-
expect(
|
63
|
-
expect(
|
62
|
+
expect(described_class.whereis(absolute)).to eq([absolute])
|
63
|
+
expect(described_class.whereis("/foo/bar/baz/#{ruby}")).to be_nil
|
64
64
|
end
|
65
65
|
|
66
|
-
example
|
67
|
-
|
68
|
-
expect(File.whereis(ruby + '.exe')).not_to be_nil
|
66
|
+
example 'whereis works with an explicit extension on ms windows', :windows_only => true do
|
67
|
+
expect(described_class.whereis("#{ruby}.exe")).not_to be_nil
|
69
68
|
end
|
70
69
|
|
71
|
-
example
|
72
|
-
expect{
|
70
|
+
example 'whereis requires at least one argument' do
|
71
|
+
expect{ described_class.whereis }.to raise_error(ArgumentError)
|
73
72
|
end
|
74
73
|
|
75
|
-
example
|
76
|
-
expect(
|
74
|
+
example 'whereis returns unique paths only' do
|
75
|
+
expect(described_class.whereis(ruby) == described_class.whereis(ruby).uniq).to be true
|
77
76
|
end
|
78
77
|
|
79
|
-
example
|
80
|
-
expect{
|
78
|
+
example 'whereis accepts a maximum of two arguments' do
|
79
|
+
expect{ described_class.whereis(ruby, 'foo', 'bar') }.to raise_error(ArgumentError)
|
81
80
|
end
|
82
81
|
|
83
|
-
example
|
84
|
-
expect{
|
85
|
-
expect{
|
82
|
+
example 'the second argument to whereis cannot be nil or empty' do
|
83
|
+
expect{ described_class.whereis(ruby, nil) }.to raise_error(ArgumentError)
|
84
|
+
expect{ described_class.whereis(ruby, '') }.to raise_error(ArgumentError)
|
86
85
|
end
|
87
86
|
end
|
data/spec/which_spec.rb
CHANGED
@@ -12,101 +12,93 @@ require 'tempfile'
|
|
12
12
|
|
13
13
|
describe File, :which do
|
14
14
|
before(:context) do
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@ruby = RUBY_PLATFORM.match('java') ? 'jruby' : 'ruby'
|
19
|
-
@ruby = 'rbx' if defined?(Rubinius)
|
15
|
+
@dir = described_class.join(Dir.pwd, 'tempdir')
|
16
|
+
@non_exe = described_class.join(Dir.pwd, 'tempfile')
|
17
|
+
@ruby = RbConfig::CONFIG['RUBY_INSTALL_NAME']
|
20
18
|
|
21
|
-
Dir.mkdir(@dir) unless
|
19
|
+
Dir.mkdir(@dir) unless described_class.exist?(@dir)
|
22
20
|
FileUtils.touch(@non_exe)
|
23
|
-
|
24
|
-
|
21
|
+
described_class.chmod(775, @dir)
|
22
|
+
described_class.chmod(644, @non_exe)
|
25
23
|
|
26
|
-
@exe =
|
24
|
+
@exe = described_class.join(
|
27
25
|
RbConfig::CONFIG['bindir'],
|
28
26
|
RbConfig::CONFIG['ruby_install_name']
|
29
27
|
)
|
30
28
|
|
31
|
-
if
|
32
|
-
@exe.tr!('/','\\')
|
33
|
-
@exe <<
|
29
|
+
if File::ALT_SEPARATOR
|
30
|
+
@exe.tr!('/', '\\')
|
31
|
+
@exe << '.exe'
|
34
32
|
end
|
35
33
|
end
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
expect(File.which(@ruby)).to be_kind_of(String)
|
35
|
+
after(:context) do
|
36
|
+
FileUtils.rm(@non_exe)
|
37
|
+
FileUtils.rm_rf(@dir)
|
41
38
|
end
|
42
39
|
|
43
|
-
example
|
44
|
-
expect
|
40
|
+
example 'which method basic functionality' do
|
41
|
+
expect(described_class).to respond_to(:which)
|
42
|
+
expect{ described_class.which(@ruby) }.not_to raise_error
|
43
|
+
expect(described_class.which(@ruby)).to be_kind_of(String)
|
45
44
|
end
|
46
45
|
|
47
|
-
example
|
48
|
-
expect
|
49
|
-
expect(File.which('blahblahblah')).to be_nil
|
46
|
+
example 'which accepts an optional path to search' do
|
47
|
+
expect{ described_class.which(@ruby, '/usr/bin:/usr/local/bin') }.not_to raise_error
|
50
48
|
end
|
51
49
|
|
52
|
-
example
|
53
|
-
|
54
|
-
expect(
|
55
|
-
expect(File.which('notepad')).not_to be_nil
|
50
|
+
example 'which returns nil if not found' do
|
51
|
+
expect(described_class.which(@ruby, '/bogus/path')).to be_nil
|
52
|
+
expect(described_class.which('blahblahblah')).to be_nil
|
56
53
|
end
|
57
54
|
|
58
|
-
example
|
59
|
-
|
60
|
-
expect(
|
61
|
-
expect(File.which('notepad.exe')).not_to be_nil
|
55
|
+
example 'which handles executables without extensions on windows', :windows_only => true do
|
56
|
+
expect(described_class.which('ruby')).not_to be_nil
|
57
|
+
expect(described_class.which('notepad')).not_to be_nil
|
62
58
|
end
|
63
59
|
|
64
|
-
example
|
65
|
-
expect(
|
60
|
+
example 'which handles executables that already contain extensions on windows', :windows_only => true do
|
61
|
+
expect(described_class.which('ruby.exe')).not_to be_nil
|
62
|
+
expect(described_class.which('notepad.exe')).not_to be_nil
|
66
63
|
end
|
67
64
|
|
68
|
-
example
|
69
|
-
expect(
|
65
|
+
example 'which returns argument if an existent absolute path is provided' do
|
66
|
+
expect(described_class.which(@ruby)).to eq(@exe), 'May fail on a symlink'
|
70
67
|
end
|
71
68
|
|
72
|
-
example
|
73
|
-
expect(
|
69
|
+
example 'which returns nil if a non-existent absolute path is provided' do
|
70
|
+
expect(described_class.which('/foo/bar/baz/ruby')).to be_nil
|
74
71
|
end
|
75
72
|
|
76
|
-
example
|
77
|
-
expect(
|
73
|
+
example 'which does not pickup files that are not executable' do
|
74
|
+
expect(described_class.which(@non_exe)).to be_nil
|
78
75
|
end
|
79
76
|
|
80
|
-
example
|
81
|
-
expect
|
77
|
+
example 'which does not pickup executable directories' do
|
78
|
+
expect(described_class.which(@dir)).to be_nil
|
82
79
|
end
|
83
80
|
|
84
|
-
example
|
85
|
-
expect{
|
81
|
+
example 'which accepts a minimum of one argument' do
|
82
|
+
expect{ described_class.which }.to raise_error(ArgumentError)
|
86
83
|
end
|
87
84
|
|
88
|
-
example
|
89
|
-
expect{
|
90
|
-
expect{ File.which(@ruby, '') }.to raise_error(ArgumentError)
|
85
|
+
example 'which accepts a maximum of two arguments' do
|
86
|
+
expect{ described_class.which(@ruby, 'foo', 'bar') }.to raise_error(ArgumentError)
|
91
87
|
end
|
92
88
|
|
93
|
-
example
|
94
|
-
|
95
|
-
|
96
|
-
old_home = ENV['HOME']
|
97
|
-
|
98
|
-
ENV['HOME'] = Dir::Tmpname.tmpdir
|
99
|
-
program = Tempfile.new(['program', '.sh'])
|
100
|
-
File.chmod(755, program.path)
|
101
|
-
|
102
|
-
expect(File.which(File.basename(program.path), '~/')).not_to be_nil
|
103
|
-
ensure
|
104
|
-
ENV['HOME'] = old_home
|
105
|
-
end
|
89
|
+
example 'the second argument cannot be nil or empty' do
|
90
|
+
expect{ described_class.which(@ruby, nil) }.to raise_error(ArgumentError)
|
91
|
+
expect{ described_class.which(@ruby, '') }.to raise_error(ArgumentError)
|
106
92
|
end
|
107
93
|
|
108
|
-
|
109
|
-
|
110
|
-
|
94
|
+
example 'resolves with with ~', :unix_only => true do
|
95
|
+
old_home = ENV['HOME']
|
96
|
+
ENV['HOME'] = Dir::Tmpname.tmpdir
|
97
|
+
program = Tempfile.new(['program', '.sh'])
|
98
|
+
described_class.chmod(755, program.path)
|
99
|
+
|
100
|
+
expect(described_class.which(described_class.basename(program.path), '~/')).not_to be_nil
|
101
|
+
ensure
|
102
|
+
ENV['HOME'] = old_home
|
111
103
|
end
|
112
104
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ptools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
36
36
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2022-12-05 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: rake
|
@@ -65,6 +65,34 @@ dependencies:
|
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '3.9'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rubocop
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rubocop-rspec
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
68
96
|
description: |2
|
69
97
|
The ptools (power tools) library provides several handy methods to
|
70
98
|
Ruby's core File class, such as File.which for finding executables,
|
@@ -76,6 +104,7 @@ extra_rdoc_files: []
|
|
76
104
|
files:
|
77
105
|
- CHANGES.md
|
78
106
|
- Gemfile
|
107
|
+
- LICENSE
|
79
108
|
- MANIFEST.md
|
80
109
|
- README.md
|
81
110
|
- Rakefile
|
@@ -86,12 +115,16 @@ files:
|
|
86
115
|
- spec/constants_spec.rb
|
87
116
|
- spec/head_spec.rb
|
88
117
|
- spec/image_spec.rb
|
118
|
+
- spec/img/jpg_no_ext
|
119
|
+
- spec/img/test.bmp
|
89
120
|
- spec/img/test.gif
|
90
121
|
- spec/img/test.ico
|
91
122
|
- spec/img/test.jpg
|
92
123
|
- spec/img/test.png
|
124
|
+
- spec/img/test.tiff
|
93
125
|
- spec/nlconvert_spec.rb
|
94
126
|
- spec/sparse_spec.rb
|
127
|
+
- spec/spec_helper.rb
|
95
128
|
- spec/tail_spec.rb
|
96
129
|
- spec/touch_spec.rb
|
97
130
|
- spec/txt/empty.txt
|
@@ -103,14 +136,15 @@ files:
|
|
103
136
|
- spec/which_spec.rb
|
104
137
|
homepage: https://github.com/djberg96/ptools
|
105
138
|
licenses:
|
106
|
-
-
|
139
|
+
- Apache-2.0
|
107
140
|
metadata:
|
108
141
|
homepage_uri: https://github.com/djberg96/ptools
|
109
142
|
bug_tracker_uri: https://github.com/djberg96/ptools/issues
|
110
|
-
changelog_uri: https://github.com/djberg96/ptools/blob/
|
143
|
+
changelog_uri: https://github.com/djberg96/ptools/blob/main/CHANGES.md
|
111
144
|
documentation_uri: https://github.com/djberg96/ptools/wiki
|
112
145
|
source_code_uri: https://github.com/djberg96/ptools
|
113
146
|
wiki_uri: https://github.com/djberg96/ptools/wiki
|
147
|
+
rubygems_mfa_required: 'true'
|
114
148
|
post_install_message:
|
115
149
|
rdoc_options: []
|
116
150
|
require_paths:
|
@@ -126,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
160
|
- !ruby/object:Gem::Version
|
127
161
|
version: '0'
|
128
162
|
requirements: []
|
129
|
-
rubygems_version: 3.
|
163
|
+
rubygems_version: 3.3.26
|
130
164
|
signing_key:
|
131
165
|
specification_version: 4
|
132
166
|
summary: Extra methods for the File class
|
metadata.gz.sig
CHANGED
@@ -1,4 +1,2 @@
|
|
1
|
-
0
|
2
|
-
|
3
|
-
I� rE#��@��.��A$x뛛��w�JJ`�C��4+wu�?`��*��U���h���-u%�<��Xf@�_�/��T�u�:��i뽾��d�*��(z�Bz� �v
|
4
|
-
�NE���n�� <{�Cr���rԢ<V�����(�����7ЩXf+Հ\�.���D
|
1
|
+
�ڏ-pY���0�STb��w�����t�Q�+��ǟIU��(�b�,�YTfSB���iL�&�)���A��lׄ��EE���:y�ۮ���b�*��B�
|
2
|
+
�������v� �k>���N�R'7��QaO�Y��#�D���@� 0w�J4�R����4�>�F��]#�d�}�h��s�Kģ���!?���9�E��ʟDD
|