social_snippet 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +8 -8
  2. data/.travis.yml +11 -4
  3. data/README.md +6 -6
  4. data/Rakefile +19 -1
  5. data/lib/social_snippet.rb +11 -0
  6. data/lib/social_snippet/api/install_repository_api.rb +23 -82
  7. data/lib/social_snippet/api/manifest_api.rb +3 -3
  8. data/lib/social_snippet/api/update_repository_api.rb +34 -35
  9. data/lib/social_snippet/command_line/sspm/sub_commands/install_command.rb +7 -7
  10. data/lib/social_snippet/config.rb +18 -8
  11. data/lib/social_snippet/core.rb +13 -0
  12. data/lib/social_snippet/document.rb +2 -0
  13. data/lib/social_snippet/document_backend.rb +2 -0
  14. data/lib/social_snippet/document_backend/yaml_document.rb +252 -0
  15. data/lib/social_snippet/document_backend/yaml_document/query.rb +45 -0
  16. data/lib/social_snippet/repository.rb +2 -2
  17. data/lib/social_snippet/repository/driver_factory.rb +42 -0
  18. data/lib/social_snippet/repository/drivers.rb +3 -2
  19. data/lib/social_snippet/repository/drivers/driver_base.rb +100 -0
  20. data/lib/social_snippet/repository/drivers/entry.rb +11 -0
  21. data/lib/social_snippet/repository/drivers/git_driver.rb +100 -0
  22. data/lib/social_snippet/repository/models.rb +15 -0
  23. data/lib/social_snippet/repository/models/package.rb +97 -0
  24. data/lib/social_snippet/repository/models/repository.rb +94 -0
  25. data/lib/social_snippet/repository/repository_manager.rb +79 -67
  26. data/lib/social_snippet/resolvers/base_resolver.rb +13 -17
  27. data/lib/social_snippet/rspec/test_document.rb +305 -0
  28. data/lib/social_snippet/rspec/test_driver.rb +76 -0
  29. data/lib/social_snippet/rspec/test_storage.rb +459 -0
  30. data/lib/social_snippet/storage.rb +1 -0
  31. data/lib/social_snippet/storage_backend.rb +3 -0
  32. data/lib/social_snippet/storage_backend/file_system_storage.rb +71 -0
  33. data/lib/social_snippet/storage_backend/storage_base.rb +35 -0
  34. data/lib/social_snippet/version.rb +8 -3
  35. data/spec/helpers/codeclimate_helper.rb +1 -1
  36. data/spec/helpers/fakefs_helper.rb +10 -0
  37. data/spec/helpers/social_snippet_helper.rb +117 -0
  38. data/spec/lib/api/insert_snippet_spec.rb +95 -2
  39. data/spec/lib/api/update_repository_spec.rb +196 -0
  40. data/spec/lib/command_line/sspm_install_spec.rb +169 -180
  41. data/spec/lib/command_line/sspm_update_spec.rb +56 -0
  42. data/spec/lib/config_spec.rb +6 -8
  43. data/spec/lib/core_spec.rb +21 -38
  44. data/spec/lib/file_system_storage_spec.rb +170 -0
  45. data/spec/lib/insert_resolver_spec.rb +15 -2
  46. data/spec/lib/registry_client_spec.rb +6 -9
  47. data/spec/lib/repository/driver_base_spec.rb +89 -0
  48. data/spec/lib/repository/git_driver_spec.rb +10 -0
  49. data/spec/lib/repository/package_spec.rb +172 -0
  50. data/spec/lib/repository/repository_factory_spec.rb +67 -22
  51. data/spec/lib/repository/repository_manager_spec.rb +71 -114
  52. data/spec/lib/repository/repository_spec.rb +191 -0
  53. data/spec/lib/yaml_document_spec.rb +14 -0
  54. data/spec/spec_helper.rb +8 -93
  55. data/test/config_test.rb +6 -7
  56. data/test/driver_base_test.rb +201 -0
  57. data/test/git_driver_test.rb +51 -0
  58. data/test/insert_snippet_test.rb +256 -349
  59. data/test/repository_manager_test.rb +7 -16
  60. data/test/yaml_document_test.rb +97 -0
  61. metadata +44 -16
  62. data/lib/social_snippet/repository/drivers/base_repository.rb +0 -189
  63. data/lib/social_snippet/repository/drivers/git_repository.rb +0 -74
  64. data/lib/social_snippet/repository/repository_factory.rb +0 -59
  65. data/lib/social_snippet/repository/repository_installer.rb +0 -85
  66. data/spec/lib/repository/base_repository_spec.rb +0 -104
  67. data/spec/lib/repository/git_repository_spec.rb +0 -83
  68. data/spec/lib/repository/repository_installer_spec.rb +0 -63
  69. data/test/base_repository_test.rb +0 -375
  70. data/test/git_repository_test.rb +0 -114
