filepath 0.6 → 0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -5
- data/README.md +14 -14
- data/filepath.gemspec +8 -10
- data/lib/filepath/core_ext/array.rb +10 -10
- data/lib/filepath/core_ext/string.rb +4 -4
- data/lib/filepath/filepath.rb +38 -38
- data/lib/filepath/filepathlist.rb +12 -12
- data/spec/filepath_spec.rb +67 -67
- data/spec/filepathlist_spec.rb +53 -53
- data/spec/fixtures.rb +21 -0
- data/spec/spec_helper.rb +13 -3
- data/spec/tasks.rb +1 -19
- metadata +36 -21
data/spec/filepathlist_spec.rb
CHANGED
@@ -2,51 +2,51 @@
|
|
2
2
|
|
3
3
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe FilepathList do
|
6
6
|
describe "#initialize" do
|
7
|
-
it "creates an empty
|
8
|
-
list =
|
7
|
+
it "creates an empty FilepathList" do
|
8
|
+
list = FilepathList.new()
|
9
9
|
|
10
10
|
list.should be_empty
|
11
11
|
end
|
12
12
|
|
13
|
-
it "creates a
|
13
|
+
it "creates a FilepathList from an Array of Strings" do
|
14
14
|
paths = %w{a/b c/d e/f}
|
15
|
-
list =
|
15
|
+
list = FilepathList.new(paths)
|
16
16
|
|
17
17
|
list.should have(3).items
|
18
|
-
list.each { |path| path.should be_a(
|
18
|
+
list.each { |path| path.should be_a(Filepath) }
|
19
19
|
end
|
20
20
|
|
21
|
-
it "creates a
|
21
|
+
it "creates a FilepathList from an Array of Filepaths" do
|
22
22
|
paths = %w{a/b c/d e/f}.map(&:as_path)
|
23
|
-
list =
|
23
|
+
list = FilepathList.new(paths)
|
24
24
|
|
25
25
|
list.should have(3).items
|
26
|
-
list.each { |path| path.should be_a(
|
26
|
+
list.each { |path| path.should be_a(Filepath) }
|
27
27
|
end
|
28
28
|
|
29
|
-
it "creates a
|
29
|
+
it "creates a FilepathList from an Array of Arrays" do
|
30
30
|
paths = [%w{a b}, %w{c d}, %w{e f}]
|
31
|
-
list =
|
31
|
+
list = FilepathList.new(paths)
|
32
32
|
|
33
33
|
list.should have(3).items
|
34
|
-
list.each { |path| path.should be_a(
|
34
|
+
list.each { |path| path.should be_a(Filepath) }
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
describe "#/" do
|
39
39
|
it "adds the same string to all the paths" do
|
40
|
-
list =
|
40
|
+
list = FilepathList.new(%w{foo faa}) / 'bar'
|
41
41
|
list[0].should eq 'foo/bar'
|
42
42
|
list[1].should eq 'faa/bar'
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
describe "#+" do
|
47
|
-
it "concatenates two
|
48
|
-
list1 =
|
49
|
-
list2 =
|
47
|
+
it "concatenates two FilepathLists" do
|
48
|
+
list1 = FilepathList.new(%w{a b c})
|
49
|
+
list2 = FilepathList.new(%w{d e})
|
50
50
|
|
51
51
|
list = list1 + list2
|
52
52
|
list.should have(5).items
|
@@ -60,7 +60,7 @@ describe FilePathList do
|
|
60
60
|
|
61
61
|
describe "#-" do
|
62
62
|
it "removes a list (as array of strings) from another list" do
|
63
|
-
list1 =
|
63
|
+
list1 = FilepathList.new(%w{a/b /a/c e/d})
|
64
64
|
list2 = list1 - %w{a/b e/d}
|
65
65
|
|
66
66
|
list2.should have(1).item
|
@@ -69,8 +69,8 @@ describe FilePathList do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
describe "#<<" do
|
72
|
-
it "adds a new to path to a existing
|
73
|
-
list1 =
|
72
|
+
it "adds a new to path to a existing FilepathList" do
|
73
|
+
list1 = FilepathList.new(%w{a/b /c/d})
|
74
74
|
list2 = list1 << "e/f"
|
75
75
|
|
76
76
|
list1.should have(2).items
|
@@ -84,11 +84,11 @@ describe FilePathList do
|
|
84
84
|
|
85
85
|
describe "#*" do
|
86
86
|
describe "calculates the cartesian product between" do
|
87
|
-
it "two
|
87
|
+
it "two FilepathLists" do
|
88
88
|
p1 = %w{a b c}
|
89
89
|
p2 = %w{1 2}
|
90
|
-
list1 =
|
91
|
-
list2 =
|
90
|
+
list1 = FilepathList.new(p1)
|
91
|
+
list2 = FilepathList.new(p2)
|
92
92
|
|
93
93
|
all_paths = p1.product(p2).map { |x| x.join('/') }
|
94
94
|
|
@@ -97,29 +97,29 @@ describe FilePathList do
|
|
97
97
|
list.should include(*all_paths)
|
98
98
|
end
|
99
99
|
|
100
|
-
it "a
|
100
|
+
it "a FilepathList and a string" do
|
101
101
|
p1 = %w{a b c}
|
102
102
|
p2 = "abc"
|
103
103
|
|
104
|
-
list =
|
104
|
+
list = FilepathList.new(p1) * p2
|
105
105
|
list.should have(3).items
|
106
106
|
list.should include(*%w{a/abc b/abc c/abc})
|
107
107
|
end
|
108
108
|
|
109
|
-
it "a
|
109
|
+
it "a FilepathList and a Filepath" do
|
110
110
|
p1 = %w{a b c}
|
111
|
-
p2 =
|
111
|
+
p2 = Filepath.new("x")
|
112
112
|
|
113
|
-
list =
|
113
|
+
list = FilepathList.new(p1) * p2
|
114
114
|
list.should have(3).items
|
115
115
|
list.should include(*%w{a/x b/x c/x})
|
116
116
|
end
|
117
117
|
|
118
|
-
it "a
|
118
|
+
it "a Filepath and an array of strings" do
|
119
119
|
p1 = %w{a b c}
|
120
120
|
p2 = ["1", "2"]
|
121
121
|
|
122
|
-
list =
|
122
|
+
list = FilepathList.new(p1) * p2
|
123
123
|
list.should have(6).items
|
124
124
|
list.should include(*%w{a/1 b/1 a/2 b/2 c/1 c/2})
|
125
125
|
end
|
@@ -129,14 +129,14 @@ describe FilePathList do
|
|
129
129
|
describe "#remove_common_segments" do
|
130
130
|
it "works on lists of files from the same dir" do
|
131
131
|
paths = %w{a/b/x1 a/b/x2 a/b/x3}
|
132
|
-
list =
|
132
|
+
list = FilepathList.new(paths).remove_common_segments
|
133
133
|
|
134
134
|
list.should have(3).items
|
135
135
|
list.should include(*%w{x1 x2 x3})
|
136
136
|
end
|
137
137
|
|
138
138
|
it "works on lists of files from different dirs" do
|
139
|
-
list1 =
|
139
|
+
list1 = FilepathList.new(%w{a/b/x1 a/b/c/x2 a/b/d/e/x3})
|
140
140
|
list2 = list1.remove_common_segments
|
141
141
|
|
142
142
|
list2.should have(3).items
|
@@ -145,7 +145,7 @@ describe FilePathList do
|
|
145
145
|
|
146
146
|
it "works on lists of files with no common segments" do
|
147
147
|
paths = %w{a/b a/d g/f}
|
148
|
-
list1 =
|
148
|
+
list1 = FilepathList.new(paths)
|
149
149
|
list2 = list1.remove_common_segments
|
150
150
|
|
151
151
|
list1.should == list2
|
@@ -153,23 +153,23 @@ describe FilePathList do
|
|
153
153
|
|
154
154
|
it "works on lists that contain duplicates only" do
|
155
155
|
paths = %w{a/b a/b a/b}
|
156
|
-
list1 =
|
156
|
+
list1 = FilepathList.new(paths)
|
157
157
|
list2 = list1.remove_common_segments
|
158
158
|
|
159
|
-
list2.should ==
|
159
|
+
list2.should == FilepathList.new(['.', '.', '.'])
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
163
|
describe "#include?" do
|
164
164
|
it "says that 'a/c' is included in [<a/b>, <a/c>, </a/d>]" do
|
165
|
-
list =
|
165
|
+
list = FilepathList.new(%w{a/b a/c /a/d})
|
166
166
|
list.should include("a/c")
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
170
170
|
describe "#to_s" do
|
171
171
|
it "returns files separated by a comma`" do
|
172
|
-
list =
|
172
|
+
list = FilepathList.new(%w{a/b a/c /a/d})
|
173
173
|
list.to_s.should == "a/b:a/c:/a/d"
|
174
174
|
end
|
175
175
|
end
|
@@ -177,53 +177,53 @@ describe FilePathList do
|
|
177
177
|
describe "#==" do
|
178
178
|
let(:list) { ['a/b', 'c/d', 'e/f'].as_path_list }
|
179
179
|
|
180
|
-
it "compares a
|
181
|
-
list2 =
|
180
|
+
it "compares a FilepathList to another FilepathList" do
|
181
|
+
list2 = FilepathList.new << 'a/b' << 'c/d' << 'e/f'
|
182
182
|
list3 = list2 << 'g/h'
|
183
183
|
|
184
184
|
list.should eq(list2)
|
185
185
|
list.should_not eq(list3)
|
186
186
|
end
|
187
187
|
|
188
|
-
it "compares a
|
188
|
+
it "compares a FilepathList to an Array of Strings" do
|
189
189
|
list.should eq(%w{a/b c/d e/f})
|
190
190
|
list.should_not eq(%w{a/a b/b c/c})
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
|
-
describe
|
195
|
-
let(:list) {
|
194
|
+
describe FilepathList::ArrayMethods do
|
195
|
+
let(:list) { FilepathList.new(%w{a.foo b.bar c.foo d.foo b.bar}) }
|
196
196
|
|
197
197
|
describe "#all?" do
|
198
198
|
it "checks whether a block applies to a list" do
|
199
199
|
ok = list.all? { |path| path.extension? }
|
200
|
-
ok.should
|
200
|
+
ok.should be true
|
201
201
|
end
|
202
202
|
end
|
203
203
|
|
204
204
|
describe "#any?" do
|
205
205
|
it "check whether a block does not apply to any path" do
|
206
206
|
ok = list.any? { |path| path.basename == "a.foo" }
|
207
|
-
ok.should
|
207
|
+
ok.should be true
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
211
211
|
describe "#none?" do
|
212
212
|
it "check whether a block does not apply to any path" do
|
213
213
|
ok = list.none? { |path| path.absolute? }
|
214
|
-
ok.should
|
214
|
+
ok.should be true
|
215
215
|
end
|
216
216
|
end
|
217
217
|
end
|
218
218
|
|
219
|
-
describe
|
220
|
-
let(:list) {
|
219
|
+
describe FilepathList::EntriesMethods do
|
220
|
+
let(:list) { FilepathList.new(%w{a.foo b.bar c.foo d.foo b.bar}) }
|
221
221
|
|
222
222
|
describe "#select" do
|
223
223
|
it "keeps paths matching a Regex" do
|
224
224
|
remaining = list.select(/bar$/)
|
225
225
|
|
226
|
-
remaining.should be_a
|
226
|
+
remaining.should be_a FilepathList
|
227
227
|
remaining.should have(2).items
|
228
228
|
remaining.each { |path| path.extension.should == 'bar' }
|
229
229
|
end
|
@@ -240,7 +240,7 @@ describe FilePathList do
|
|
240
240
|
it "excludes paths matching a Regex" do
|
241
241
|
remaining = list.exclude(/bar$/)
|
242
242
|
|
243
|
-
remaining.should be_a
|
243
|
+
remaining.should be_a FilepathList
|
244
244
|
remaining.should have(3).items
|
245
245
|
remaining.each { |path| path.extension.should == 'foo' }
|
246
246
|
end
|
@@ -248,7 +248,7 @@ describe FilePathList do
|
|
248
248
|
it "excludes all the paths for which the block returns true" do
|
249
249
|
remaining = list.exclude { |path| path.extension?('bar') }
|
250
250
|
|
251
|
-
remaining.should be_a
|
251
|
+
remaining.should be_a FilepathList
|
252
252
|
remaining.should have(3).items
|
253
253
|
remaining.each { |path| path.extension.should == 'foo' }
|
254
254
|
end
|
@@ -258,9 +258,9 @@ describe FilePathList do
|
|
258
258
|
it "applies a block to each path" do
|
259
259
|
mapped = list.map { |path| path.remove_extension }
|
260
260
|
|
261
|
-
mapped.should be_a
|
261
|
+
mapped.should be_a FilepathList
|
262
262
|
mapped.should have(list.size).items
|
263
|
-
mapped.each { |path| path.extension?.should
|
263
|
+
mapped.each { |path| path.extension?.should be false }
|
264
264
|
end
|
265
265
|
end
|
266
266
|
end
|
@@ -269,11 +269,11 @@ end
|
|
269
269
|
|
270
270
|
describe Array do
|
271
271
|
describe "#as_path_list" do
|
272
|
-
it "generates a
|
272
|
+
it "generates a FilepathList from an Array" do
|
273
273
|
paths = %w{/a/b c/d /f/g}
|
274
274
|
list = paths.as_path_list
|
275
275
|
|
276
|
-
list.should be_a(
|
276
|
+
list.should be_a(FilepathList)
|
277
277
|
list.should include(*paths)
|
278
278
|
end
|
279
279
|
end
|
data/spec/fixtures.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# This is free software released into the public domain (CC0 license).
|
2
|
+
|
3
|
+
FIXTURES_DIR = File.join(%w{spec fixtures})
|
4
|
+
FIXTURES_FAKE_ENTRIES = [
|
5
|
+
'd1',
|
6
|
+
['d1', 'd11'],
|
7
|
+
['d1', 'd12'],
|
8
|
+
['d1', 'd13'],
|
9
|
+
['d1', 'f11'],
|
10
|
+
['d1', 'f12'],
|
11
|
+
['d1', 'l11'],
|
12
|
+
'd2',
|
13
|
+
['d2', 'd21'],
|
14
|
+
['d2', 'd22'],
|
15
|
+
'd3',
|
16
|
+
'f1',
|
17
|
+
'dx',
|
18
|
+
'p1',
|
19
|
+
'p2',
|
20
|
+
's1',
|
21
|
+
].map { |entry| File.join(FIXTURES_DIR, *Array(entry)) }
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,22 @@
|
|
1
|
-
# This is free software released into the public domain (CC0 license).
|
2
|
-
|
3
1
|
LIB_DIR = File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib]))
|
4
2
|
$LOAD_PATH.unshift(LIB_DIR) unless $LOAD_PATH.include?(LIB_DIR)
|
5
3
|
|
6
4
|
require 'filepath'
|
7
5
|
|
6
|
+
require File.join(File.dirname(__FILE__), 'fixtures')
|
7
|
+
|
8
8
|
RSpec.configure do |config|
|
9
9
|
config.filter_run_excluding :broken => true
|
10
|
+
|
11
|
+
config.expect_with :rspec do |rspec|
|
12
|
+
rspec.syntax = [:should, :expect]
|
13
|
+
end
|
14
|
+
|
15
|
+
config.mock_with :rspec do |mocks|
|
16
|
+
mocks.syntax = [:should, :expect]
|
17
|
+
end
|
10
18
|
end
|
11
19
|
|
12
|
-
|
20
|
+
require 'rspec/collection_matchers'
|
21
|
+
|
22
|
+
# This is free software released into the public domain (CC0 license).
|
data/spec/tasks.rb
CHANGED
@@ -2,25 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'rake/clean'
|
4
4
|
|
5
|
-
|
6
|
-
FIXTURES_FAKE_ENTRIES = [
|
7
|
-
'd1',
|
8
|
-
['d1', 'd11'],
|
9
|
-
['d1', 'd12'],
|
10
|
-
['d1', 'd13'],
|
11
|
-
['d1', 'f11'],
|
12
|
-
['d1', 'f12'],
|
13
|
-
['d1', 'l11'],
|
14
|
-
'd2',
|
15
|
-
['d2', 'd21'],
|
16
|
-
['d2', 'd22'],
|
17
|
-
'd3',
|
18
|
-
'f1',
|
19
|
-
'dx',
|
20
|
-
'p1',
|
21
|
-
'p2',
|
22
|
-
's1',
|
23
|
-
].map { |entry| File.join(FIXTURES_DIR, *Array(entry)) }
|
5
|
+
require File.join(File.dirname(__FILE__), 'fixtures')
|
24
6
|
|
25
7
|
CLEAN.concat FIXTURES_FAKE_ENTRIES
|
26
8
|
|
metadata
CHANGED
@@ -1,71 +1,84 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filepath
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.7'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gioele Barabucci
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-collection_matchers
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: The Filepath class provides immutable objects with dozens of convenience
|
70
|
+
methods for common operations such as calculating relative paths, concatenating
|
71
|
+
paths, finding all the files in a directory or modifying all the extensions of a
|
72
|
+
list of filenames at once.
|
60
73
|
email:
|
61
74
|
- gioele@svario.it
|
62
75
|
executables: []
|
63
76
|
extensions: []
|
64
77
|
extra_rdoc_files: []
|
65
78
|
files:
|
66
|
-
- .gitignore
|
67
|
-
- .travis.yml
|
68
|
-
- .yardopts
|
79
|
+
- ".gitignore"
|
80
|
+
- ".travis.yml"
|
81
|
+
- ".yardopts"
|
69
82
|
- COPYING
|
70
83
|
- Gemfile
|
71
84
|
- README.md
|
@@ -78,6 +91,7 @@ files:
|
|
78
91
|
- lib/filepath/filepathlist.rb
|
79
92
|
- spec/filepath_spec.rb
|
80
93
|
- spec/filepathlist_spec.rb
|
94
|
+
- spec/fixtures.rb
|
81
95
|
- spec/spec_helper.rb
|
82
96
|
- spec/tasks.rb
|
83
97
|
homepage: http://github.com/gioele/filepath
|
@@ -90,23 +104,24 @@ require_paths:
|
|
90
104
|
- lib
|
91
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
92
106
|
requirements:
|
93
|
-
- -
|
107
|
+
- - ">="
|
94
108
|
- !ruby/object:Gem::Version
|
95
109
|
version: '0'
|
96
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
111
|
requirements:
|
98
|
-
- -
|
112
|
+
- - ">="
|
99
113
|
- !ruby/object:Gem::Version
|
100
114
|
version: '0'
|
101
115
|
requirements: []
|
102
116
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.
|
117
|
+
rubygems_version: 2.6.11
|
104
118
|
signing_key:
|
105
119
|
specification_version: 4
|
106
|
-
summary:
|
107
|
-
|
120
|
+
summary: A small library to manipulate paths; a modern replacement for the standard
|
121
|
+
Pathname.
|
108
122
|
test_files:
|
109
123
|
- spec/filepath_spec.rb
|
110
124
|
- spec/filepathlist_spec.rb
|
125
|
+
- spec/fixtures.rb
|
111
126
|
- spec/spec_helper.rb
|
112
127
|
- spec/tasks.rb
|