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.
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