@@ -2,12 +2,6 @@ require "spec_helper"
2
2
 
3
3
  describe ::SocialSnippet::Repository::RepositoryManager do
4
4
 
5
- let(:logger) do
6
- logger = ::SocialSnippet::Logger.new(STDOUT)
7
- logger.level = ::SocialSnippet::Logger::Severity::INFO
8
- logger
9
- end
10
-
11
5
  let(:config) do
12
6
  ::SocialSnippet::Config.new(social_snippet)
13
7
  end
@@ -19,8 +13,9 @@ describe ::SocialSnippet::Repository::RepositoryManager do
19
13
  end
20
14
 
21
15
  before do
16
+ allow(social_snippet).to receive(:storage).and_return fake_storage
17
+ allow(social_snippet).to receive(:logger).and_return fake_logger
22
18
  allow(social_snippet).to receive(:config).and_return config
23
- allow(social_snippet).to receive(:logger).and_return logger
24
19
  end
25
20
 
26
21
  let(:repo_manager) do
@@ -28,16 +23,12 @@ describe ::SocialSnippet::Repository::RepositoryManager do
28
23
  end
29
24
 
30
25
  describe "complete (repo)" do
31
-
26
+
32
27
  before do
33
- install_path = "/path/to/install/path"
34
- FileUtils.mkdir_p "#{install_path}"
35
- FileUtils.mkdir_p "#{install_path}/my-repo"
36
- FileUtils.mkdir_p "#{install_path}/new-repo"
37
- FileUtils.mkdir_p "#{install_path}/my-math-repo"
38
- FileUtils.mkdir_p "#{install_path}/myrepo"
39
- allow(repo_manager.installer).to receive(:path).and_return install_path
40
- end # prepare files
28
+ ::SocialSnippet::Repository::Models::Repository.create :name => "my-repo"
29
+ ::SocialSnippet::Repository::Models::Repository.create :name => "new-repo"
30
+ ::SocialSnippet::Repository::Models::Repository.create :name => "my-math-repo"
31
+ end
41
32
 
42
33
  context "key = my-" do
43
34
  it { expect(repo_manager.complete "@snip <my-").to include "my-repo" }
