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
@@ -0,0 +1 @@
|
|
1
|
+
class SocialSnippet::Storage < SocialSnippet::StorageBackend::StorageBase; end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module SocialSnippet::StorageBackend
|
2
|
+
|
3
|
+
class FileSystemStorage < StorageBase
|
4
|
+
|
5
|
+
def read(path)
|
6
|
+
::File.read path
|
7
|
+
end
|
8
|
+
|
9
|
+
def write(path, data)
|
10
|
+
::File.write path, data
|
11
|
+
end
|
12
|
+
|
13
|
+
def touch(path)
|
14
|
+
::FileUtils.touch path
|
15
|
+
end
|
16
|
+
|
17
|
+
def cp_r(src, dest)
|
18
|
+
::FileUtils.cp_r src, dest
|
19
|
+
end
|
20
|
+
|
21
|
+
def rm(path)
|
22
|
+
::FileUtils.rm path
|
23
|
+
end
|
24
|
+
|
25
|
+
def rm_r(path)
|
26
|
+
::FileUtils.rm_r path
|
27
|
+
end
|
28
|
+
|
29
|
+
def cd(path)
|
30
|
+
::FileUtils.cd path
|
31
|
+
end
|
32
|
+
|
33
|
+
def pwd
|
34
|
+
::Dir.pwd
|
35
|
+
end
|
36
|
+
|
37
|
+
def glob(glob_path)
|
38
|
+
::Dir.glob glob_path
|
39
|
+
end
|
40
|
+
|
41
|
+
def exists?(path)
|
42
|
+
::File.exists? path
|
43
|
+
end
|
44
|
+
|
45
|
+
def file?(path)
|
46
|
+
::File.file? path
|
47
|
+
end
|
48
|
+
|
49
|
+
def directory?(path)
|
50
|
+
::File.directory? path
|
51
|
+
end
|
52
|
+
|
53
|
+
def mkdir(path)
|
54
|
+
::FileUtils.mkdir path
|
55
|
+
end
|
56
|
+
|
57
|
+
def mkdir_p(path)
|
58
|
+
::FileUtils.mkdir_p path
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.activate!
|
62
|
+
::SocialSnippet.class_eval do
|
63
|
+
remove_const :Storage
|
64
|
+
const_set :Storage, ::SocialSnippet::StorageBackend::FileSystemStorage
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module SocialSnippet::StorageBackend
|
2
|
+
|
3
|
+
class StorageBase
|
4
|
+
|
5
|
+
def read(path)
|
6
|
+
raise "not implemented"
|
7
|
+
end
|
8
|
+
|
9
|
+
def write(path, data)
|
10
|
+
raise "not implemented"
|
11
|
+
end
|
12
|
+
|
13
|
+
def glob(glob_path)
|
14
|
+
raise "not implemented"
|
15
|
+
end
|
16
|
+
|
17
|
+
def exists?(path)
|
18
|
+
raise "not implemented"
|
19
|
+
end
|
20
|
+
|
21
|
+
def file?(path)
|
22
|
+
raise "not implemented"
|
23
|
+
end
|
24
|
+
|
25
|
+
def directory?(path)
|
26
|
+
raise "not implemented"
|
27
|
+
end
|
28
|
+
|
29
|
+
def mkdir_p(path)
|
30
|
+
raise "not implemented"
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module SocialSnippet
|
2
2
|
|
3
|
-
VERSION = "0.0.
|
3
|
+
VERSION = "0.0.10"
|
4
4
|
|
5
5
|
module Version
|
6
6
|
|
@@ -13,12 +13,17 @@ module SocialSnippet
|
|
13
13
|
|
14
14
|
# "2.1.0" and "2.1.1" match "2.1"
|
15
15
|
# "2.11.0" and "2.11.1" do not match "2.1"
|
16
|
-
|
16
|
+
version.start_with?("#{pattern}.")
|
17
17
|
end
|
18
18
|
|
19
19
|
# Check given text is version string
|
20
20
|
def is_version(s)
|
21
|
-
|
21
|
+
/^([0]|[1-9][0-9]*)\.([0]|[1-9][0-9]*)\.([0]|[1-9][0-9]*)$/ === s
|
22
|
+
end
|
23
|
+
|
24
|
+
# "1.2.3" => "1.2"
|
25
|
+
def minor(s)
|
26
|
+
/^(([0]|[1-9][0-9]*)\.([0]|[1-9][0-9]*))\.([0]|[1-9][0-9]*)$/.match(s)[1]
|
22
27
|
end
|
23
28
|
|
24
29
|
end
|
@@ -13,3 +13,13 @@ module FakeFSHelpers
|
|
13
13
|
|
14
14
|
end
|
15
15
|
|
16
|
+
module SocialSnippet
|
17
|
+
::RSpec.configure do |config|
|
18
|
+
config.include FakeFSHelpers
|
19
|
+
config.before { enable_fakefs }
|
20
|
+
config.before(:example, :without_fakefs => true) { disable_fakefs }
|
21
|
+
config.after { disable_fakefs }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
$WITHOUT_FAKEFS = (ENV["RSPEC_WITHOUT_FAKEFS"] === "true")
|
@@ -0,0 +1,117 @@
|
|
1
|
+
module SocialSnippet::SpecHelpers
|
2
|
+
|
3
|
+
class FakeCore; end
|
4
|
+
|
5
|
+
def fake_storage
|
6
|
+
@fake_storage ||= ::SocialSnippet::Storage.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def fake_io
|
10
|
+
@fake_io ||= ::StringIO.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def fake_logger
|
14
|
+
reset_fake_logger unless @logger
|
15
|
+
@logger
|
16
|
+
end
|
17
|
+
|
18
|
+
def reset_fake_logger
|
19
|
+
@logger = ::SocialSnippet::Logger.new(fake_io)
|
20
|
+
@logger.level = ::SocialSnippet::Logger::Severity::INFO
|
21
|
+
end
|
22
|
+
|
23
|
+
def fake_home
|
24
|
+
reset_fake_home unless @tmp_path
|
25
|
+
@tmp_path
|
26
|
+
end
|
27
|
+
|
28
|
+
def reset_fake_home
|
29
|
+
tmp_root = ::File.join(::Dir.tmpdir, "social_snippet")
|
30
|
+
::FileUtils.mkdir_p tmp_root
|
31
|
+
@tmp_path = ::Dir.mktmpdir(nil, tmp_root)
|
32
|
+
end
|
33
|
+
|
34
|
+
def make_fake_home
|
35
|
+
fake_config.init_filesystem
|
36
|
+
end
|
37
|
+
|
38
|
+
def global_config
|
39
|
+
$social_snippet_config ||= ::SocialSnippet::Config.new(
|
40
|
+
fake_core,
|
41
|
+
{
|
42
|
+
:home => fake_home,
|
43
|
+
:sspm_host => "api.server",
|
44
|
+
},
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
def enable_global_config
|
49
|
+
@enable_global_config = true
|
50
|
+
end
|
51
|
+
|
52
|
+
def fake_config
|
53
|
+
@config ||= ::SocialSnippet::Config.new(
|
54
|
+
fake_core,
|
55
|
+
{
|
56
|
+
:home => fake_home,
|
57
|
+
:sspm_host => "api.server",
|
58
|
+
},
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
def fake_api
|
63
|
+
@fake_api ||= ::SocialSnippet::Api.new(fake_core)
|
64
|
+
end
|
65
|
+
|
66
|
+
def fake_core
|
67
|
+
reset_fake_core unless @fake_core
|
68
|
+
@fake_core
|
69
|
+
end
|
70
|
+
|
71
|
+
def fake_repo_manager
|
72
|
+
@fake_repo_manager ||= ::SocialSnippet::Repository::RepositoryManager.new(fake_core)
|
73
|
+
end
|
74
|
+
|
75
|
+
def fake_driver_factory
|
76
|
+
@fake_driver_factory ||= ::SocialSnippet::Repository::DriverFactory.new(fake_core)
|
77
|
+
end
|
78
|
+
|
79
|
+
def fake_registry_client
|
80
|
+
@fake_registry_client ||= ::SocialSnippet::Registry::RegistryClient.new(fake_core)
|
81
|
+
end
|
82
|
+
|
83
|
+
def reset_fake_core
|
84
|
+
@fake_core = FakeCore.new
|
85
|
+
::SocialSnippet::Repository::Models::Package.core = fake_core
|
86
|
+
::SocialSnippet::Repository::Models::Repository.core = fake_core
|
87
|
+
allow(fake_core).to receive(:storage).and_return fake_storage
|
88
|
+
allow(fake_core).to receive(:logger).and_return fake_logger
|
89
|
+
allow(fake_core).to receive(:config).and_return fake_config
|
90
|
+
allow(fake_core).to receive(:api).and_return fake_api
|
91
|
+
allow(fake_core).to receive(:repo_manager).and_return fake_repo_manager
|
92
|
+
allow(fake_core).to receive(:driver_factory).and_return fake_driver_factory
|
93
|
+
allow(fake_core).to receive(:registry_client).and_return fake_registry_client
|
94
|
+
allow_any_instance_of(::SocialSnippet::CommandLine::Command).to receive(:core).and_return fake_core
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
module SocialSnippet
|
100
|
+
::RSpec.configure do |config|
|
101
|
+
config.include SpecHelpers
|
102
|
+
config.before { reset_fake_core }
|
103
|
+
config.before { fake_core.driver_factory.reset_drivers }
|
104
|
+
end
|
105
|
+
|
106
|
+
# setup yaml document
|
107
|
+
::RSpec.configure do |config|
|
108
|
+
config.before do
|
109
|
+
if ::SocialSnippet::Document == ::SocialSnippet::DocumentBackend::YAMLDocument
|
110
|
+
document_path = ::File.join(::Dir.mktmpdir, "document.yml")
|
111
|
+
$yaml_document_hash = nil
|
112
|
+
::FileUtils.rm document_path if ::File.exists?(document_path)
|
113
|
+
::SocialSnippet::DocumentBackend::YAMLDocument.set_path document_path
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -6,11 +6,104 @@ module SocialSnippet
|
|
6
6
|
|
7
7
|
describe "#insert_snippet()", :without_fakefs => true do
|
8
8
|
|
9
|
+
class FakeDriver < ::SocialSnippet::Repository::Drivers::DriverBase
|
10
|
+
def fetch; end
|
11
|
+
|
12
|
+
def refs
|
13
|
+
[
|
14
|
+
"master",
|
15
|
+
"develop",
|
16
|
+
"1.0.0",
|
17
|
+
"1.0.1",
|
18
|
+
"1.0.2",
|
19
|
+
]
|
20
|
+
end
|
21
|
+
|
22
|
+
def snippet_json
|
23
|
+
{
|
24
|
+
"name" => "example-repo",
|
25
|
+
"main" => "src",
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def rev_hash(ref)
|
30
|
+
raise "error" unless refs.include?(ref)
|
31
|
+
"rev-#{ref}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def each_directory(ref, &block)
|
35
|
+
[
|
36
|
+
::SocialSnippet::Repository::Drivers::Entry.new("src", ""),
|
37
|
+
::SocialSnippet::Repository::Drivers::Entry.new("src/func", ""),
|
38
|
+
].each &block
|
39
|
+
end
|
40
|
+
|
41
|
+
def each_file(ref, &block)
|
42
|
+
files = []
|
43
|
+
|
44
|
+
# snippet.json
|
45
|
+
files.push ::SocialSnippet::Repository::Drivers::Entry.new "snippet.json", [
|
46
|
+
'{',
|
47
|
+
' "name": "example-repo",',
|
48
|
+
' "desc": "This is an example repository.",',
|
49
|
+
' "language": "C++",',
|
50
|
+
' "main": "src"',
|
51
|
+
'}',
|
52
|
+
].join($/)
|
53
|
+
|
54
|
+
# src/func.cpp
|
55
|
+
files.push ::SocialSnippet::Repository::Drivers::Entry.new "src/func.cpp", [
|
56
|
+
'// @snip<func/sub_func_1.cpp>',
|
57
|
+
'// @snip<func/sub_func_2.cpp>',
|
58
|
+
'// @snip<func/sub_func_3.cpp>',
|
59
|
+
'int func() {',
|
60
|
+
' int res = 0;',
|
61
|
+
' res += sub_func_1();',
|
62
|
+
' res += sub_func_2();',
|
63
|
+
' res += sub_func_3();',
|
64
|
+
' res *= 2;',
|
65
|
+
' return res;',
|
66
|
+
'}',
|
67
|
+
].join($/)
|
68
|
+
|
69
|
+
# src/func/sub_func_1.cpp
|
70
|
+
files.push ::SocialSnippet::Repository::Drivers::Entry.new "src/func/sub_func_1.cpp", [
|
71
|
+
'int sub_func_1() {',
|
72
|
+
' return 1;',
|
73
|
+
'}',
|
74
|
+
].join($/)
|
75
|
+
|
76
|
+
# src/func/sub_func_2.cpp
|
77
|
+
files.push ::SocialSnippet::Repository::Drivers::Entry.new "src/func/sub_func_2.cpp", [
|
78
|
+
'int sub_func_2() {',
|
79
|
+
' return 2;',
|
80
|
+
'}',
|
81
|
+
].join($/)
|
82
|
+
|
83
|
+
# src/func/sub_func_3.cpp
|
84
|
+
files.push ::SocialSnippet::Repository::Drivers::Entry.new "src/func/sub_func_3.cpp", [
|
85
|
+
'int sub_func_4() {',
|
86
|
+
' return 3;',
|
87
|
+
'}',
|
88
|
+
].join($/)
|
89
|
+
|
90
|
+
files.each &block
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.target_url?(url)
|
94
|
+
"dummy" === ::URI.parse(url).scheme
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
before do
|
99
|
+
fake_core.driver_factory.add_driver FakeDriver
|
100
|
+
end
|
101
|
+
|
9
102
|
let(:example_repo_info) do
|
10
103
|
{
|
11
104
|
"name" => "example-repo",
|
12
105
|
"desc" => "This is my repository.",
|
13
|
-
"url" => "
|
106
|
+
"url" => "dummy://driver.test/social-snippet/example-repo",
|
14
107
|
"dependencies" => {
|
15
108
|
},
|
16
109
|
}
|
@@ -85,12 +178,12 @@ module SocialSnippet
|
|
85
178
|
|
86
179
|
before { fake_core.api.insert_snippet input }
|
87
180
|
|
88
|
-
# last update: 2014-10-28
|
89
181
|
it { expect(string_io.string).to match(/@snippet/) }
|
90
182
|
it { expect(string_io.string).to match(/example-repo#.*:func\.cpp/) }
|
91
183
|
it { expect(string_io.string).to match(/example-repo#.*:func\/sub_func_1\.cpp/) }
|
92
184
|
it { expect(string_io.string).to match(/example-repo#.*:func\/sub_func_2\.cpp/) }
|
93
185
|
it { expect(string_io.string).to match(/example-repo#.*:func\/sub_func_3\.cpp/) }
|
186
|
+
it { expect(string_io.string).to_not match(/ERROR/) }
|
94
187
|
|
95
188
|
end # $ ssnip / with a snip tag
|
96
189
|
|
@@ -0,0 +1,196 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ::SocialSnippet::Api::UpdateRepositoryApi do
|
4
|
+
|
5
|
+
describe "has dependencies" do
|
6
|
+
|
7
|
+
context "prepare stubs" do
|
8
|
+
|
9
|
+
let(:graph_algo_url) { "dummy://driver.test/user/graph-algo" }
|
10
|
+
let(:adjacent_list_url) { "dummy://driver.test/user/adjacent-list" }
|
11
|
+
let(:graph_interface_url) { "dummy://driver.test/user/graph-interface" }
|
12
|
+
|
13
|
+
before do
|
14
|
+
allow(fake_core.repo_manager).to receive(:install).with(graph_interface_url, "1.2.3", kind_of(::Hash)) do
|
15
|
+
repo = ::SocialSnippet::Repository::Models::Repository.find_or_create_by(:name => "graph-interface")
|
16
|
+
repo.update_attributes! :url => graph_interface_url
|
17
|
+
repo.add_ref "1.2.3", "rev-1.2.3"
|
18
|
+
pkg = ::SocialSnippet::Repository::Models::Package.create(
|
19
|
+
:repo_name => "graph-interface",
|
20
|
+
:rev_hash => "rev-1.2.3",
|
21
|
+
)
|
22
|
+
pkg.add_file "snippet.json", {}.to_json
|
23
|
+
pkg
|
24
|
+
end
|
25
|
+
allow(fake_core.api).to receive(:resolve_name_by_registry).with("graph-interface") do
|
26
|
+
graph_interface_url
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
before do
|
31
|
+
allow(fake_core.repo_manager).to receive(:install).with(adjacent_list_url, "9.9.9", kind_of(::Hash)) do
|
32
|
+
repo = ::SocialSnippet::Repository::Models::Repository.find_or_create_by(:name => "adjacent-list")
|
33
|
+
repo.update_attributes! :url => adjacent_list_url
|
34
|
+
repo.add_ref "9.9.9", "rev-9.9.9"
|
35
|
+
pkg = ::SocialSnippet::Repository::Models::Package.create(
|
36
|
+
:repo_name => "adjacent-list",
|
37
|
+
:rev_hash => "rev-9.9.9",
|
38
|
+
)
|
39
|
+
pkg.add_file "snippet.json", {}.to_json
|
40
|
+
pkg.add_dependency "graph-interface", "1.2.3"
|
41
|
+
pkg
|
42
|
+
end
|
43
|
+
allow(fake_core.api).to receive(:resolve_name_by_registry).with("adjacent-list") do
|
44
|
+
adjacent_list_url
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
before do
|
49
|
+
allow(fake_core.repo_manager).to receive(:install).with(graph_algo_url, "1.0.0", kind_of(::Hash)) do
|
50
|
+
repo = ::SocialSnippet::Repository::Models::Repository.find_or_create_by(:name => "graph-algo")
|
51
|
+
repo.update_attributes! :url => graph_algo_url
|
52
|
+
repo.add_ref "1.0.0", "rev-1.0.0"
|
53
|
+
repo.add_package "1.0.0"
|
54
|
+
pkg = ::SocialSnippet::Repository::Models::Package.create(
|
55
|
+
:repo_name => "graph-algo",
|
56
|
+
:rev_hash => "rev-1.0.0",
|
57
|
+
)
|
58
|
+
pkg.add_file "snippet.json", {}.to_json
|
59
|
+
pkg
|
60
|
+
end
|
61
|
+
allow(fake_core.api).to receive(:resolve_name_by_registry).with("graph-algo") do
|
62
|
+
graph_algo_url
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
before { fake_core.api.install_repository graph_algo_url, "1.0.0" }
|
67
|
+
it { expect(fake_core.repo_manager.exists? "graph-algo", "1.0.0").to be_truthy }
|
68
|
+
it { expect(fake_core.repo_manager.exists? "adjacent-list", "9.9.9").to be_falsey }
|
69
|
+
it { expect(fake_core.repo_manager.exists? "graph-interface", "1.2.3").to be_falsey}
|
70
|
+
|
71
|
+
context "prepare update for graph-algo" do
|
72
|
+
|
73
|
+
class FakeDriverGraphAlgo < ::SocialSnippet::Repository::Drivers::DriverBase
|
74
|
+
def fetch; end
|
75
|
+
|
76
|
+
def snippet_json
|
77
|
+
{
|
78
|
+
"name" => "graph-algo",
|
79
|
+
"dependencies" => {
|
80
|
+
"adjacent-list" => "9.9.9",
|
81
|
+
},
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
def rev_hash(ref)
|
86
|
+
if refs.include?(ref)
|
87
|
+
"rev-#{ref}"
|
88
|
+
else
|
89
|
+
raise "error"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def each_directory(ref); end
|
94
|
+
def each_file(ref, &block)
|
95
|
+
[
|
96
|
+
::SocialSnippet::Repository::Drivers::Entry.new("snippet.json", snippet_json.to_json)
|
97
|
+
].each(&block)
|
98
|
+
end
|
99
|
+
|
100
|
+
def refs
|
101
|
+
["1.0.0", "1.0.1"]
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.target_url?(url)
|
105
|
+
"dummy" === ::URI.parse(url).scheme
|
106
|
+
end
|
107
|
+
end # class FakeDriverGraphAlgo
|
108
|
+
|
109
|
+
before do
|
110
|
+
fake_core.driver_factory.reset_drivers
|
111
|
+
fake_core.driver_factory.add_driver FakeDriverGraphAlgo
|
112
|
+
end
|
113
|
+
|
114
|
+
context "update graph-algo" do
|
115
|
+
before { fake_core.api.update_repository "graph-algo" }
|
116
|
+
it { expect(fake_core.repo_manager.exists? "graph-algo", "1.0.0").to be_truthy }
|
117
|
+
it { expect(fake_core.repo_manager.exists? "graph-algo", "1.0.1").to be_truthy }
|
118
|
+
it { expect(fake_core.repo_manager.exists? "adjacent-list", "9.9.9").to be_truthy }
|
119
|
+
it { expect(fake_core.repo_manager.exists? "graph-interface", "1.2.3").to be_truthy }
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
context "prepare driver" do
|
128
|
+
|
129
|
+
class FakeDriverUpdateTest < ::SocialSnippet::Repository::Drivers::DriverBase
|
130
|
+
def fetch; end
|
131
|
+
|
132
|
+
def snippet_json
|
133
|
+
{
|
134
|
+
"name" => "my-repo"
|
135
|
+
}
|
136
|
+
end
|
137
|
+
|
138
|
+
def rev_hash(ref)
|
139
|
+
if refs.include?(ref)
|
140
|
+
"rev-#{ref}"
|
141
|
+
else
|
142
|
+
raise "error"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def each_directory(ref); end
|
147
|
+
def each_file(ref, &block)
|
148
|
+
[
|
149
|
+
::SocialSnippet::Repository::Drivers::Entry.new("snippet.json", snippet_json.to_json),
|
150
|
+
].each(&block)
|
151
|
+
end
|
152
|
+
|
153
|
+
def refs
|
154
|
+
self.class.refs
|
155
|
+
end
|
156
|
+
|
157
|
+
def self.refs
|
158
|
+
@refs ||= new_refs
|
159
|
+
end
|
160
|
+
|
161
|
+
def self.new_refs
|
162
|
+
["1.0.0"]
|
163
|
+
end
|
164
|
+
|
165
|
+
def self.add_ref(ref)
|
166
|
+
@refs.push ref
|
167
|
+
end
|
168
|
+
|
169
|
+
def self.target_url?(url)
|
170
|
+
"dummy" === ::URI.parse(url).scheme
|
171
|
+
end
|
172
|
+
end # class FakeDriverUpdateTest
|
173
|
+
|
174
|
+
before do
|
175
|
+
fake_core.driver_factory.reset_drivers
|
176
|
+
fake_core.driver_factory.add_driver FakeDriverUpdateTest
|
177
|
+
end
|
178
|
+
|
179
|
+
context "install my-repo#1.0.0" do
|
180
|
+
before { fake_core.api.install_repository "dummy://driver.test/user/my-repo", "1.0.0" }
|
181
|
+
it { expect(fake_core.repo_manager.exists? "my-repo", "1.0.0").to be_truthy }
|
182
|
+
it { expect(fake_core.repo_manager.exists? "my-repo", "1.0.1").to be_falsey }
|
183
|
+
context "add 1.0.1" do
|
184
|
+
before { FakeDriverUpdateTest.add_ref "1.0.1" }
|
185
|
+
context "update my-repo" do
|
186
|
+
before { fake_core.api.update_repository "my-repo" }
|
187
|
+
it { expect(fake_core.repo_manager.exists? "my-repo", "1.0.0").to be_truthy }
|
188
|
+
it { expect(fake_core.repo_manager.exists? "my-repo", "1.0.1").to be_truthy }
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end # install my-repo#1.0.0
|
192
|
+
|
193
|
+
end # prepare driver
|
194
|
+
|
195
|
+
end # ::SocialSnippet::Api::UpdateRepositoryApi
|
196
|
+
|