social_snippet 0.0.5 → 0.0.6
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/.gitignore +1 -0
- data/README.md +5 -5
- data/lib/social_snippet/api/completion_api.rb +13 -0
- data/lib/social_snippet/api/config_api.rb +14 -0
- data/lib/social_snippet/api/insert_snippet_api.rb +15 -0
- data/lib/social_snippet/api/install_repository_api.rb +109 -0
- data/lib/social_snippet/api/manifest_api.rb +83 -0
- data/lib/social_snippet/api/registry_api.rb +8 -0
- data/lib/social_snippet/api/search_api.rb +44 -0
- data/lib/social_snippet/api/show_api.rb +10 -0
- data/lib/social_snippet/api/update_repository_api.rb +54 -0
- data/lib/social_snippet/api.rb +20 -309
- data/lib/social_snippet/repository/repository_manager.rb +3 -1
- data/lib/social_snippet/resolvers/base_resolver.rb +21 -0
- data/lib/social_snippet/resolvers/dep_resolver.rb +7 -2
- data/lib/social_snippet/resolvers/insert_resolver.rb +8 -4
- data/lib/social_snippet/tag.rb +8 -0
- data/lib/social_snippet/tag_parser.rb +12 -22
- data/lib/social_snippet/version.rb +1 -1
- data/social_snippet.gemspec +2 -0
- data/spec/lib/command_line/sspm_init_spec.rb +1 -1
- data/spec/lib/insert_resolver_spec.rb +164 -109
- data/spec/lib/repository/repository_manager_spec.rb +8 -1
- data/test/base_resolver_test.rb +43 -0
- metadata +14 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NDExZWFlYjUyMzUyOGQwYWFkNjg0YjRhZDg0ZDdmMzA1MTViMjIxMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGMyMTAyZjdmODQ2NzJiNzM4YzAyMGJlZDRmMjQwZjEyYmIxMmJiZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTg1MWU1OGM5ODUxMjdhNTZlZDhhMmU5ZTMzYmM2N2ExMWNjNDNmYjM2MmM2
|
10
|
+
MTE2MzU0NzYyNGU4NWU1NDljNmRjNzE5MTI5NmQ3Njc2Y2NhZGRlNzNiNThj
|
11
|
+
YzRmNTA0ZDVhYmVlNmI4ZGZjMWI0MjNmYzE1ZjVhNjk0ZThmMWQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjY0NjczODE3NWUxZjRhNGFmMzliY2IyYTFmODJjM2I3OGU5MTJjZmVjNGUz
|
14
|
+
NTY4MTE1Y2ZlN2FlMGU1ZmNjMTZlMjc2ZGJkNGFjNjAyM2M3MjZkN2JjZGZm
|
15
|
+
MmY3MmFhYWM4ZGExNjA0YWZlYjI4ZDU0MDI0MGI1MDRjNGFlNjQ=
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# Social Snippet
|
2
2
|
|
3
|
-
[](https://rubygems.org/gems/social_snippet)
|
4
|
-
[](https://travis-ci.org/social-snippet/social-snippet)
|
5
|
-
[](https://codeclimate.com/github/social-snippet/social-snippet)
|
6
|
-
[](https://codeclimate.com/github/social-snippet/social-snippet)
|
7
|
-
[](http://www.rubydoc.info/github/social-snippet/social-snippet)
|
3
|
+
[](https://rubygems.org/gems/social_snippet)
|
4
|
+
[](https://travis-ci.org/social-snippet/social-snippet)
|
5
|
+
[](https://codeclimate.com/github/social-snippet/social-snippet)
|
6
|
+
[](https://codeclimate.com/github/social-snippet/social-snippet)
|
7
|
+
[](http://www.rubydoc.info/github/social-snippet/social-snippet)
|
8
8
|
|
9
9
|
TODO: Write a gem description
|
10
10
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module SocialSnippet::Api::CompletionApi
|
2
|
+
|
3
|
+
def complete_snippet_path(keyword)
|
4
|
+
social_snippet.repo_manager.complete(keyword)
|
5
|
+
end
|
6
|
+
|
7
|
+
def cli_complete_snippet_path(keyword)
|
8
|
+
complete_snippet_path(keyword).each do |cand_repo|
|
9
|
+
output cand_repo
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module SocialSnippet::Api::ConfigApi
|
2
|
+
|
3
|
+
# $ sspm config key=value
|
4
|
+
def config_set(key, value)
|
5
|
+
social_snippet.config.set! key, value
|
6
|
+
end
|
7
|
+
|
8
|
+
# $ sspm config key
|
9
|
+
def config_get(key)
|
10
|
+
value = social_snippet.config.get(key)
|
11
|
+
social_snippet.logger.say "#{key}=#{value}"
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module SocialSnippet::Api::InsertSnippetApi
|
2
|
+
|
3
|
+
# Insert snippets to given text.
|
4
|
+
# $ ssnip
|
5
|
+
#
|
6
|
+
# @param src [String] The text of source code
|
7
|
+
#
|
8
|
+
def insert_snippet(src, options = {})
|
9
|
+
resolver = ::SocialSnippet::Resolvers::InsertResolver.new(social_snippet, options)
|
10
|
+
res = resolver.insert(src)
|
11
|
+
output res
|
12
|
+
res
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module SocialSnippet::Api::InstallRepositoryApi
|
2
|
+
|
3
|
+
# Install repository (Core API)
|
4
|
+
#
|
5
|
+
# @param repo [::SocialSnippet::Repository::Drivers::BaseRepository]
|
6
|
+
def install_repository(repo_name, repo_ref, repo, options = {})
|
7
|
+
display_name = repo_name
|
8
|
+
|
9
|
+
if repo_ref.nil?
|
10
|
+
repo_ref = resolve_reference(repo)
|
11
|
+
|
12
|
+
if repo.has_versions?
|
13
|
+
output "Resolving #{display_name}'s version"
|
14
|
+
else
|
15
|
+
output "No versions, use current reference"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
display_name = "#{repo_name}\##{repo_ref}"
|
20
|
+
|
21
|
+
output "Installing: #{display_name}"
|
22
|
+
unless options[:dry_run]
|
23
|
+
social_snippet.repo_manager.install repo_name, repo_ref, repo, options
|
24
|
+
end
|
25
|
+
|
26
|
+
output "Success: #{display_name}"
|
27
|
+
|
28
|
+
# install dependencies
|
29
|
+
if has_dependencies?(repo)
|
30
|
+
output "Finding #{display_name}'s dependencies"
|
31
|
+
install_missing_dependencies repo.dependencies, options
|
32
|
+
output "Finish finding #{display_name}'s dependencies"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# $ sspm install name
|
37
|
+
def install_repository_by_name(repo_name, repo_ref, options = {})
|
38
|
+
installed_as = repo_name
|
39
|
+
installed_as = options[:name] unless options[:name].nil?
|
40
|
+
|
41
|
+
unless installed_as === repo_name
|
42
|
+
output "Installing as #{installed_as}"
|
43
|
+
end
|
44
|
+
|
45
|
+
if social_snippet.repo_manager.exists?(installed_as, repo_ref)
|
46
|
+
output "#{installed_as} is already installed"
|
47
|
+
return
|
48
|
+
end
|
49
|
+
|
50
|
+
output "Finding: #{repo_name}"
|
51
|
+
info = social_snippet.registry_client.repositories.find(repo_name)
|
52
|
+
output "Found at: #{info["url"]}"
|
53
|
+
|
54
|
+
output "Cloning repository..."
|
55
|
+
repo = ::SocialSnippet::Repository::RepositoryFactory.clone(info["url"])
|
56
|
+
|
57
|
+
install_repository installed_as, repo_ref, repo
|
58
|
+
end
|
59
|
+
|
60
|
+
# $ sspm install URL
|
61
|
+
def install_repository_by_url(repo_url, repo_ref, options = {})
|
62
|
+
output "Cloning repository..."
|
63
|
+
repo = ::SocialSnippet::Repository::RepositoryFactory.clone(repo_url)
|
64
|
+
install_repository_by_repo repo, repo_ref, options
|
65
|
+
end
|
66
|
+
|
67
|
+
# $ sspm install ./path/to/repo
|
68
|
+
def install_repository_by_path(repo_path, repo_ref, options = {})
|
69
|
+
output "Cloning repository..."
|
70
|
+
repo = ::SocialSnippet::Repository::RepositoryFactory.clone_local(repo_path)
|
71
|
+
install_repository_by_repo repo, repo_ref, options
|
72
|
+
end
|
73
|
+
|
74
|
+
def install_repository_by_repo(repo, repo_ref, options)
|
75
|
+
installed_as = repo.name
|
76
|
+
installed_as = options[:name] unless options[:name].nil?
|
77
|
+
output "Installing as #{installed_as}"
|
78
|
+
|
79
|
+
if social_snippet.repo_manager.exists?(installed_as)
|
80
|
+
output "#{installed_as} is already installed"
|
81
|
+
return
|
82
|
+
end
|
83
|
+
|
84
|
+
install_repository installed_as, repo_ref, repo
|
85
|
+
end
|
86
|
+
|
87
|
+
def install_missing_dependencies(repo_deps, options = {})
|
88
|
+
repo_deps.each do |dep_repo_name, dep_repo_ref|
|
89
|
+
unless social_snippet.repo_manager.exists?(dep_repo_name, dep_repo_ref)
|
90
|
+
install_repository_by_name dep_repo_name, dep_repo_ref, options
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def resolve_reference(repo)
|
98
|
+
if repo.has_versions?
|
99
|
+
repo.latest_version
|
100
|
+
else
|
101
|
+
repo.current_ref
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def has_dependencies?(repo)
|
106
|
+
repo.dependencies && ( not repo.dependencies.empty? )
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module SocialSnippet::Api::ManifestApi
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
# Initialize the snippet.json interactively.
|
6
|
+
# $ sspm init
|
7
|
+
def init_manifest(options = {})
|
8
|
+
current_answers = load_manifest_file || {}
|
9
|
+
answer = loop_manifest_questions(current_answers)
|
10
|
+
::File.write "snippet.json", ::JSON.pretty_generate(answer)
|
11
|
+
answer
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def loop_manifest_questions(answer)
|
17
|
+
loop do
|
18
|
+
answer = ask_manifest_questions(manifest_questions(answer), answer)
|
19
|
+
social_snippet.logger.say ""
|
20
|
+
social_snippet.logger.say ::JSON.pretty_generate(answer)
|
21
|
+
social_snippet.logger.say ""
|
22
|
+
break if ask_confirm("Is this okay? [Y/N]: ")
|
23
|
+
end
|
24
|
+
answer
|
25
|
+
end
|
26
|
+
|
27
|
+
# load current configuration
|
28
|
+
def load_manifest_file
|
29
|
+
if ::File.exists?("snippet.json")
|
30
|
+
::JSON.parse(::File.read "snippet.json")
|
31
|
+
else
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def ask_confirm(message)
|
37
|
+
ret = social_snippet.prompt.ask(message) do |q|
|
38
|
+
q.limit = 1
|
39
|
+
q.validate = /^[yn]$/i
|
40
|
+
end
|
41
|
+
/y/i === ret
|
42
|
+
end
|
43
|
+
|
44
|
+
def ask_manifest_questions(questions, obj)
|
45
|
+
questions.inject(obj) do |obj, q|
|
46
|
+
obj[q[:key]] = ask_manifest_question(q)
|
47
|
+
obj
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def ask_manifest_question(question)
|
52
|
+
if question[:type] === :string
|
53
|
+
social_snippet.prompt.ask("#{question[:key]}: ") do |q|
|
54
|
+
q.default = question[:default]
|
55
|
+
if question[:validate].is_a?(Regexp)
|
56
|
+
q.validate = question[:validate]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def manifest_questions(answer)
|
63
|
+
[
|
64
|
+
{
|
65
|
+
:key => "name",
|
66
|
+
:type => :string,
|
67
|
+
:validate => /[a-zA-Z0-9\.\-_]+/,
|
68
|
+
:default => answer["name"],
|
69
|
+
},
|
70
|
+
{
|
71
|
+
:key => "description",
|
72
|
+
:type => :string,
|
73
|
+
:default => answer["description"],
|
74
|
+
},
|
75
|
+
{
|
76
|
+
:key => "license",
|
77
|
+
:default => answer["license"] || "MIT",
|
78
|
+
:type => :string,
|
79
|
+
},
|
80
|
+
]
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module SocialSnippet::Api::SearchApi
|
2
|
+
|
3
|
+
# $ sspm search query
|
4
|
+
def search_repositories(query, options = {})
|
5
|
+
format_text = search_result_format(options)
|
6
|
+
social_snippet.registry_client.repositories.search(query).each do |repo|
|
7
|
+
output format_text % search_result_list(repo, options)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def search_result_list(repo, options)
|
14
|
+
list = []
|
15
|
+
list.push repo["name"] if options[:name]
|
16
|
+
list.push "\"#{repo["desc"]}\"" if options[:desc]
|
17
|
+
list.push repo["url"] if options[:url]
|
18
|
+
list.push search_result_installed(repo) if options[:installed]
|
19
|
+
return list
|
20
|
+
end
|
21
|
+
|
22
|
+
def search_result_installed(repo)
|
23
|
+
if social_snippet.repo_manager.exists?(repo["name"])
|
24
|
+
"#installed"
|
25
|
+
else
|
26
|
+
""
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def search_result_format(options)
|
31
|
+
keys = [ # TODO: improve (change order by option, etc...)
|
32
|
+
:name,
|
33
|
+
:desc,
|
34
|
+
:url,
|
35
|
+
:installed,
|
36
|
+
]
|
37
|
+
|
38
|
+
list = []
|
39
|
+
keys.each {|key| list.push "%s" if options[key] }
|
40
|
+
|
41
|
+
return list.join(" ")
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module SocialSnippet::Api::UpdateRepositoryApi
|
2
|
+
|
3
|
+
# Update a repository
|
4
|
+
# $ sspm update repo-name
|
5
|
+
def update_repository(repo_name, options = {})
|
6
|
+
unless social_snippet.repo_manager.exists?(repo_name)
|
7
|
+
output "ERROR: #{repo_name} is not installed"
|
8
|
+
return
|
9
|
+
end
|
10
|
+
|
11
|
+
output "Fetching update for #{repo_name}"
|
12
|
+
ret = social_snippet.repo_manager.fetch(repo_name, options)
|
13
|
+
|
14
|
+
repo = social_snippet.repo_manager.find_repository(repo_name)
|
15
|
+
display_name = repo_name
|
16
|
+
|
17
|
+
# nothing to update
|
18
|
+
if ret == 0 && social_snippet.repo_manager.exists?(repo_name, repo.latest_version)
|
19
|
+
output "Everything up-to-date"
|
20
|
+
return
|
21
|
+
end
|
22
|
+
|
23
|
+
output "Updating #{repo_name}"
|
24
|
+
unless options[:dry_run]
|
25
|
+
version = repo.latest_version
|
26
|
+
if repo.has_versions? && repo.current_ref != version
|
27
|
+
output "Bumping version into #{version}"
|
28
|
+
display_name = "#{repo_name}\##{version}"
|
29
|
+
repo.checkout version
|
30
|
+
social_snippet.repo_manager.update repo_name, version, repo, options
|
31
|
+
end
|
32
|
+
social_snippet.repo_manager.cache_installing_repo repo
|
33
|
+
end
|
34
|
+
|
35
|
+
output "Success #{display_name}"
|
36
|
+
|
37
|
+
# update deps
|
38
|
+
if social_snippet.repo_manager.has_deps?(repo_name)
|
39
|
+
output "Updating #{display_name}'s dependencies"
|
40
|
+
deps = social_snippet.repo_manager.deps(repo_name)
|
41
|
+
install_missing_dependencies deps, options
|
42
|
+
output "Finish updating #{display_name}'s dependencies"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Update all installed repositories
|
47
|
+
# $ sspm update
|
48
|
+
def update_all_repositories(options = {})
|
49
|
+
social_snippet.repo_manager.each_installed_repo do |repo_name|
|
50
|
+
update_repository repo_name, options
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|