@@ -0,0 +1,97 @@
1
+ require "spec_helper"
2
+
3
+ describe ::SocialSnippet::DocumentBackend::YAMLDocument do
4
+
5
+ before { ::FileUtils.mkdir_p "/path/to" }
6
+ before { ::SocialSnippet::DocumentBackend::YAMLDocument.set_path "/path/to/document.yml" }
7
+ before { $yaml_document_hash = nil } # reset hash
8
+
9
+ describe "#load_file!" do
10
+
11
+ context "prepare yaml" do
12
+
13
+ before do
14
+ ::File.write "/path/to/document.yml", {
15
+ "TestDocument" => {
16
+ "item1" => {
17
+ :name => "item-1",
18
+ :values => [
19
+ "val1-1",
20
+ "val1-2",
21
+ "val1-3",
22
+ ],
23
+ :info => {
24
+ "hello" => "world",
25
+ },
26
+ },
27
+ "item2" => {
28
+ :name => "item-2",
29
+ :values => [
30
+ "val2-1",
31
+ "val2-2",
32
+ "val2-3",
33
+ ],
34
+ :info => {
35
+ "foo" => "bar",
36
+ },
37
+ },
38
+ },
39
+ }.to_yaml
40
+ end
41
+
42
+ context "prepare class" do
43
+
44
+ let(:doc_class) do
45
+ ::Class.new(::SocialSnippet::DocumentBackend::YAMLDocument) do
46
+ field :name, :type => String
47
+ field :values, :type => Array
48
+ field :info, :type => Hash
49
+
50
+ def self.name
51
+ "TestDocument"
52
+ end
53
+ end
54
+ end
55
+
56
+ context "find item1" do
57
+ let(:item) { doc_class.find "item1" }
58
+ it { expect(item.name).to eq "item-1" }
59
+ it { expect(item.values.length).to eq 3 }
60
+ it { expect(item.values).to include "val1-1" }
61
+ it { expect(item.values).to include "val1-2" }
62
+ it { expect(item.values).to include "val1-3" }
63
+ it { expect(item.info["hello"]).to eq "world" }
64
+ end
65
+
66
+ context "find item2" do
67
+ let(:item) { doc_class.find "item2" }
68
+ it { expect(item.name).to eq "item-2" }
69
+ it { expect(item.values.length).to eq 3 }
70
+ it { expect(item.values).to include "val2-1" }
71
+ it { expect(item.values).to include "val2-2" }
72
+ it { expect(item.values).to include "val2-3" }
73
+ it { expect(item.info["foo"]).to eq "bar" }
74
+ end
75
+
76
+ context "remove item2" do
77
+ before { doc_class.find("item2").remove }
78
+ context "find item2" do
79
+ subject do
80
+ lambda { doc_class.find "item2" }
81
+ end
82
+ it { should raise_error }
83
+ end
84
+ context "find item1" do
85
+ let(:item) { doc_class.find("item1") }
86
+ it { expect(item.name).to eq "item-1" }
87
+ end
88
+ end # remove item2
89
+
90
+ end
91
+
92
+ end # prepare yaml
93
+
94
+ end #load_file!
95
+
96
+ end # ::SocialSnippet::DocumentBackend::YAMLDocument
97
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_snippet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroyuki Sano
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-02 00:00:00.000000000 Z
11
+ date: 2015-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: version_sorter
@@ -260,6 +260,10 @@ files:
260
260
  - lib/social_snippet/config.rb
261
261
  - lib/social_snippet/context.rb
262
262
  - lib/social_snippet/core.rb
263
+ - lib/social_snippet/document.rb
264
+ - lib/social_snippet/document_backend.rb
265
+ - lib/social_snippet/document_backend/yaml_document.rb
266
+ - lib/social_snippet/document_backend/yaml_document/query.rb
263
267
  - lib/social_snippet/inserter.rb
264
268
  - lib/social_snippet/logger.rb
265
269
  - lib/social_snippet/registry.rb
@@ -268,18 +272,28 @@ files:
268
272
  - lib/social_snippet/registry/registry_resources/base.rb
269
273
  - lib/social_snippet/registry/registry_resources/repositories.rb
270
274
  - lib/social_snippet/repository.rb
275
+ - lib/social_snippet/repository/driver_factory.rb
271
276
  - lib/social_snippet/repository/drivers.rb
272
- - lib/social_snippet/repository/drivers/base_repository.rb
273
- - lib/social_snippet/repository/drivers/git_repository.rb
277
+ - lib/social_snippet/repository/drivers/driver_base.rb
278
+ - lib/social_snippet/repository/drivers/entry.rb
279
+ - lib/social_snippet/repository/drivers/git_driver.rb
280
+ - lib/social_snippet/repository/models.rb
281
+ - lib/social_snippet/repository/models/package.rb
282
+ - lib/social_snippet/repository/models/repository.rb
274
283
  - lib/social_snippet/repository/repository_errors.rb
