social_snippet 0.0.9 → 0.0.10
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 +8 -8
- data/.travis.yml +11 -4
- data/README.md +6 -6
- data/Rakefile +19 -1
- data/lib/social_snippet.rb +11 -0
- data/lib/social_snippet/api/install_repository_api.rb +23 -82
- data/lib/social_snippet/api/manifest_api.rb +3 -3
- data/lib/social_snippet/api/update_repository_api.rb +34 -35
- data/lib/social_snippet/command_line/sspm/sub_commands/install_command.rb +7 -7
- data/lib/social_snippet/config.rb +18 -8
- data/lib/social_snippet/core.rb +13 -0
- data/lib/social_snippet/document.rb +2 -0
- data/lib/social_snippet/document_backend.rb +2 -0
- data/lib/social_snippet/document_backend/yaml_document.rb +252 -0
- data/lib/social_snippet/document_backend/yaml_document/query.rb +45 -0
- data/lib/social_snippet/repository.rb +2 -2
- data/lib/social_snippet/repository/driver_factory.rb +42 -0
- data/lib/social_snippet/repository/drivers.rb +3 -2
- data/lib/social_snippet/repository/drivers/driver_base.rb +100 -0
- data/lib/social_snippet/repository/drivers/entry.rb +11 -0
- data/lib/social_snippet/repository/drivers/git_driver.rb +100 -0
- data/lib/social_snippet/repository/models.rb +15 -0
- data/lib/social_snippet/repository/models/package.rb +97 -0
- data/lib/social_snippet/repository/models/repository.rb +94 -0
- data/lib/social_snippet/repository/repository_manager.rb +79 -67
- data/lib/social_snippet/resolvers/base_resolver.rb +13 -17
- data/lib/social_snippet/rspec/test_document.rb +305 -0
- data/lib/social_snippet/rspec/test_driver.rb +76 -0
- data/lib/social_snippet/rspec/test_storage.rb +459 -0
- data/lib/social_snippet/storage.rb +1 -0
- data/lib/social_snippet/storage_backend.rb +3 -0
- data/lib/social_snippet/storage_backend/file_system_storage.rb +71 -0
- data/lib/social_snippet/storage_backend/storage_base.rb +35 -0
- data/lib/social_snippet/version.rb +8 -3
- data/spec/helpers/codeclimate_helper.rb +1 -1
- data/spec/helpers/fakefs_helper.rb +10 -0
- data/spec/helpers/social_snippet_helper.rb +117 -0
- data/spec/lib/api/insert_snippet_spec.rb +95 -2
- data/spec/lib/api/update_repository_spec.rb +196 -0
- data/spec/lib/command_line/sspm_install_spec.rb +169 -180
- data/spec/lib/command_line/sspm_update_spec.rb +56 -0
- data/spec/lib/config_spec.rb +6 -8
- data/spec/lib/core_spec.rb +21 -38
- data/spec/lib/file_system_storage_spec.rb +170 -0
- data/spec/lib/insert_resolver_spec.rb +15 -2
- data/spec/lib/registry_client_spec.rb +6 -9
- data/spec/lib/repository/driver_base_spec.rb +89 -0
- data/spec/lib/repository/git_driver_spec.rb +10 -0
- data/spec/lib/repository/package_spec.rb +172 -0
- data/spec/lib/repository/repository_factory_spec.rb +67 -22
- data/spec/lib/repository/repository_manager_spec.rb +71 -114
- data/spec/lib/repository/repository_spec.rb +191 -0
- data/spec/lib/yaml_document_spec.rb +14 -0
- data/spec/spec_helper.rb +8 -93
- data/test/config_test.rb +6 -7
- data/test/driver_base_test.rb +201 -0
- data/test/git_driver_test.rb +51 -0
- data/test/insert_snippet_test.rb +256 -349
- data/test/repository_manager_test.rb +7 -16
- data/test/yaml_document_test.rb +97 -0
- metadata +44 -16
- data/lib/social_snippet/repository/drivers/base_repository.rb +0 -189
- data/lib/social_snippet/repository/drivers/git_repository.rb +0 -74
- data/lib/social_snippet/repository/repository_factory.rb +0 -59
- data/lib/social_snippet/repository/repository_installer.rb +0 -85
- data/spec/lib/repository/base_repository_spec.rb +0 -104
- data/spec/lib/repository/git_repository_spec.rb +0 -83
- data/spec/lib/repository/repository_installer_spec.rb +0 -63
- data/test/base_repository_test.rb +0 -375
- data/test/git_repository_test.rb +0 -114
@@ -32,7 +32,6 @@ module SocialSnippet
|
|
32
32
|
move_context_by_tag! new_context, t
|
33
33
|
overwrite_tag_in_same_repository! new_context, t
|
34
34
|
update_tag_path_by_context! new_context, t
|
35
|
-
resolve_tag_repo_ref! t
|
36
35
|
end
|
37
36
|
|
38
37
|
resolve_tag_repo_ref! t
|
@@ -47,13 +46,6 @@ module SocialSnippet
|
|
47
46
|
|
48
47
|
private
|
49
48
|
|
50
|
-
def resolve_tag_repo_ref!(t)
|
51
|
-
if t.has_repo?
|
52
|
-
repo = core.repo_manager.find_repository_by_tag(t)
|
53
|
-
t.set_ref repo.latest_version(t.ref)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
49
|
def move_context_by_tag!(context, tag)
|
58
50
|
if tag.has_repo?
|
59
51
|
if tag.has_ref?
|
@@ -83,16 +75,20 @@ module SocialSnippet
|
|
83
75
|
|
84
76
|
# Resolve tag's ref
|
85
77
|
def resolve_tag_repo_ref!(tag)
|
86
|
-
|
87
|
-
|
88
|
-
#
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
if repo.has_versions?
|
93
|
-
tag.set_ref repo.latest_version(tag.ref)
|
78
|
+
return unless tag.has_repo?
|
79
|
+
repo = core.repo_manager.find_repository(tag.repo)
|
80
|
+
# set latest version
|
81
|
+
if tag.has_ref? === false
|
82
|
+
if repo.has_package_versions?
|
83
|
+
tag.set_ref repo.latest_package_version
|
94
84
|
else
|
95
|
-
tag.set_ref repo.
|
85
|
+
tag.set_ref repo.current_ref
|
86
|
+
end
|
87
|
+
else
|
88
|
+
unless repo.has_ref?(tag.ref)
|
89
|
+
new_ref = repo.latest_version(tag.ref)
|
90
|
+
raise "error" if new_ref.nil?
|
91
|
+
tag.set_ref new_ref
|
96
92
|
end
|
97
93
|
end
|
98
94
|
end
|
@@ -0,0 +1,305 @@
|
|
1
|
+
RSpec.configure do
|
2
|
+
|
3
|
+
shared_context :TestDocument do
|
4
|
+
|
5
|
+
class TestDocument1 < ::SocialSnippet::Document
|
6
|
+
field :field_string, :type => String
|
7
|
+
field :field_array, :type => Array, :default => ::Array.new
|
8
|
+
field :field_hash, :type => Hash, :default => ::Hash.new
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestDocument2 < ::SocialSnippet::Document
|
12
|
+
field :field_string, :type => String
|
13
|
+
field :field_array, :type => Array, :default => ::Array.new
|
14
|
+
field :field_hash, :type => Hash, :default => ::Hash.new
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "find by regexp" do
|
18
|
+
|
19
|
+
context "create items" do
|
20
|
+
|
21
|
+
before do
|
22
|
+
TestDocument1.create :field_string => "a"
|
23
|
+
TestDocument1.create :field_string => "A"
|
24
|
+
TestDocument1.create :field_string => "abc"
|
25
|
+
TestDocument1.create :field_string => "b"
|
26
|
+
TestDocument1.create :field_string => "bc"
|
27
|
+
TestDocument1.create :field_string => "c"
|
28
|
+
end
|
29
|
+
|
30
|
+
context "where /^a/" do
|
31
|
+
|
32
|
+
let(:result) { TestDocument1.where :field_string => /^a/ }
|
33
|
+
|
34
|
+
context "map result" do
|
35
|
+
subject do
|
36
|
+
result.map {|item| item.field_string }
|
37
|
+
end
|
38
|
+
it { should include "a" }
|
39
|
+
it { should_not include "A" }
|
40
|
+
it { should include "abc" }
|
41
|
+
it { should_not include "b" }
|
42
|
+
it { should_not include "bc" }
|
43
|
+
it { should_not include "c" }
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end # find by regexp
|
51
|
+
|
52
|
+
describe "#add_to_set" do
|
53
|
+
|
54
|
+
context "create item" do
|
55
|
+
|
56
|
+
let(:item) { TestDocument2.create }
|
57
|
+
it { expect(item.field_array).to be_empty }
|
58
|
+
|
59
|
+
context "add_to_set value" do
|
60
|
+
|
61
|
+
before { item.add_to_set :field_array => "value" }
|
62
|
+
it { expect(item.field_array.length).to eq 1 }
|
63
|
+
it { expect(item.field_array).to include "value" }
|
64
|
+
|
65
|
+
context "add_to_set new_value" do
|
66
|
+
|
67
|
+
before { item.add_to_set :field_array => "new-value" }
|
68
|
+
it { expect(item.field_array.length).to eq 2 }
|
69
|
+
it { expect(item.field_array).to include "value" }
|
70
|
+
it { expect(item.field_array).to include "new-value" }
|
71
|
+
|
72
|
+
context "add_to_set value (duplicated value)" do
|
73
|
+
|
74
|
+
before { item.add_to_set :field_array => "value" }
|
75
|
+
it { expect(item.field_array.length).to eq 2 }
|
76
|
+
it { expect(item.field_array).to include "value" }
|
77
|
+
it { expect(item.field_array).to include "new-value" }
|
78
|
+
|
79
|
+
context "find item.id" do
|
80
|
+
|
81
|
+
let(:found_item) { TestDocument2.find(item.id) }
|
82
|
+
it { expect(item.field_array.length).to eq 2 }
|
83
|
+
it { expect(item.field_array).to include "value" }
|
84
|
+
it { expect(item.field_array).to include "new-value" }
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
end #add_to_set
|
97
|
+
|
98
|
+
describe "#update_attributes!" do
|
99
|
+
|
100
|
+
context "create item" do
|
101
|
+
let(:item) { TestDocument1.create :field_string => "value" }
|
102
|
+
subject { item.field_string }
|
103
|
+
it { should eq "value" }
|
104
|
+
context "find item.id" do
|
105
|
+
subject { TestDocument1.find item.id }
|
106
|
+
it { expect(subject.field_string).to eq "value" }
|
107
|
+
end
|
108
|
+
context "item.update_attributes! field_string => new-value" do
|
109
|
+
before { item.update_attributes! :field_string => "new-value" }
|
110
|
+
it { should eq "new-value" }
|
111
|
+
context "find item.id" do
|
112
|
+
subject { TestDocument1.find item.id }
|
113
|
+
it { expect(subject.field_string).to eq "new-value" }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "#push" do
|
121
|
+
|
122
|
+
context "create item" do
|
123
|
+
|
124
|
+
let(:item) { TestDocument1.create }
|
125
|
+
it { expect(item.field_array).to be_empty }
|
126
|
+
|
127
|
+
context "push item" do
|
128
|
+
|
129
|
+
before { item.push :field_array => "val" }
|
130
|
+
it { expect(item.field_array).to_not be_empty }
|
131
|
+
it { expect(item.field_array).to include "val" }
|
132
|
+
|
133
|
+
context "pull item" do
|
134
|
+
|
135
|
+
before { item.pull :field_array => "val" }
|
136
|
+
it { expect(item.field_array).to be_empty }
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
end #push
|
145
|
+
|
146
|
+
describe "#count" do
|
147
|
+
|
148
|
+
subject { TestDocument1.count }
|
149
|
+
it { should eq 0 }
|
150
|
+
|
151
|
+
context "create a item" do
|
152
|
+
|
153
|
+
before { TestDocument1.create(:field_string => "item") }
|
154
|
+
it { should eq 1 }
|
155
|
+
|
156
|
+
context "find_or_create_by item" do
|
157
|
+
|
158
|
+
before { TestDocument1.find_or_create_by(:field_string => "item") }
|
159
|
+
it { should eq 1 }
|
160
|
+
|
161
|
+
context "create another item" do
|
162
|
+
before { TestDocument1.create(:field_string => "item") }
|
163
|
+
it { should eq 2 }
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
describe "#exists?" do
|
173
|
+
|
174
|
+
subject { TestDocument1.exists? }
|
175
|
+
it { should be_falsey }
|
176
|
+
|
177
|
+
context "TestDocument2.exists?" do
|
178
|
+
subject { TestDocument2.exists? }
|
179
|
+
it { should be_falsey }
|
180
|
+
end
|
181
|
+
|
182
|
+
context "create a item" do
|
183
|
+
|
184
|
+
before { TestDocument1.create(:field_string => "item1") }
|
185
|
+
it { should be_truthy }
|
186
|
+
|
187
|
+
context "TestDocument2.exists?" do
|
188
|
+
subject { TestDocument2.exists? }
|
189
|
+
it { should be_falsey }
|
190
|
+
end
|
191
|
+
|
192
|
+
end # create a item
|
193
|
+
|
194
|
+
end #exists?
|
195
|
+
|
196
|
+
describe "#find_by" do
|
197
|
+
|
198
|
+
context "find_or_create_by :field_string => abc" do
|
199
|
+
|
200
|
+
before do
|
201
|
+
doc = TestDocument1.find_or_create_by(:field_string => "abc")
|
202
|
+
doc.field_array.push "val1"
|
203
|
+
doc.field_array.push "val2"
|
204
|
+
doc.field_array.push "val3"
|
205
|
+
doc.field_hash["key"] = "val"
|
206
|
+
doc.save!
|
207
|
+
end
|
208
|
+
|
209
|
+
context "find_by :field_string => abc" do
|
210
|
+
let(:item) { TestDocument1.find_by :field_string => "abc" }
|
211
|
+
it { expect(item.field_string).to eq "abc" }
|
212
|
+
it { expect(item.field_array.length).to eq 3 }
|
213
|
+
it { expect(item.field_array).to include "val1" }
|
214
|
+
it { expect(item.field_array).to include "val2" }
|
215
|
+
it { expect(item.field_array).to include "val3" }
|
216
|
+
it { expect(item.field_hash["key"]).to include "val" }
|
217
|
+
end
|
218
|
+
|
219
|
+
context "find_by :field_string => not_found" do
|
220
|
+
subject do
|
221
|
+
lambda { TestDocument1.find_by :field_string => "not_found" }
|
222
|
+
end
|
223
|
+
it { should raise_error }
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
end #find_by
|
229
|
+
|
230
|
+
describe "test field" do
|
231
|
+
|
232
|
+
let(:doc) do
|
233
|
+
TestDocument1.new
|
234
|
+
end
|
235
|
+
|
236
|
+
context "doc.field_string = test" do
|
237
|
+
before { doc.field_string = "test" }
|
238
|
+
it { expect(doc.field_string).to eq "test" }
|
239
|
+
end
|
240
|
+
|
241
|
+
context "doc.field_array.push item" do
|
242
|
+
before { doc.field_array.push "item" }
|
243
|
+
it { expect(doc.field_array).to include "item" }
|
244
|
+
end
|
245
|
+
|
246
|
+
context "doc.field_hash[key] = value" do
|
247
|
+
before { doc.field_hash["key"] = "value" }
|
248
|
+
it { expect(doc.field_hash["key"]).to eq "value" }
|
249
|
+
end
|
250
|
+
|
251
|
+
end # test field
|
252
|
+
|
253
|
+
describe "test persistence" do
|
254
|
+
|
255
|
+
context "create item" do
|
256
|
+
|
257
|
+
before do
|
258
|
+
item = TestDocument1.create(:id => "item")
|
259
|
+
item.field_string = "this is string"
|
260
|
+
item.field_array.push "this is array"
|
261
|
+
item.field_hash["key"] = "this is hash"
|
262
|
+
item.save!
|
263
|
+
end
|
264
|
+
|
265
|
+
context "check existance" do
|
266
|
+
context "TestDocument1.where(:id => item).exists?" do
|
267
|
+
subject { TestDocument1.where(:id => "item").exists? }
|
268
|
+
it { should be_truthy }
|
269
|
+
end
|
270
|
+
context "TestDocument2.where(:id => item).exists?" do
|
271
|
+
subject { TestDocument2.where(:id => "item").exists? }
|
272
|
+
it { should be_falsey }
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
context "find item" do
|
277
|
+
context "in document-1" do
|
278
|
+
subject { TestDocument1.find "item" }
|
279
|
+
it { expect(subject.field_string).to eq "this is string" }
|
280
|
+
it { expect(subject.field_array).to include "this is array" }
|
281
|
+
it { expect(subject.field_hash["key"]).to eq "this is hash" }
|
282
|
+
end
|
283
|
+
context "in document-2" do
|
284
|
+
example do
|
285
|
+
expect { TestDocument2.find "item" }.to raise_error
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
context "remove item" do
|
291
|
+
before { TestDocument1.find("item").remove }
|
292
|
+
context "re-find item" do
|
293
|
+
subject { TestDocument1.where(:id => "item").exists? }
|
294
|
+
it { should be_falsey }
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
end # create item
|
299
|
+
|
300
|
+
end # test persistence
|
301
|
+
|
302
|
+
end # [shared] TestDocument
|
303
|
+
|
304
|
+
end
|
305
|
+
|
@@ -0,0 +1,76 @@
|
|
1
|
+
RSpec.configure do
|
2
|
+
|
3
|
+
# need to set let(:driver_class) { ... }
|
4
|
+
shared_context :TestDriver do
|
5
|
+
|
6
|
+
describe "test driver class", :without_fakefs => true do
|
7
|
+
|
8
|
+
context "handle github repo" do
|
9
|
+
|
10
|
+
let(:repo_url) { "git://github.com/social-snippet/example-repo.git" }
|
11
|
+
|
12
|
+
subject(:driver) do
|
13
|
+
driver_class.new repo_url
|
14
|
+
end
|
15
|
+
|
16
|
+
context "driver.fetch" do
|
17
|
+
|
18
|
+
before { driver.fetch }
|
19
|
+
|
20
|
+
describe "#each_file" do
|
21
|
+
context "get files" do
|
22
|
+
let(:files) { ::Hash.new }
|
23
|
+
before do
|
24
|
+
driver.each_file("1.0.2") do |file|
|
25
|
+
files[file.path] = file.data
|
26
|
+
end
|
27
|
+
end
|
28
|
+
context "check files" do
|
29
|
+
subject { files }
|
30
|
+
it { should include "README.md" }
|
31
|
+
it { should include "snippet.json" }
|
32
|
+
it { should include "src/func.cpp" }
|
33
|
+
it { should include "src/func/sub_func_1.cpp" }
|
34
|
+
it { should include "src/func/sub_func_2.cpp" }
|
35
|
+
it { should include "src/func/sub_func_3.cpp" }
|
36
|
+
it { expect(files["snippet.json"]).to match "example-repo" }
|
37
|
+
it { expect(files["src/func/sub_func_1.cpp"]).to match "int sub_func_1()" }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#refs" do
|
43
|
+
subject { driver.refs }
|
44
|
+
it { should include "master" }
|
45
|
+
it { should include "1.0.0" }
|
46
|
+
it { should include "1.0.1" }
|
47
|
+
end #refs
|
48
|
+
|
49
|
+
describe "#versions" do
|
50
|
+
subject { driver.versions }
|
51
|
+
it { should_not include "master" }
|
52
|
+
it { should include "1.0.0" }
|
53
|
+
it { should include "1.0.1" }
|
54
|
+
end #versions
|
55
|
+
|
56
|
+
describe "#latest_version" do
|
57
|
+
context "latest_version 1.0" do
|
58
|
+
subject { driver.latest_version("1.0") }
|
59
|
+
it { should eq "1.0.2" }
|
60
|
+
end
|
61
|
+
context "latest_version 9.9" do
|
62
|
+
subject { driver.latest_version("9.9") }
|
63
|
+
it { should eq nil }
|
64
|
+
end
|
65
|
+
end #latest_version
|
66
|
+
|
67
|
+
end # driver.fetch
|
68
|
+
|
69
|
+
end # github repo
|
70
|
+
|
71
|
+
end #
|
72
|
+
|
73
|
+
end # [shared] TestDriver
|
74
|
+
|
75
|
+
end
|
76
|
+
|
@@ -0,0 +1,459 @@
|
|
1
|
+
RSpec.configure do
|
2
|
+
|
3
|
+
shared_context :TestStorage do
|
4
|
+
|
5
|
+
describe "test storage class" do
|
6
|
+
|
7
|
+
let(:storage) { ::SocialSnippet::Storage.new }
|
8
|
+
|
9
|
+
describe "no entry" do
|
10
|
+
|
11
|
+
context "read not_found.txt" do
|
12
|
+
subject do
|
13
|
+
lambda { storage.read "not_found.txt" }
|
14
|
+
end
|
15
|
+
it { should raise_error ::Errno::ENOENT }
|
16
|
+
end
|
17
|
+
|
18
|
+
context "rm path/to/not_found" do
|
19
|
+
subject do
|
20
|
+
lambda { storage.rm "path/to/not_found.txt" }
|
21
|
+
end
|
22
|
+
it { should raise_error ::Errno::ENOENT }
|
23
|
+
end
|
24
|
+
|
25
|
+
context "touch not_found/path/to/file" do
|
26
|
+
subject do
|
27
|
+
lambda { storage.touch "not_found/path/to/file" }
|
28
|
+
end
|
29
|
+
it { should raise_error ::Errno::ENOENT }
|
30
|
+
end
|
31
|
+
|
32
|
+
context "rm_r path/to/not_found" do
|
33
|
+
subject do
|
34
|
+
lambda { storage.rm_r "path/to/not_found" }
|
35
|
+
end
|
36
|
+
it { should raise_error ::Errno::ENOENT }
|
37
|
+
end
|
38
|
+
|
39
|
+
context "cd path/to/not_found" do
|
40
|
+
subject do
|
41
|
+
lambda { storage.cd "path/to/not_found" }
|
42
|
+
end
|
43
|
+
it { should raise_error ::Errno::ENOENT }
|
44
|
+
end
|
45
|
+
|
46
|
+
context "prepare file" do
|
47
|
+
before do
|
48
|
+
storage.mkdir_p "path/to"
|
49
|
+
storage.touch "path/to/file"
|
50
|
+
end
|
51
|
+
context "cd path/to/file" do
|
52
|
+
subject do
|
53
|
+
lambda { storage.cd "path/to/file"; p storage.pwd; p storage.file?(storage.pwd) }
|
54
|
+
end
|
55
|
+
# TODO: it { should raise_error ::Errno::ENOTDIR }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end # no entry
|
60
|
+
|
61
|
+
describe "#glob" do
|
62
|
+
|
63
|
+
context "prepare storage" do
|
64
|
+
|
65
|
+
before do
|
66
|
+
storage.mkdir_p "/path/to/dir1"
|
67
|
+
storage.mkdir_p "/path/to/dir2"
|
68
|
+
storage.mkdir_p "/path/to/dir2/subdir1"
|
69
|
+
storage.mkdir_p "/path/to/dir2/subdir2"
|
70
|
+
storage.mkdir_p "/path/to/dir3"
|
71
|
+
storage.touch "/path/to/file1.c"
|
72
|
+
storage.touch "/path/to/dir1/file2.c"
|
73
|
+
storage.touch "/path/to/dir1/file3.c"
|
74
|
+
storage.touch "/path/to/dir2/file4.rb"
|
75
|
+
storage.touch "/path/to/dir2/file5.c"
|
76
|
+
storage.touch "/path/to/dir3/file6.cpp"
|
77
|
+
storage.touch "/path/to/dir2/subdir1/file7.c"
|
78
|
+
storage.touch "/path/to/dir2/subdir2/file8.rb"
|
79
|
+
end
|
80
|
+
|
81
|
+
context "glob /path/to/dir1" do
|
82
|
+
subject { storage.glob "/path/to/dir1" }
|
83
|
+
it { expect(subject.length).to eq 1 }
|
84
|
+
it { should include "/path/to/dir1" }
|
85
|
+
it { should_not include "/path/to/dir2" }
|
86
|
+
it { should_not include "/path/to/dir3" }
|
87
|
+
it { should_not include "/path/to/file1.c" }
|
88
|
+
end
|
89
|
+
|
90
|
+
context "glob /path/to/*.c" do
|
91
|
+
subject { storage.glob "/path/to/*.c" }
|
92
|
+
it { expect(subject.length).to eq 1 }
|
93
|
+
it { should_not include "/path/to/" }
|
94
|
+
it { should_not include "/path/to/dir2" }
|
95
|
+
it { should_not include "/path/to/dir3" }
|
96
|
+
it { should include "/path/to/file1.c" }
|
97
|
+
it { should_not include "/path/to/dir1/file2.c" }
|
98
|
+
it { should_not include "/path/to/dir1/file3.c" }
|
99
|
+
it { should_not include "/path/to/dir2/file5.c" }
|
100
|
+
it { should_not include "/path/to/dir3/file6.cpp" }
|
101
|
+
it { should_not include "/path/to/dir2/subdir1/file7.c" }
|
102
|
+
end
|
103
|
+
|
104
|
+
context "glob /path/to/**/*.c" do
|
105
|
+
subject { storage.glob "/path/to/**/*.c" }
|
106
|
+
it { expect(subject.length).to eq 5 }
|
107
|
+
it { should_not include "/path/to/" }
|
108
|
+
it { should_not include "/path/to/dir2" }
|
109
|
+
it { should_not include "/path/to/dir3" }
|
110
|
+
it { should include "/path/to/file1.c" }
|
111
|
+
it { should include "/path/to/dir1/file2.c" }
|
112
|
+
it { should include "/path/to/dir1/file3.c" }
|
113
|
+
it { should include "/path/to/dir2/file5.c" }
|
114
|
+
it { should_not include "/path/to/dir3/file6.cpp" }
|
115
|
+
it { should include "/path/to/dir2/subdir1/file7.c" }
|
116
|
+
end
|
117
|
+
|
118
|
+
context "glob /path/to/dir2/**/*.c" do
|
119
|
+
subject { storage.glob "/path/to/dir2/**/*.c" }
|
120
|
+
it { expect(subject.length).to eq 2 }
|
121
|
+
it { should_not include "/path/to/" }
|
122
|
+
it { should_not include "/path/to/dir2" }
|
123
|
+
it { should_not include "/path/to/dir3" }
|
124
|
+
it { should_not include "/path/to/file1.c" }
|
125
|
+
it { should_not include "/path/to/dir1/file2.c" }
|
126
|
+
it { should_not include "/path/to/dir1/file3.c" }
|
127
|
+
it { should include "/path/to/dir2/file5.c" }
|
128
|
+
it { should_not include "/path/to/dir3/file6.cpp" }
|
129
|
+
it { should include "/path/to/dir2/subdir1/file7.c" }
|
130
|
+
end
|
131
|
+
|
132
|
+
context "glob /path/to/**/*.cpp" do
|
133
|
+
subject { storage.glob "/path/to/**/*.cpp" }
|
134
|
+
it { expect(subject.length).to eq 1 }
|
135
|
+
it { should_not include "/path/to/" }
|
136
|
+
it { should_not include "/path/to/dir2" }
|
137
|
+
it { should_not include "/path/to/dir3" }
|
138
|
+
it { should_not include "/path/to/file1.c" }
|
139
|
+
it { should_not include "/path/to/dir1/file2.c" }
|
140
|
+
it { should_not include "/path/to/dir1/file3.c" }
|
141
|
+
it { should_not include "/path/to/dir2/file5.c" }
|
142
|
+
it { should include "/path/to/dir3/file6.cpp" }
|
143
|
+
it { should_not include "/path/to/dir2/subdir1/file7.c" }
|
144
|
+
end
|
145
|
+
|
146
|
+
context "glob /path/to/**/*.rb" do
|
147
|
+
subject { storage.glob "/path/to/**/*.rb" }
|
148
|
+
it { expect(subject.length).to eq 2 }
|
149
|
+
it { should_not include "/path/to/" }
|
150
|
+
it { should_not include "/path/to/dir2" }
|
151
|
+
it { should_not include "/path/to/dir3" }
|
152
|
+
it { should_not include "/path/to/file1.c" }
|
153
|
+
it { should_not include "/path/to/dir1/file2.c" }
|
154
|
+
it { should_not include "/path/to/dir1/file3.c" }
|
155
|
+
it { should include "/path/to/dir2/file4.rb" }
|
156
|
+
it { should_not include "/path/to/dir2/file5.c" }
|
157
|
+
it { should_not include "/path/to/dir3/file6.cpp" }
|
158
|
+
it { should_not include "/path/to/dir2/subdir1/file7.c" }
|
159
|
+
it { should include "/path/to/dir2/subdir2/file8.rb" }
|
160
|
+
end
|
161
|
+
|
162
|
+
context "glob /path/to/dir2/**/*.rb" do
|
163
|
+
subject { storage.glob "/path/to/dir2/**/*.rb" }
|
164
|
+
it { expect(subject.length).to eq 2 }
|
165
|
+
it { should_not include "/path/to/" }
|
166
|
+
it { should_not include "/path/to/dir2" }
|
167
|
+
it { should_not include "/path/to/dir3" }
|
168
|
+
it { should_not include "/path/to/file1.c" }
|
169
|
+
it { should_not include "/path/to/dir1/file2.c" }
|
170
|
+
it { should_not include "/path/to/dir1/file3.c" }
|
171
|
+
it { should include "/path/to/dir2/file4.rb" }
|
172
|
+
it { should_not include "/path/to/dir2/file5.c" }
|
173
|
+
it { should_not include "/path/to/dir3/file6.cpp" }
|
174
|
+
it { should_not include "/path/to/dir2/subdir1/file7.c" }
|
175
|
+
it { should include "/path/to/dir2/subdir2/file8.rb" }
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
end #glob
|
181
|
+
|
182
|
+
describe "change workdir" do
|
183
|
+
|
184
|
+
let!(:root_dir) { storage.pwd }
|
185
|
+
|
186
|
+
context "mkdir path/to/dir" do
|
187
|
+
|
188
|
+
subject { storage.pwd }
|
189
|
+
|
190
|
+
before { storage.mkdir_p "path/to/dir" }
|
191
|
+
|
192
|
+
context "cd path/to" do
|
193
|
+
|
194
|
+
before { storage.cd "path/to" }
|
195
|
+
it { should eq ::File.join(root_dir, "path", "to") }
|
196
|
+
|
197
|
+
context "cd ../" do
|
198
|
+
|
199
|
+
before { storage.cd "../" }
|
200
|
+
it { should eq ::File.join(root_dir, "path") }
|
201
|
+
|
202
|
+
context "storage.cd ./" do
|
203
|
+
|
204
|
+
before { storage.cd "./" }
|
205
|
+
it { should eq ::File.join(root_dir, "path") }
|
206
|
+
|
207
|
+
context "storage.cd ./to/dir" do
|
208
|
+
before { storage.cd "to/dir" }
|
209
|
+
it { should eq ::File.join(root_dir, "path", "to", "dir") }
|
210
|
+
end
|
211
|
+
|
212
|
+
end
|
213
|
+
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
context "touch path/to/dir/file" do
|
219
|
+
before { storage.touch "path/to/dir/file" }
|
220
|
+
context "cd path/to/dir" do
|
221
|
+
before { storage.cd "path/to/dir" }
|
222
|
+
context "read file" do
|
223
|
+
subject { storage.file? "file" }
|
224
|
+
it { should be_truthy }
|
225
|
+
end
|
226
|
+
context "read file from root" do
|
227
|
+
before { storage.cd root_dir }
|
228
|
+
subject { storage.file? "path/to/dir/file" }
|
229
|
+
it { should be_truthy }
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
end # mkdir path/to/dir
|
235
|
+
|
236
|
+
context "mkdir path" do
|
237
|
+
|
238
|
+
before { storage.mkdir "path" }
|
239
|
+
|
240
|
+
context "cd path" do
|
241
|
+
|
242
|
+
before { storage.cd "path" }
|
243
|
+
|
244
|
+
context "mkdir to" do
|
245
|
+
|
246
|
+
before { storage.mkdir "to" }
|
247
|
+
|
248
|
+
context "cd to" do
|
249
|
+
|
250
|
+
before { storage.cd "to" }
|
251
|
+
|
252
|
+
context "mkdir dir" do
|
253
|
+
|
254
|
+
before { storage.mkdir "dir" }
|
255
|
+
|
256
|
+
context "cd root" do
|
257
|
+
|
258
|
+
before { storage.cd root_dir }
|
259
|
+
|
260
|
+
context "directory? path/to/dir" do
|
261
|
+
subject { storage.directory? "path/to/dir" }
|
262
|
+
it { should be_truthy }
|
263
|
+
end
|
264
|
+
|
265
|
+
end
|
266
|
+
|
267
|
+
end
|
268
|
+
|
269
|
+
context "write file, data" do
|
270
|
+
|
271
|
+
before { storage.write "file", "data" }
|
272
|
+
|
273
|
+
context "cd root" do
|
274
|
+
|
275
|
+
before { storage.cd root_dir }
|
276
|
+
|
277
|
+
context "read path/to/file" do
|
278
|
+
subject { storage.read "path/to/file" }
|
279
|
+
it { should eq "data" }
|
280
|
+
end
|
281
|
+
|
282
|
+
end
|
283
|
+
|
284
|
+
end
|
285
|
+
|
286
|
+
end
|
287
|
+
|
288
|
+
end
|
289
|
+
|
290
|
+
end
|
291
|
+
|
292
|
+
end
|
293
|
+
|
294
|
+
end # change workdir
|
295
|
+
|
296
|
+
describe "duplication" do
|
297
|
+
|
298
|
+
context "mkdir /lib" do
|
299
|
+
|
300
|
+
before { storage.mkdir "/lib" }
|
301
|
+
|
302
|
+
context "touch /lib/entity" do
|
303
|
+
|
304
|
+
before { storage.touch "/lib/entity" }
|
305
|
+
|
306
|
+
context "mkdir /lib/entity" do
|
307
|
+
|
308
|
+
subject do
|
309
|
+
lambda { storage.mkdir "/lib/entity" }
|
310
|
+
end
|
311
|
+
|
312
|
+
it { should raise_error ::Errno::EEXIST }
|
313
|
+
|
314
|
+
end
|
315
|
+
|
316
|
+
end
|
317
|
+
|
318
|
+
context "mkdir /lib/entity" do
|
319
|
+
|
320
|
+
before { storage.mkdir "/lib/entity" }
|
321
|
+
|
322
|
+
context "touch /lib/entity" do
|
323
|
+
|
324
|
+
subject do
|
325
|
+
lambda { storage.touch "/lib/entity" }
|
326
|
+
end
|
327
|
+
|
328
|
+
it { should_not raise_error }
|
329
|
+
|
330
|
+
end
|
331
|
+
|
332
|
+
context "write /lib/entity, data" do
|
333
|
+
|
334
|
+
subject do
|
335
|
+
lambda { storage.write "/lib/entity", "data" }
|
336
|
+
end
|
337
|
+
|
338
|
+
it { should raise_error ::Errno::EISDIR }
|
339
|
+
|
340
|
+
end
|
341
|
+
|
342
|
+
end
|
343
|
+
|
344
|
+
end # mkdir /lib
|
345
|
+
|
346
|
+
end # duplication
|
347
|
+
|
348
|
+
context "mkdir_p /path/to" do
|
349
|
+
|
350
|
+
before { storage.mkdir_p "/path/to" }
|
351
|
+
|
352
|
+
context "exists? /path/to" do
|
353
|
+
before { storage.exists? "/path/to" }
|
354
|
+
it { should be_truthy }
|
355
|
+
end
|
356
|
+
|
357
|
+
context "file? /path/to" do
|
358
|
+
subject { storage.file? "/path/to" }
|
359
|
+
it { should be_falsey }
|
360
|
+
end
|
361
|
+
|
362
|
+
context "directory? /path/to" do
|
363
|
+
subject { storage.directory? "/path/to" }
|
364
|
+
it { should be_truthy }
|
365
|
+
end
|
366
|
+
|
367
|
+
context "write /path/to/file, data" do
|
368
|
+
before { storage.write "/path/to/file", "data" }
|
369
|
+
context "read /path/to/file" do
|
370
|
+
subject { storage.read "/path/to/file" }
|
371
|
+
it { should eq "data" }
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
context "touch /path/to/file" do
|
376
|
+
|
377
|
+
before { storage.touch "/path/to/file" }
|
378
|
+
|
379
|
+
context "exists? /path/to/file" do
|
380
|
+
subject { storage.exists? "/path/to/file" }
|
381
|
+
it { should be_truthy }
|
382
|
+
end
|
383
|
+
|
384
|
+
context "file? /path/to/file" do
|
385
|
+
subject { storage.file? "/path/to/file" }
|
386
|
+
it { should be_truthy }
|
387
|
+
end
|
388
|
+
|
389
|
+
context "directory? /path/to/file" do
|
390
|
+
subject { storage.directory? "/path/to/file" }
|
391
|
+
it { should be_falsey }
|
392
|
+
end
|
393
|
+
|
394
|
+
context "rm_r /path/to" do
|
395
|
+
|
396
|
+
before { storage.rm_r "/path/to" }
|
397
|
+
|
398
|
+
context "exists? /path/to" do
|
399
|
+
subject { storage.exists? "/path/to" }
|
400
|
+
it { should be_falsey }
|
401
|
+
end
|
402
|
+
|
403
|
+
context "file? /path/to" do
|
404
|
+
subject { storage.file? "/path/to" }
|
405
|
+
it { should be_falsey }
|
406
|
+
end
|
407
|
+
|
408
|
+
context "directory? /path/to" do
|
409
|
+
subject { storage.directory? "/path/to" }
|
410
|
+
it { should be_falsey }
|
411
|
+
end
|
412
|
+
|
413
|
+
context "exists? /path/to/file" do
|
414
|
+
subject { storage.exists? "/path/to/file" }
|
415
|
+
it { should be_falsey }
|
416
|
+
end
|
417
|
+
|
418
|
+
context "file? /path/to/file" do
|
419
|
+
subject { storage.file? "/path/to/file" }
|
420
|
+
it { should be_falsey }
|
421
|
+
end
|
422
|
+
|
423
|
+
context "directory? /path/to/file" do
|
424
|
+
subject { storage.directory? "/path/to/file" }
|
425
|
+
it { should be_falsey }
|
426
|
+
end
|
427
|
+
|
428
|
+
end
|
429
|
+
|
430
|
+
context "rm /path/to/file" do
|
431
|
+
|
432
|
+
before { storage.rm "/path/to/file" }
|
433
|
+
|
434
|
+
context "exists? /path/to/file" do
|
435
|
+
subject { storage.exists? "/path/to/file" }
|
436
|
+
it { should be_falsey }
|
437
|
+
end
|
438
|
+
|
439
|
+
context "file? /path/to/file" do
|
440
|
+
subject { storage.file? "/path/to/file" }
|
441
|
+
it { should be_falsey }
|
442
|
+
end
|
443
|
+
|
444
|
+
context "directory? /path/to/file" do
|
445
|
+
subject { storage.directory? "/path/to/file" }
|
446
|
+
it { should be_falsey }
|
447
|
+
end
|
448
|
+
|
449
|
+
end # rm /path/to/file
|
450
|
+
|
451
|
+
end # touch /path/to/file
|
452
|
+
|
453
|
+
end # mkdir_p /path/to
|
454
|
+
|
455
|
+
end # test storage class
|
456
|
+
|
457
|
+
end # [shared] TestStorage
|
458
|
+
|
459
|
+
end
|