social_snippet 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitignore +2 -0
- data/.travis.yml +22 -3
- data/Gemfile +25 -2
- data/Guardfile +9 -0
- data/README.md +6 -1
- data/Rakefile +51 -1
- data/appveyor.yml +36 -0
- data/bin/ssnip +10 -0
- data/bin/sspm +10 -0
- data/lib/social_snippet.rb +15 -4
- data/lib/social_snippet/api.rb +238 -0
- data/lib/social_snippet/command_line.rb +4 -0
- data/lib/social_snippet/command_line/command.rb +158 -0
- data/lib/social_snippet/command_line/ssnip.rb +2 -0
- data/lib/social_snippet/command_line/ssnip/main_command.rb +26 -0
- data/lib/social_snippet/command_line/sspm.rb +3 -0
- data/lib/social_snippet/command_line/sspm/main_command.rb +63 -0
- data/lib/social_snippet/command_line/sspm/sub_commands.rb +16 -0
- data/lib/social_snippet/command_line/sspm/sub_commands/complete_command.rb +28 -0
- data/lib/social_snippet/command_line/sspm/sub_commands/info_command.rb +28 -0
- data/lib/social_snippet/command_line/sspm/sub_commands/install_command.rb +103 -0
- data/lib/social_snippet/command_line/sspm/sub_commands/publish_command.rb +51 -0
- data/lib/social_snippet/command_line/sspm/sub_commands/search_command.rb +32 -0
- data/lib/social_snippet/command_line/sspm/sub_commands/update_command.rb +37 -0
- data/lib/social_snippet/config.rb +92 -0
- data/lib/social_snippet/context.rb +89 -0
- data/lib/social_snippet/core.rb +40 -0
- data/lib/social_snippet/inserter.rb +64 -0
- data/lib/social_snippet/logger.rb +9 -0
- data/lib/social_snippet/registry.rb +3 -0
- data/lib/social_snippet/registry/registry_client.rb +15 -0
- data/lib/social_snippet/registry/registry_resources.rb +3 -0
- data/lib/social_snippet/registry/registry_resources/base.rb +80 -0
- data/lib/social_snippet/registry/registry_resources/repositories.rb +23 -0
- data/lib/social_snippet/repository.rb +6 -0
- data/lib/social_snippet/repository/drivers.rb +3 -0
- data/lib/social_snippet/repository/drivers/base_repository.rb +192 -0
- data/lib/social_snippet/repository/drivers/git_repository.rb +76 -0
- data/lib/social_snippet/repository/repository_errors.rb +5 -0
- data/lib/social_snippet/repository/repository_factory.rb +59 -0
- data/lib/social_snippet/repository/repository_installer.rb +86 -0
- data/lib/social_snippet/repository/repository_manager.rb +177 -0
- data/lib/social_snippet/resolvers.rb +4 -0
- data/lib/social_snippet/resolvers/base_resolver.rb +103 -0
- data/lib/social_snippet/resolvers/dep_resolver.rb +61 -0
- data/lib/social_snippet/resolvers/insert_resolver.rb +100 -0
- data/lib/social_snippet/snippet.rb +14 -0
- data/lib/social_snippet/tag.rb +198 -0
- data/lib/social_snippet/tag_parser.rb +61 -0
- data/lib/social_snippet/version.rb +26 -1
- data/social_snippet.gemspec +18 -3
- data/spec/helpers/codeclimate_helper.rb +4 -0
- data/spec/helpers/fakefs_helper.rb +15 -0
- data/spec/helpers/webmock_helper.rb +16 -0
- data/spec/lib/api_spec.rb +106 -0
- data/spec/lib/command_line/sspm_install_spec.rb +224 -0
- data/spec/lib/command_line/sspm_search_spec.rb +167 -0
- data/spec/lib/command_line/sspm_spec.rb +81 -0
- data/spec/lib/config_spec.rb +56 -0
- data/spec/lib/context_spec.rb +48 -0
- data/spec/lib/core_spec.rb +126 -0
- data/spec/lib/inserter_spec.rb +177 -0
- data/spec/lib/registry_client_spec.rb +173 -0
- data/spec/lib/repository/base_repository_spec.rb +104 -0
- data/spec/lib/repository/git_repository_spec.rb +83 -0
- data/spec/lib/repository/repository_factory_spec.rb +31 -0
- data/spec/lib/repository/repository_installer_spec.rb +63 -0
- data/spec/lib/repository/repository_manager_spec.rb +201 -0
- data/spec/lib/tag_parser_spec.rb +173 -0
- data/spec/lib/tag_spec.rb +93 -0
- data/spec/spec_helper.rb +106 -0
- data/test/base_repository_test.rb +375 -0
- data/test/command_test.rb +39 -0
- data/test/context_test.rb +31 -0
- data/test/core_test.rb +2091 -0
- data/test/git_repository_test.rb +114 -0
- data/test/install_command_test.rb +28 -0
- data/test/repository_manager_test.rb +109 -0
- data/test/tag_parser_test.rb +47 -0
- data/test/tag_test.rb +217 -0
- data/test/version_test.rb +56 -0
- metadata +271 -14
@@ -0,0 +1,104 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module SocialSnippet::Repository::Drivers
|
4
|
+
|
5
|
+
describe BaseRepository do
|
6
|
+
|
7
|
+
describe "#to_snippet_json" do
|
8
|
+
|
9
|
+
let(:instance) { BaseRepository.new "/path/to/repo" }
|
10
|
+
|
11
|
+
before do
|
12
|
+
FileUtils.mkdir_p "/path/to/repo"
|
13
|
+
FileUtils.mkdir_p "/path/to/repo/my-src"
|
14
|
+
FileUtils.touch "/path/to/repo/snippet.json"
|
15
|
+
|
16
|
+
File.write "/path/to/repo/snippet.json", [
|
17
|
+
'{',
|
18
|
+
' "name": "my-name",',
|
19
|
+
' "desc": "my-desc",',
|
20
|
+
' "main": "my-src"',
|
21
|
+
'}',
|
22
|
+
].join("\n")
|
23
|
+
end # prepare /path/to/repo
|
24
|
+
|
25
|
+
context "load snippet.json" do
|
26
|
+
|
27
|
+
before { instance.load_snippet_json }
|
28
|
+
let(:result) { JSON.parse(instance.to_snippet_json) }
|
29
|
+
|
30
|
+
it { expect(result["name"]).to eq "my-name" }
|
31
|
+
it { expect(result["desc"]).to eq "my-desc" }
|
32
|
+
it { expect(result["main"]).to eq "my-src" }
|
33
|
+
|
34
|
+
end # load snippet.json
|
35
|
+
|
36
|
+
end # to_snippet_json
|
37
|
+
|
38
|
+
describe "#glob" do
|
39
|
+
|
40
|
+
let(:instance) { BaseRepository.new "/path/to/my-repo" }
|
41
|
+
|
42
|
+
before do
|
43
|
+
FileUtils.mkdir_p "/path/to/my-repo/"
|
44
|
+
FileUtils.mkdir_p "/path/to/my-repo/.git/"
|
45
|
+
FileUtils.mkdir_p "/path/to/my-repo/src/"
|
46
|
+
FileUtils.mkdir_p "/path/to/my-repo/src/sub/"
|
47
|
+
FileUtils.touch "/path/to/my-repo/snippet.json"
|
48
|
+
FileUtils.touch "/path/to/my-repo/src/file.cpp"
|
49
|
+
FileUtils.touch "/path/to/my-repo/src/sub/sub_file_1.cpp"
|
50
|
+
FileUtils.touch "/path/to/my-repo/src/sub/sub_file_2.cpp"
|
51
|
+
FileUtils.touch "/path/to/my-repo/src/sub/sub_file_3.cpp"
|
52
|
+
|
53
|
+
File.write "/path/to/my-repo/snippet.json", [
|
54
|
+
'{',
|
55
|
+
' "name": "my-name",',
|
56
|
+
' "desc": "my-desc",',
|
57
|
+
' "main": "src"',
|
58
|
+
'}',
|
59
|
+
].join("\n")
|
60
|
+
end # prepare install_path
|
61
|
+
|
62
|
+
context "load snippet.json" do
|
63
|
+
|
64
|
+
before { instance.load_snippet_json }
|
65
|
+
|
66
|
+
context "glob = file.cpp" do
|
67
|
+
subject { instance.glob("file.cpp").map {|file_path| Pathname(file_path).basename.to_s } }
|
68
|
+
it { should include "file.cpp" }
|
69
|
+
it { should_not include "sub_file_1.cpp" }
|
70
|
+
it { should_not include "sub_file_2.cpp" }
|
71
|
+
it { should_not include "sub_file_3.cpp" }
|
72
|
+
end
|
73
|
+
|
74
|
+
context "glob = file*" do
|
75
|
+
subject { instance.glob("file*").map {|file_path| Pathname(file_path).basename.to_s } }
|
76
|
+
it { should include "file.cpp" }
|
77
|
+
it { should_not include "sub_file_1.cpp" }
|
78
|
+
it { should_not include "sub_file_2.cpp" }
|
79
|
+
it { should_not include "sub_file_3.cpp" }
|
80
|
+
end
|
81
|
+
|
82
|
+
context "glob = sub/*" do
|
83
|
+
subject { instance.glob("sub/*").map {|file_path| Pathname(file_path).basename.to_s } }
|
84
|
+
it { should_not include "file.cpp" }
|
85
|
+
it { should include "sub_file_1.cpp" }
|
86
|
+
it { should include "sub_file_2.cpp" }
|
87
|
+
it { should include "sub_file_3.cpp" }
|
88
|
+
end
|
89
|
+
|
90
|
+
context "glob = sub/sub_file_2.*" do
|
91
|
+
subject { instance.glob("sub/sub_file_2.*").map {|file_path| Pathname(file_path).basename.to_s } }
|
92
|
+
it { should_not include "file.cpp" }
|
93
|
+
it { should_not include "sub_file_1.cpp" }
|
94
|
+
it { should include "sub_file_2.cpp" }
|
95
|
+
it { should_not include "sub_file_3.cpp" }
|
96
|
+
end
|
97
|
+
|
98
|
+
end # load snippet.json
|
99
|
+
|
100
|
+
end # glob
|
101
|
+
|
102
|
+
end # BaseRepository
|
103
|
+
|
104
|
+
end # SocialSnippet::Repository::Drivers
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module SocialSnippet::Repository::Drivers
|
4
|
+
|
5
|
+
describe GitRepository, :without_fakefs => true do
|
6
|
+
|
7
|
+
before { disable_fakefs }
|
8
|
+
|
9
|
+
context "github repo" do
|
10
|
+
|
11
|
+
context "clone social-snippet/example-repo" do
|
12
|
+
|
13
|
+
subject(:repo) { ::SocialSnippet::Repository::RepositoryFactory.clone("git://github.com/social-snippet/example-repo.git") }
|
14
|
+
|
15
|
+
context "load snippet.json" do
|
16
|
+
before { repo.load_snippet_json }
|
17
|
+
it { expect(repo.name).to eq "example-repo" }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#refs" do
|
21
|
+
subject { repo.refs }
|
22
|
+
it { should include "master" }
|
23
|
+
it { should include "1.0.0" }
|
24
|
+
it { should include "1.0.1" }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#versions" do
|
28
|
+
subject { repo.versions }
|
29
|
+
it { should_not include "master" }
|
30
|
+
it { should include "1.0.0" }
|
31
|
+
it { should include "1.0.1" }
|
32
|
+
end
|
33
|
+
|
34
|
+
context "checkout 1.0.0" do
|
35
|
+
|
36
|
+
before do
|
37
|
+
repo.checkout("1.0.0")
|
38
|
+
repo.load_snippet_json
|
39
|
+
end
|
40
|
+
|
41
|
+
it { expect(repo.name).to eq "example-repo" }
|
42
|
+
|
43
|
+
describe "#commit_id" do
|
44
|
+
subject { repo.commit_id }
|
45
|
+
it { should eq "efa58ecae07cf3d063ae75fa97fce164c56d205a" }
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#short_commit_id" do
|
49
|
+
subject { repo.short_commit_id }
|
50
|
+
it { should eq "efa58eca" }
|
51
|
+
end
|
52
|
+
|
53
|
+
end # checkout 1.0.0
|
54
|
+
|
55
|
+
context "checkout 1.0.x (latest)" do
|
56
|
+
|
57
|
+
before do
|
58
|
+
repo.checkout(repo.latest_version("1.0"))
|
59
|
+
repo.load_snippet_json
|
60
|
+
end
|
61
|
+
|
62
|
+
it { expect(repo.name).to eq "example-repo" }
|
63
|
+
|
64
|
+
describe "#commit_id" do
|
65
|
+
subject { repo.commit_id }
|
66
|
+
it { should eq "073f4411f5251745b339d57356e2560f386e268c" }
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "#short_commit_id" do
|
70
|
+
subject { repo.short_commit_id }
|
71
|
+
it { should eq "073f4411" }
|
72
|
+
end
|
73
|
+
|
74
|
+
end # checkout 1.0.x
|
75
|
+
|
76
|
+
end # clone social_snippet/example-repo
|
77
|
+
|
78
|
+
end # github repo
|
79
|
+
|
80
|
+
end # GitRepository
|
81
|
+
|
82
|
+
end # SocialSnippet::Repository::Drivers
|
83
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module SocialSnippet::Repository
|
4
|
+
|
5
|
+
describe RepositoryFactory do
|
6
|
+
|
7
|
+
describe "#is_git_repo" do
|
8
|
+
|
9
|
+
context "git protocol" do
|
10
|
+
context "git://url/to/repo" do
|
11
|
+
it { expect(RepositoryFactory.is_git_repo(URI.parse("git://url/to/repo"))).to be_truthy }
|
12
|
+
end
|
13
|
+
end # git protocol
|
14
|
+
|
15
|
+
context "github.com" do
|
16
|
+
context "git://" do
|
17
|
+
it { expect(RepositoryFactory.is_git_repo(URI.parse("git://github.com/user/repo"))).to be_truthy }
|
18
|
+
end
|
19
|
+
context "http://" do
|
20
|
+
it { expect(RepositoryFactory.is_git_repo(URI.parse("http://github.com/user/repo"))).to be_truthy }
|
21
|
+
end
|
22
|
+
context "https://" do
|
23
|
+
it { expect(RepositoryFactory.is_git_repo(URI.parse("https://github.com/user/repo"))).to be_truthy }
|
24
|
+
end
|
25
|
+
end # github.com
|
26
|
+
|
27
|
+
end # is_git_repo
|
28
|
+
|
29
|
+
end # RepositoryFactory
|
30
|
+
|
31
|
+
end # SocialSnippet::Repository
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ::SocialSnippet::Repository::RepositoryInstaller do
|
4
|
+
|
5
|
+
let(:config) { ::SocialSnippet::Config.new(social_snippet) }
|
6
|
+
|
7
|
+
let(:social_snippet) do
|
8
|
+
class Fake; end
|
9
|
+
Fake.new
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
13
|
+
allow(social_snippet).to receive(:config).and_return config
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:installer) { ::SocialSnippet::Repository::RepositoryInstaller.new social_snippet }
|
17
|
+
|
18
|
+
|
19
|
+
describe "#each()" do
|
20
|
+
|
21
|
+
context "add four repos" do
|
22
|
+
|
23
|
+
before do
|
24
|
+
installer.add "my-repo-1", "0.0.1"
|
25
|
+
installer.add "my-repo-2", "0.0.1"
|
26
|
+
installer.add "my-repo-2", "0.0.2"
|
27
|
+
installer.add "my-repo-3", "0.0.1"
|
28
|
+
end # prepare for repos
|
29
|
+
|
30
|
+
context "call each()" do
|
31
|
+
it { expect {|b| installer.each &b }.to yield_successive_args("my-repo-1", "my-repo-2", "my-repo-3") }
|
32
|
+
end
|
33
|
+
|
34
|
+
end # add four repos
|
35
|
+
|
36
|
+
end # each
|
37
|
+
|
38
|
+
|
39
|
+
context "add my-repo#0.0.1" do
|
40
|
+
|
41
|
+
before { installer.add "my-repo", "0.0.1" }
|
42
|
+
|
43
|
+
context "installed my-repo#0.0.1" do
|
44
|
+
subject { installer.exists? "my-repo", "0.0.1" }
|
45
|
+
it { should be_truthy }
|
46
|
+
|
47
|
+
context "remove my-repo#0.0.1" do
|
48
|
+
before { installer.remove "my-repo", "0.0.1" }
|
49
|
+
|
50
|
+
context "not installed my-repo#0.0.1" do
|
51
|
+
|
52
|
+
subject { installer.exists? "my-repo", "0.0.1" }
|
53
|
+
it { should be_falsey }
|
54
|
+
|
55
|
+
end # not installed my-repo#0.0.1
|
56
|
+
|
57
|
+
end # remove my-repo#0.0.1
|
58
|
+
|
59
|
+
end # installed my-repo#0.0.1
|
60
|
+
|
61
|
+
end # add my-repo#0.0.1
|
62
|
+
|
63
|
+
end # ::SocialSnippet::Repository::RepositoryInstaller
|
@@ -0,0 +1,201 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module SocialSnippet::Repository
|
4
|
+
|
5
|
+
describe RepositoryManager, :repository_manager_current => true do
|
6
|
+
|
7
|
+
before { stub_const "ENV", "SOCIAL_SNIPPET_HOME" => "/path/to" }
|
8
|
+
|
9
|
+
let(:rest_resource) { ::RestClient::Resource.new "http://api.server/api/dummy" }
|
10
|
+
|
11
|
+
before do
|
12
|
+
allow_any_instance_of(::SocialSnippet::Registry::RegistryResources::Base).to receive(:rest_client) do
|
13
|
+
rest_resource
|
14
|
+
end
|
15
|
+
end # use dummy api server
|
16
|
+
|
17
|
+
let(:logger) do
|
18
|
+
logger = ::SocialSnippet::Logger.new(STDOUT)
|
19
|
+
logger.level = ::SocialSnippet::Logger::Severity::UNKNOWN
|
20
|
+
logger
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:config) do
|
24
|
+
::SocialSnippet::Config.new(social_snippet)
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:social_snippet) do
|
28
|
+
class Fake; end
|
29
|
+
Fake.new
|
30
|
+
end
|
31
|
+
|
32
|
+
before do
|
33
|
+
allow(social_snippet).to receive(:logger).and_return logger
|
34
|
+
allow(social_snippet).to receive(:config).and_return config
|
35
|
+
end
|
36
|
+
|
37
|
+
let(:repo_manager) { RepositoryManager.new social_snippet }
|
38
|
+
let(:commit_id) { "dummycommitid" }
|
39
|
+
let(:short_commit_id) { commit_id[0..7] }
|
40
|
+
|
41
|
+
describe "#resolve_snippet_path" do
|
42
|
+
|
43
|
+
context "without repo" do
|
44
|
+
|
45
|
+
context "cur = path/to/file.cpp" do
|
46
|
+
|
47
|
+
let(:context) { ::SocialSnippet::Context.new("path/to/file.cpp") }
|
48
|
+
|
49
|
+
context "@snip<./file2.cpp>" do
|
50
|
+
|
51
|
+
let(:tag) { ::SocialSnippet::Tag.new("// @snip<./file2.cpp>") }
|
52
|
+
|
53
|
+
context "result" do
|
54
|
+
subject { repo_manager.resolve_snippet_path(context, tag) }
|
55
|
+
it { should eq "path/to/file2.cpp" }
|
56
|
+
end
|
57
|
+
|
58
|
+
end # snip<./file2.cpp>
|
59
|
+
|
60
|
+
context "@snip <./subdir/file3.cpp>" do
|
61
|
+
|
62
|
+
let(:tag) { ::SocialSnippet::Tag.new("// @snip <./subdir/file3.cpp>") }
|
63
|
+
|
64
|
+
context "result" do
|
65
|
+
subject { repo_manager.resolve_snippet_path(context, tag) }
|
66
|
+
it { should eq "path/to/subdir/file3.cpp" }
|
67
|
+
end
|
68
|
+
|
69
|
+
end # snip <./subdir/file3.cpp>
|
70
|
+
|
71
|
+
end # cur = path/to/file.cpp
|
72
|
+
|
73
|
+
end # without repo
|
74
|
+
|
75
|
+
context "with repo" do
|
76
|
+
|
77
|
+
let(:repo_path) { "#{ENV["SOCIAL_SNIPPET_HOME"]}/repo" }
|
78
|
+
|
79
|
+
before do
|
80
|
+
FileUtils.mkdir_p "#{repo_path}/repo_a"
|
81
|
+
FileUtils.mkdir_p "#{repo_path}/repo_a/.git"
|
82
|
+
FileUtils.touch "#{repo_path}/repo_a/snippet.json"
|
83
|
+
|
84
|
+
File.write "#{repo_path}/repo_a/snippet.json", [
|
85
|
+
'{',
|
86
|
+
' "name": "repo_a",',
|
87
|
+
' "desc": "this is repo_a",',
|
88
|
+
' "language": "C++",',
|
89
|
+
' "main": "src"',
|
90
|
+
'}',
|
91
|
+
].join("\n")
|
92
|
+
|
93
|
+
allow(repo_manager).to receive(:find_repository).with("repo_a") do |path|
|
94
|
+
repo = ::SocialSnippet::Repository::Drivers::BaseRepository.new("#{repo_path}/repo_a")
|
95
|
+
expect(repo).to receive(:commit_id).and_return commit_id
|
96
|
+
repo.load_snippet_json
|
97
|
+
repo.create_cache repo_manager.repo_cache_path
|
98
|
+
repo
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "cur = path/to/file.cpp" do
|
103
|
+
|
104
|
+
let(:context) { ::SocialSnippet::Context.new("path/to/file.cpp") }
|
105
|
+
|
106
|
+
context "@snip<repo_a:path/to/file2.cpp>" do
|
107
|
+
|
108
|
+
let(:tag) { ::SocialSnippet::Tag.new("// @snip<repo_a:path/to/file2.cpp>") }
|
109
|
+
|
110
|
+
context "result" do
|
111
|
+
subject { repo_manager.resolve_snippet_path(context, tag) }
|
112
|
+
it { should eq "/path/to/repo_cache/repo_a/#{commit_id[0..7]}/src/path/to/file2.cpp" }
|
113
|
+
end
|
114
|
+
|
115
|
+
end # snip<./file2.cpp>
|
116
|
+
|
117
|
+
end # cur = path/to/file.cpp
|
118
|
+
|
119
|
+
end # with repo
|
120
|
+
|
121
|
+
end # resolve_snippet_path
|
122
|
+
|
123
|
+
describe "#find_repository" do
|
124
|
+
|
125
|
+
let(:repo_path) { "#{ENV["SOCIAL_SNIPPET_HOME"]}/repo" }
|
126
|
+
|
127
|
+
context "create repo_a as a git repo" do
|
128
|
+
|
129
|
+
before do
|
130
|
+
FileUtils.mkdir_p "#{repo_path}/repo_a"
|
131
|
+
FileUtils.mkdir_p "#{repo_path}/repo_a/.git"
|
132
|
+
FileUtils.touch "#{repo_path}/repo_a/snippet.json"
|
133
|
+
|
134
|
+
File.write "#{repo_path}/repo_a/snippet.json", [
|
135
|
+
'{',
|
136
|
+
' "name": "repo_a",',
|
137
|
+
' "desc": "this is repo_a",',
|
138
|
+
' "language": "C++"',
|
139
|
+
'}',
|
140
|
+
].join("\n")
|
141
|
+
end
|
142
|
+
|
143
|
+
before do
|
144
|
+
expect(::SocialSnippet::Repository::Drivers::GitRepository).to receive(:new) do |path|
|
145
|
+
::SocialSnippet::Repository::Drivers::BaseRepository.new(path)
|
146
|
+
end
|
147
|
+
expect_any_instance_of(::SocialSnippet::Repository::Drivers::BaseRepository).to receive(:commit_id).and_return commit_id
|
148
|
+
end
|
149
|
+
|
150
|
+
context "find repo_a" do
|
151
|
+
let(:repo) { repo_manager.find_repository("repo_a") }
|
152
|
+
it { expect(repo.name).to eq "repo_a" }
|
153
|
+
it { expect(repo.desc).to eq "this is repo_a" }
|
154
|
+
end # find repo_a
|
155
|
+
|
156
|
+
end # create three repos
|
157
|
+
|
158
|
+
end # find_repository
|
159
|
+
|
160
|
+
describe "find_repositories_start_with" do
|
161
|
+
|
162
|
+
let(:dummy_install_path) { "/path/to/install/path" }
|
163
|
+
|
164
|
+
before do
|
165
|
+
FileUtils.mkdir_p "#{dummy_install_path}"
|
166
|
+
FileUtils.mkdir_p "#{dummy_install_path}/my-repo"
|
167
|
+
FileUtils.mkdir_p "#{dummy_install_path}/new-repo"
|
168
|
+
FileUtils.mkdir_p "#{dummy_install_path}/my-graph-lib"
|
169
|
+
FileUtils.mkdir_p "#{dummy_install_path}/my-math-lib"
|
170
|
+
allow(repo_manager.installer).to receive(:path).and_return dummy_install_path
|
171
|
+
end # prepare install_path
|
172
|
+
|
173
|
+
context "find my-" do
|
174
|
+
subject { repo_manager.find_repositories_start_with("my-") }
|
175
|
+
it { should include "my-repo" }
|
176
|
+
it { should_not include "new-repo" }
|
177
|
+
it { should include "my-graph-lib" }
|
178
|
+
it { should include "my-math-lib" }
|
179
|
+
end
|
180
|
+
|
181
|
+
context "find my-re" do
|
182
|
+
subject { repo_manager.find_repositories_start_with("my-re") }
|
183
|
+
it { should include "my-repo" }
|
184
|
+
it { should_not include "new-repo" }
|
185
|
+
it { should_not include "my-graph-lib" }
|
186
|
+
it { should_not include "my-math-lib" }
|
187
|
+
end
|
188
|
+
|
189
|
+
context "find new-" do
|
190
|
+
subject { repo_manager.find_repositories_start_with("new-") }
|
191
|
+
it { should include "new-repo" }
|
192
|
+
it { should_not include "my-repo" }
|
193
|
+
it { should_not include "my-graph-lib" }
|
194
|
+
it { should_not include "my-math-lib" }
|
195
|
+
end
|
196
|
+
|
197
|
+
end # find_repositories_start_with
|
198
|
+
|
199
|
+
end # RepositoryManager
|
200
|
+
|
201
|
+
end # SocialSnippet::Repository
|