275
- - lib/social_snippet/repository/repository_factory.rb
276
- - lib/social_snippet/repository/repository_installer.rb
277
284
  - lib/social_snippet/repository/repository_manager.rb
278
285
  - lib/social_snippet/resolvers.rb
279
286
  - lib/social_snippet/resolvers/base_resolver.rb
280
287
  - lib/social_snippet/resolvers/dep_resolver.rb
281
288
  - lib/social_snippet/resolvers/insert_resolver.rb
289
+ - lib/social_snippet/rspec/test_document.rb
290
+ - lib/social_snippet/rspec/test_driver.rb
291
+ - lib/social_snippet/rspec/test_storage.rb
282
292
  - lib/social_snippet/snippet.rb
293
+ - lib/social_snippet/storage.rb
294
+ - lib/social_snippet/storage_backend.rb
295
+ - lib/social_snippet/storage_backend/file_system_storage.rb
296
+ - lib/social_snippet/storage_backend/storage_base.rb
283
297
  - lib/social_snippet/tag.rb
284
298
  - lib/social_snippet/tag_parser.rb
285
299
  - lib/social_snippet/tsortable_hash.rb
@@ -287,32 +301,38 @@ files:
287
301
  - social_snippet.gemspec
288
302
  - spec/helpers/codeclimate_helper.rb
289
303
  - spec/helpers/fakefs_helper.rb
304
+ - spec/helpers/social_snippet_helper.rb
290
305
  - spec/helpers/webmock_helper.rb
291
306
  - spec/lib/api/insert_snippet_spec.rb
307
+ - spec/lib/api/update_repository_spec.rb
292
308
  - spec/lib/command_line/sspm_config_spec.rb
293
309
  - spec/lib/command_line/sspm_init_spec.rb
294
310
  - spec/lib/command_line/sspm_install_spec.rb
295
311
  - spec/lib/command_line/sspm_search_spec.rb
296
312
  - spec/lib/command_line/sspm_spec.rb
313
+ - spec/lib/command_line/sspm_update_spec.rb
297
314
  - spec/lib/config_spec.rb
298
315
  - spec/lib/context_spec.rb
299
316
  - spec/lib/core_spec.rb
317
+ - spec/lib/file_system_storage_spec.rb
300
318
  - spec/lib/insert_resolver_spec.rb
301
319
  - spec/lib/inserter_spec.rb
302
320
  - spec/lib/registry_client_spec.rb
303
- - spec/lib/repository/base_repository_spec.rb
304
- - spec/lib/repository/git_repository_spec.rb
321
+ - spec/lib/repository/driver_base_spec.rb
322
+ - spec/lib/repository/git_driver_spec.rb
323
+ - spec/lib/repository/package_spec.rb
305
324
  - spec/lib/repository/repository_factory_spec.rb
306
- - spec/lib/repository/repository_installer_spec.rb
307
325
  - spec/lib/repository/repository_manager_spec.rb
326
+ - spec/lib/repository/repository_spec.rb
308
327
  - spec/lib/tag_parser_spec.rb
309
328
  - spec/lib/tag_spec.rb
329
+ - spec/lib/yaml_document_spec.rb
310
330
  - spec/spec_helper.rb
311
- - test/base_repository_test.rb
312
331
  - test/command_test.rb
313
332
  - test/config_test.rb
314
333
  - test/context_test.rb
315
- - test/git_repository_test.rb
334
+ - test/driver_base_test.rb
335
+ - test/git_driver_test.rb
316
336
  - test/insert_snippet_test.rb
317
337
  - test/install_command_test.rb
318
338
  - test/repository_manager_test.rb
@@ -320,6 +340,7 @@ files:
320
340
  - test/tag_parser_test.rb
321
341
  - test/tag_test.rb
322
342
  - test/version_test.rb
343
+ - test/yaml_document_test.rb
323
344
  homepage: https://github.com/social-snippet/social-snippet
324
345
  licenses:
325
346
  - MIT
@@ -348,32 +369,38 @@ summary: A snippet manager to share and use snippet library for the online judge
348
369
  test_files:
349
370
  - spec/helpers/codeclimate_helper.rb
350
371
  - spec/helpers/fakefs_helper.rb
372
+ - spec/helpers/social_snippet_helper.rb
351
373
  - spec/helpers/webmock_helper.rb
352
374
  - spec/lib/api/insert_snippet_spec.rb
375
+ - spec/lib/api/update_repository_spec.rb
353
376
  - spec/lib/command_line/sspm_config_spec.rb
354
377
  - spec/lib/command_line/sspm_init_spec.rb
355
378
  - spec/lib/command_line/sspm_install_spec.rb
356
379
  - spec/lib/command_line/sspm_search_spec.rb
357
380
  - spec/lib/command_line/sspm_spec.rb
381
+ - spec/lib/command_line/sspm_update_spec.rb
358
382
  - spec/lib/config_spec.rb
359
383
  - spec/lib/context_spec.rb
360
384
  - spec/lib/core_spec.rb
385
+ - spec/lib/file_system_storage_spec.rb
361
386
  - spec/lib/insert_resolver_spec.rb
362
387
  - spec/lib/inserter_spec.rb
363
388
  - spec/lib/registry_client_spec.rb
364
- - spec/lib/repository/base_repository_spec.rb
365
- - spec/lib/repository/git_repository_spec.rb
389
+ - spec/lib/repository/driver_base_spec.rb
390
+ - spec/lib/repository/git_driver_spec.rb
391
+ - spec/lib/repository/package_spec.rb
366
392
  - spec/lib/repository/repository_factory_spec.rb
367
- - spec/lib/repository/repository_installer_spec.rb
368
393
  - spec/lib/repository/repository_manager_spec.rb
394
+ - spec/lib/repository/repository_spec.rb
369
395
  - spec/lib/tag_parser_spec.rb
370
396
  - spec/lib/tag_spec.rb
397
+ - spec/lib/yaml_document_spec.rb
371
398
  - spec/spec_helper.rb
372
- - test/base_repository_test.rb
373
399
  - test/command_test.rb
374
400
  - test/config_test.rb
375
401
  - test/context_test.rb
376
- - test/git_repository_test.rb
402
+ - test/driver_base_test.rb
403
+ - test/git_driver_test.rb
377
404
  - test/insert_snippet_test.rb
378
405
  - test/install_command_test.rb
379
406
  - test/repository_manager_test.rb
@@ -381,3 +408,4 @@ test_files:
381
408
  - test/tag_parser_test.rb
382
409
  - test/tag_test.rb
383
410
  - test/version_test.rb
411
+ - test/yaml_document_test.rb
@@ -1,189 +0,0 @@
1
- module SocialSnippet::Repository::Drivers
2
-
3
- # Repository base class
4
- # usage: class GitRepository < BaseRepository
5
- class BaseRepository
6
-
7
- attr_reader :path
8
- attr_reader :cache_path
9
- attr_reader :name
10
- attr_reader :desc
11
- attr_reader :main
12
- attr_reader :ref
13
- attr_reader :dependencies
14
- attr_reader :ref
15
- attr_reader :url
16
-
17
- # Constructor
18
- #
19
- # @param path [String] The path of repository
20
- def initialize(new_path, new_ref = nil)
21
- @path = new_path
22
- @cache_path = nil
23
- @ref = new_ref
24
-
25
- if ( not ref.nil? ) && ( not refs.empty? ) && ( not refs.include?(ref) )
26
- raise Errors::NotExistRef
27
- end
28
-
29
- @url = nil
30
- end
31
-
32
- # Set repo's URL
33
- def set_url(new_url)
34
- @url = new_url
35
- end
36
-
37
- def load_cache(base_cache_path)
38
- cache_path_cand = "#{base_cache_path}/#{name}/#{short_commit_id}"
39
-
40
- if ::Dir.exists?(cache_path_cand)
41
- return @cache_path = cache_path_cand
42
- end
43
-
44
- return @cache_path = nil
45
- end
46
-
47
- # Create cache of repository
48
- #
49
- # @param cache_path [String] The path of cache dir
50
- # @return [String] the path
51
- def create_cache(base_cache_path)
52
- @cache_path = "#{base_cache_path}/#{name}/#{short_commit_id}"
53
-
54
- return if ::Dir.exists?(cache_path)
55
-
56
- ::FileUtils.mkdir_p "#{base_cache_path}/#{name}"
57
- ::FileUtils.cp_r path, cache_path
58
-
59
- return cache_path
60
- end
61
-
62
- # Load snippet.json file
63
- def load_snippet_json
64
- text = ::File.read(::File.join(path, "snippet.json"))
65
- snippet_json = ::JSON.parse(text)
66
- @name = snippet_json["name"]
67
- @desc = snippet_json["desc"]
68
- @main = snippet_json["main"] || ""
69
- @dependencies = snippet_json["dependencies"] || {}
70
- end
71
-
72
- # Returns json text from repo instance
73
- #
74
- # @return json text
75
- def to_snippet_json
76
- required = [
77
- :name,
78
- ]
79
-
80
- optional = [
81
- :desc,
82
- :main,
83
- :dependencies,
84
- ]
85
-
86
- data = {}
87
- required.each do |key|
88
- data[key] = send(key)
89
- end
90
- optional.each do |key|
91
- val = send(key)
92
- if val.nil? === false && val != ""
93
- data[key] = send(key)
94
- end
95
- end
96
-
97
- return data.to_json
98
- end
99
-
100
- # Returns latest version
101
- #
102
- # @param pattern [String] The pattern of version
103
- # @return [String] The version
104
- def latest_version(pattern = "")
105
- pattern = "" if pattern.nil?
106
- matched_versions = versions.select {|ref| ::SocialSnippet::Version.is_matched_version_pattern(pattern, ref)}
107
- return ::VersionSorter.rsort(matched_versions).first
108
- end
109
-
110
- # Returns all versions
111
- #
112
- # @return [Array<String>] All versions of repository
113
- def versions
114
- refs.select {|ref| ::SocialSnippet::Version.is_version(ref) }
115
- end
116
-
117
- def current_ref
118
- raise "not implete current_ref"
119
- end
120
-
121
- # Returns all refs
122
- #
123
- # @return [Array<String>] All references of repository
124
- def refs
125
- raise "not implement refs"
126
- end
127
-
128
- # Returns short current ref's commit id
129
- #
130
- # @return [String]
131
- def short_commit_id
132
- commit_id[0..7]
133
- end
134
-
135
- # Returns current ref's commit id
136
- #
137
- # @return [String]
138
- def commit_id
139
- raise "not implement commit_id"
140
- end
141
-
142
- # Returns the directory or file names within repository
143
- #
144
- # @param glob_path [String]
145
- def glob(glob_path)
146
- root_path = real_path("/")
147
- ::Dir.glob("#{root_path}/#{glob_path}")
148
- end
149
-
150
- # Returns the real path of given path
151
- #
152
- # @param target_path [String] The real path of repo's file or directory
153
- def real_path(target_path)
154
- # TODO: normalize path
155
- if is_cached?
156
- "#{cache_path}/#{main}/#{target_path}"
157
- else
158
- "#{path}/#{main}/#{target_path}"
159
- end
160
- end
161
-
162
- # Checkout to ref
163
- #
164
- # @param ref [String] The reference of repository
165
- def checkout(new_ref)
166
- raise "not implement checkout"
167
- end
168
-
169
- # Check repository has version ref
170
- #
171
- # @return [Boolean]
172
- def has_versions?
173
- versions.empty? === false
174
- end
175
-
176
- # Check repository is cached
177
- #
178
- # @return [Boolean]
179
- def is_cached?
180
- @cache_path.nil? === false
181
- end
182
-
183
- def update(options = {})
184
- throw "not implement update"
185
- end
186
-
187
- end # BaseRepository
188
-
189
- end # SocialSnippet