veye 0.0.9 → 0.1
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 +4 -4
- data/Gemfile.lock +80 -29
- data/Makefile +6 -0
- data/README.md +12 -224
- data/bin/veye +13 -22
- data/changelogs.md +95 -0
- data/lib/veye/api/base_resource.rb +8 -9
- data/lib/veye/api/github.rb +77 -0
- data/lib/veye/api/json_response.rb +21 -25
- data/lib/veye/api/package.rb +98 -0
- data/lib/veye/api/project.rb +107 -0
- data/lib/veye/api/resource.rb +9 -8
- data/lib/veye/api/service.rb +15 -0
- data/lib/veye/api/user.rb +32 -0
- data/lib/veye/api.rb +22 -2
- data/lib/veye/base_executor.rb +13 -9
- data/lib/veye/github/delete.rb +10 -20
- data/lib/veye/github/import.rb +7 -14
- data/lib/veye/github/info.rb +6 -12
- data/lib/veye/github/list.rb +9 -19
- data/lib/veye/github/search.rb +9 -17
- data/lib/veye/github/sync.rb +9 -18
- data/lib/veye/github.rb +1 -1
- data/lib/veye/helpers/format_helpers.rb +15 -5
- data/lib/veye/package/follow.rb +24 -47
- data/lib/veye/package/info.rb +8 -25
- data/lib/veye/package/references.rb +9 -36
- data/lib/veye/package/search.rb +14 -24
- data/lib/veye/package.rb +14 -6
- data/lib/veye/pagination.rb +2 -0
- data/lib/veye/project/check.rb +39 -117
- data/lib/veye/project/license.rb +23 -0
- data/lib/veye/project.rb +4 -3
- data/lib/veye/service.rb +13 -17
- data/lib/veye/user/me.rb +11 -30
- data/lib/veye/user.rb +2 -1
- data/lib/veye/version.rb +1 -1
- data/lib/veye/views/github/info_csv.rb +3 -3
- data/lib/veye/views/github/info_json.rb +4 -0
- data/lib/veye/views/github/list_csv.rb +5 -3
- data/lib/veye/views/github/list_pretty.rb +2 -2
- data/lib/veye/views/github/list_table.rb +3 -2
- data/lib/veye/views/package/info_pretty.rb +1 -1
- data/lib/veye/views/package/search_csv.rb +2 -3
- data/lib/veye/views/package/search_table.rb +1 -3
- data/lib/veye/views/package.rb +1 -1
- data/lib/veye/views/project/licence_csv.rb +3 -3
- data/lib/veye/views/project/licence_json.rb +1 -1
- data/lib/veye/views/project/licence_pretty.rb +1 -1
- data/lib/veye/views/project/licence_table.rb +3 -3
- data/lib/veye/views/user/profile_table.rb +4 -1
- data/lib/veye/views/user.rb +3 -1
- data/lib/veye.rb +29 -61
- data/test/api/github_test.rb +84 -0
- data/test/api/package_test.rb +80 -0
- data/test/api/project_test.rb +118 -0
- data/test/api/service_test.rb +15 -0
- data/test/api/user_test.rb +30 -0
- data/test/fixtures/vcr_cassettes/github_delete.yml +48 -0
- data/test/fixtures/vcr_cassettes/github_import.yml +53 -0
- data/test/fixtures/vcr_cassettes/github_info.yml +49 -0
- data/test/fixtures/vcr_cassettes/github_list.yml +80 -0
- data/test/fixtures/vcr_cassettes/github_sync.yml +48 -0
- data/test/fixtures/vcr_cassettes/package_follow.yml +52 -0
- data/test/fixtures/vcr_cassettes/package_follow_status.yml +48 -0
- data/test/fixtures/vcr_cassettes/package_info.yml +56 -0
- data/test/fixtures/vcr_cassettes/package_reference.yml +46 -0
- data/test/fixtures/vcr_cassettes/package_search.yml +46 -0
- data/test/fixtures/vcr_cassettes/package_unfollow.yml +48 -0
- data/test/fixtures/vcr_cassettes/project_delete.yml +48 -0
- data/test/fixtures/vcr_cassettes/project_get.yml +49 -0
- data/test/fixtures/vcr_cassettes/project_license.yml +49 -0
- data/test/fixtures/vcr_cassettes/project_list.yml +48 -0
- data/test/fixtures/vcr_cassettes/project_update.yml +105 -0
- data/test/fixtures/vcr_cassettes/project_upload.yml +104 -0
- data/test/fixtures/vcr_cassettes/services_ping.yml +46 -0
- data/test/fixtures/vcr_cassettes/user_get_favorites.yml +48 -0
- data/test/fixtures/vcr_cassettes/user_get_profile.yml +48 -0
- data/test/github_delete_test.rb +31 -0
- data/test/github_import_test.rb +94 -0
- data/test/github_info_test.rb +73 -0
- data/test/github_list_test.rb +84 -0
- data/test/github_sync_test.rb +20 -0
- data/test/package_follow_test.rb +38 -0
- data/test/package_info_test.rb +73 -0
- data/test/package_reference_test.rb +67 -0
- data/test/package_search_test.rb +66 -0
- data/test/project_check_test.rb +326 -0
- data/test/project_license_test.rb +72 -0
- data/test/service_test.rb +29 -0
- data/test/test_helper.rb +29 -4
- data/test/user_me_test.rb +126 -0
- data/veye.gemspec +45 -0
- metadata +163 -37
- data/DEPENDENCIES.md +0 -25
- data/lib/veye/helpers/repo_helpers.rb +0 -5
- data/lib/veye/project/licence.rb +0 -38
- data/test/default_test.rb +0 -14
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
module Veye
|
|
2
|
+
module API
|
|
3
|
+
# Api wrappers for Github endpoint
|
|
4
|
+
module Github
|
|
5
|
+
RESOURCE_PATH = '/github'
|
|
6
|
+
def self.encode_repo_key(repo_key)
|
|
7
|
+
repo_key.to_s.gsub(/\//, ':').gsub(/\./, '~')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.get_list(api_key, page = 1, lang = nil, privat = nil, org = nil, type = nil)
|
|
11
|
+
params = {
|
|
12
|
+
api_key: api_key,
|
|
13
|
+
page: page || 1
|
|
14
|
+
}
|
|
15
|
+
params[:lang] = lang.to_s.downcase if lang
|
|
16
|
+
unless private.nil?
|
|
17
|
+
params[:private] = privat == 'true' || privat == 't' || privat == true
|
|
18
|
+
end
|
|
19
|
+
params[:org_name] = org if org
|
|
20
|
+
params[:org_type] = type if type
|
|
21
|
+
|
|
22
|
+
github_api = Resource.new(RESOURCE_PATH)
|
|
23
|
+
qparams = { params: params }
|
|
24
|
+
github_api.resource.get(qparams) do |response, request, result|
|
|
25
|
+
JSONResponse.new(request, result, response)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.import_all(api_key, force = false)
|
|
30
|
+
params = { api_key: api_key }
|
|
31
|
+
params[:force] = force || false
|
|
32
|
+
qparams = { params: params }
|
|
33
|
+
github_api = Resource.new("#{RESOURCE_PATH}/sync")
|
|
34
|
+
|
|
35
|
+
github_api.resource.get(qparams) do |response, request, result|
|
|
36
|
+
JSONResponse.new(request, result, response)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.get_repo(api_key, repo_name, branch = nil, file = nil)
|
|
41
|
+
safe_repo_name = encode_repo_key(repo_name)
|
|
42
|
+
github_api = Resource.new("#{RESOURCE_PATH}/#{safe_repo_name}")
|
|
43
|
+
qparams = { api_key: api_key }
|
|
44
|
+
qparams[:branch] = branch unless branch.nil?
|
|
45
|
+
qparams[:file] = file unless file.nil?
|
|
46
|
+
|
|
47
|
+
github_api.resource.get({ params: qparams }) do |response, request, result|
|
|
48
|
+
JSONResponse.new(request, result, response)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.import_repo(api_key, repo_name, branch = nil, filename = nil)
|
|
53
|
+
safe_repo_name = encode_repo_key(repo_name)
|
|
54
|
+
github_api = Resource.new("#{RESOURCE_PATH}/#{safe_repo_name}")
|
|
55
|
+
|
|
56
|
+
params = { api_key: api_key }
|
|
57
|
+
params[:branch] = branch unless branch.nil?
|
|
58
|
+
params[:file] = filename unless filename.nil?
|
|
59
|
+
|
|
60
|
+
github_api.resource.post(params) do |response, request, result|
|
|
61
|
+
JSONResponse.new(request, result, response)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.delete_repo(api_key, repo_name, branch = nil)
|
|
66
|
+
safe_repo_key = encode_repo_key(repo_name)
|
|
67
|
+
qparams = { api_key: api_key }
|
|
68
|
+
qparams[:branch] = branch unless branch.nil?
|
|
69
|
+
github_api = Resource.new("#{RESOURCE_PATH}/#{safe_repo_key}")
|
|
70
|
+
|
|
71
|
+
github_api.resource.delete({params: qparams}) do |response, request, result|
|
|
72
|
+
JSONResponse.new(request, result, response)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -2,55 +2,51 @@ require 'json'
|
|
|
2
2
|
|
|
3
3
|
module Veye
|
|
4
4
|
module API
|
|
5
|
+
# Unified API response class
|
|
5
6
|
class JSONResponse
|
|
6
7
|
attr_reader :code, :success, :message, :data, :url, :headers
|
|
7
8
|
def initialize(request, result, response)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@success, @message = success?(result, response_data)
|
|
15
|
-
@data = response_data
|
|
9
|
+
@url = request.url
|
|
10
|
+
@headers = request.headers
|
|
11
|
+
@code = result.code.to_i
|
|
12
|
+
response_data = JSON.parse(response)
|
|
13
|
+
@success, @message = success?(result)
|
|
14
|
+
@data = response_data
|
|
16
15
|
end
|
|
17
16
|
|
|
18
|
-
def success?(result
|
|
17
|
+
def success?(result)
|
|
19
18
|
@code = result.code.to_i
|
|
20
19
|
success = false
|
|
21
|
-
|
|
22
|
-
case @code
|
|
20
|
+
case @code
|
|
23
21
|
when 200
|
|
24
22
|
success = true
|
|
25
|
-
message =
|
|
23
|
+
message = 'fetched successfully'
|
|
26
24
|
when 201
|
|
27
25
|
success = true
|
|
28
|
-
message =
|
|
26
|
+
message = 'created successfully'
|
|
29
27
|
when 400
|
|
30
|
-
message =
|
|
28
|
+
message = 'bad request - wrong parameters, data'
|
|
31
29
|
when 401
|
|
32
|
-
message =
|
|
30
|
+
message = 'not authorized - add apikey or update settings.'
|
|
33
31
|
when 403
|
|
34
|
-
message =
|
|
32
|
+
message = 'forbidden - server refused execute query'
|
|
35
33
|
when 413
|
|
36
|
-
message =
|
|
34
|
+
message = 'request entity too big - use smaller data object'
|
|
37
35
|
when 500
|
|
38
|
-
message =
|
|
36
|
+
message = 'internal server error - write to us'
|
|
39
37
|
when 501
|
|
40
|
-
message =
|
|
38
|
+
message = 'not implemented - write to us'
|
|
41
39
|
when 503
|
|
42
|
-
message =
|
|
40
|
+
message = 'service unavailable - temporary overloaded - write to us'
|
|
43
41
|
when 531
|
|
44
|
-
message =
|
|
42
|
+
message = 'not authorized - add or update api key'
|
|
45
43
|
else
|
|
46
44
|
success = false
|
|
47
|
-
message =
|
|
45
|
+
message = ''
|
|
48
46
|
end
|
|
49
47
|
|
|
50
|
-
|
|
48
|
+
[success, message]
|
|
51
49
|
end
|
|
52
|
-
|
|
53
|
-
|
|
54
50
|
end
|
|
55
51
|
end
|
|
56
52
|
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
module Veye
|
|
2
|
+
module API
|
|
3
|
+
# Package API wrappers
|
|
4
|
+
module Package
|
|
5
|
+
RESOURCE_PATH = '/products'
|
|
6
|
+
|
|
7
|
+
def supported_languages
|
|
8
|
+
Set.new %w( Clojure Java Javascript Node.JS PHP Python Ruby R )
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.encode_prod_key(prod_key)
|
|
12
|
+
prod_key.to_s.gsub(/\//, ':').gsub(/\./, '~')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.encode_language(lang)
|
|
16
|
+
lang.to_s.gsub(/\./, '').downcase
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# returns package information
|
|
20
|
+
def self.get_package(prod_key, language)
|
|
21
|
+
lang = encode_language(language)
|
|
22
|
+
safe_prod_key = encode_prod_key(prod_key)
|
|
23
|
+
product_api = Resource.new "#{RESOURCE_PATH}/#{lang}/#{safe_prod_key}"
|
|
24
|
+
product_api.resource.get do |response, request, result|
|
|
25
|
+
JSONResponse.new(request, result, response)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.search(search_term, language = nil, group_id = nil, page = '1')
|
|
30
|
+
search_api = Resource.new "#{RESOURCE_PATH}/search/#{search_term}"
|
|
31
|
+
|
|
32
|
+
search_params = { q: search_term.to_s }
|
|
33
|
+
search_params[:lang] = encode_language(language) unless language.nil?
|
|
34
|
+
search_params[:g] = group_id unless group_id.nil?
|
|
35
|
+
if page.nil?
|
|
36
|
+
search_params[:page] = '1'
|
|
37
|
+
else
|
|
38
|
+
search_params[:page] = page.to_s
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
request_params = { params: search_params }
|
|
42
|
+
search_api.resource.get(request_params) do |response, request, result|
|
|
43
|
+
JSONResponse.new(request, result, response)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.get_follow_status(api_key, prod_key, language)
|
|
48
|
+
product_api = Resource.new(RESOURCE_PATH)
|
|
49
|
+
qparams = { params: { api_key: api_key } }
|
|
50
|
+
lang = encode_language(language)
|
|
51
|
+
safe_prod_key = encode_prod_key(prod_key)
|
|
52
|
+
|
|
53
|
+
path = "#{lang}/#{safe_prod_key}/follow.json"
|
|
54
|
+
product_api.resource[path].get(qparams) do |response, request, result|
|
|
55
|
+
Veye::API::JSONResponse.new(request, result, response)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.follow(api_key, prod_key, language)
|
|
60
|
+
api = Resource.new(RESOURCE_PATH)
|
|
61
|
+
qparams = { api_key: api_key }
|
|
62
|
+
lang = encode_language(language)
|
|
63
|
+
safe_prod_key = encode_prod_key(prod_key)
|
|
64
|
+
|
|
65
|
+
path = "/#{lang}/#{safe_prod_key}/follow.json"
|
|
66
|
+
api.resource[path].post(qparams) do |response, request, result|
|
|
67
|
+
JSONResponse.new(request, result, response)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def self.unfollow(api_key, prod_key, language)
|
|
72
|
+
api = Resource.new(RESOURCE_PATH)
|
|
73
|
+
qparams = { params: { api_key: api_key } }
|
|
74
|
+
lang = encode_language(language)
|
|
75
|
+
safe_prod_key = encode_prod_key(prod_key)
|
|
76
|
+
|
|
77
|
+
path = "/#{lang}/#{safe_prod_key}/follow.json"
|
|
78
|
+
api.resource[path].delete(qparams) do |response, request, result|
|
|
79
|
+
JSONResponse.new(request, result, response)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def self.get_references(prod_key, language, page = nil)
|
|
84
|
+
api = Resource.new(RESOURCE_PATH)
|
|
85
|
+
lang = encode_language(language).capitalize # endpoint bug
|
|
86
|
+
safe_prod_key = encode_prod_key(prod_key)
|
|
87
|
+
|
|
88
|
+
api_path = "/#{lang}/#{safe_prod_key}/references"
|
|
89
|
+
page_nr = page.to_s unless page.nil?
|
|
90
|
+
page_nr ||= 1
|
|
91
|
+
qparams = { params: { page: page_nr } }
|
|
92
|
+
api.resource[api_path].get(qparams) do |response, request, result|
|
|
93
|
+
JSONResponse.new(request, result, response)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
module Veye
|
|
2
|
+
module API
|
|
3
|
+
module Project
|
|
4
|
+
RESOURCE_PATH = "/projects"
|
|
5
|
+
MAX_FILE_SIZE = 500000 # ~ 500kB
|
|
6
|
+
|
|
7
|
+
#TODO: add throws
|
|
8
|
+
def self.check_file(filename)
|
|
9
|
+
file_path = File.absolute_path(filename)
|
|
10
|
+
|
|
11
|
+
unless File.exists?(file_path)
|
|
12
|
+
printf("%s: Cant read file `%s`",
|
|
13
|
+
"Error".color(:red),
|
|
14
|
+
"#{filename}".color(:yellow))
|
|
15
|
+
return nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
file_size = File.size(file_path)
|
|
19
|
+
unless file_size != 0 and file_size < MAX_FILE_SIZE
|
|
20
|
+
p "Size of file is not acceptable: 0kb < x <= #{MAX_FILE_SIZE/1000}kb"
|
|
21
|
+
return nil
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
file_path
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.get_list(api_key)
|
|
28
|
+
project_api = Resource.new(RESOURCE_PATH)
|
|
29
|
+
qparams = {:params => {:api_key => api_key}}
|
|
30
|
+
project_api.resource.get(qparams) do |response, request, result|
|
|
31
|
+
JSONResponse.new(request, result, response)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.upload(api_key, filename)
|
|
36
|
+
project_api = Resource.new(RESOURCE_PATH)
|
|
37
|
+
file_path = check_file(filename)
|
|
38
|
+
return if file_path.nil?
|
|
39
|
+
|
|
40
|
+
file_obj = File.open(file_path, 'rb')
|
|
41
|
+
upload_data = {
|
|
42
|
+
:upload => file_obj,
|
|
43
|
+
:api_key => api_key
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
project_api.resource.post(upload_data) do |response, request, result, &block|
|
|
47
|
+
JSONResponse.new(request, result, response)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.update(api_key, project_key, filename)
|
|
52
|
+
project_api = Resource.new("#{RESOURCE_PATH}/#{project_key}")
|
|
53
|
+
file_path = check_file(filename)
|
|
54
|
+
return if file_path.nil?
|
|
55
|
+
|
|
56
|
+
file_obj = File.open(file_path, 'rb')
|
|
57
|
+
upload_data = {
|
|
58
|
+
:project_file => file_obj,
|
|
59
|
+
:api_key => api_key
|
|
60
|
+
}
|
|
61
|
+
project_api.resource.post(upload_data) do |response, request, result, &block|
|
|
62
|
+
JSONResponse.new(request, result, response)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def self.get_project(api_key, project_key)
|
|
67
|
+
if project_key.nil? or project_key.empty?
|
|
68
|
+
printf("%s: %s",
|
|
69
|
+
"Error".color(:red),
|
|
70
|
+
"Not valid project_key: `#{project_key}`")
|
|
71
|
+
return
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
project_api = Resource.new("#{RESOURCE_PATH}/#{project_key}")
|
|
75
|
+
qparams = {:params => {:api_key => api_key}}
|
|
76
|
+
project_api.resource.get(qparams) do |response, request, result|
|
|
77
|
+
JSONResponse.new(request, result, response)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def self.delete_project(api_key, project_key)
|
|
82
|
+
project_api = Resource.new("#{RESOURCE_PATH}/#{project_key}")
|
|
83
|
+
qparams = {:params => {:api_key => api_key}}
|
|
84
|
+
|
|
85
|
+
project_api.resource.delete(qparams) do |response, request, result|
|
|
86
|
+
JSONResponse.new(request, result, response)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
#TODO: add throw exceptions
|
|
91
|
+
def self.get_licenses(api_key, project_key)
|
|
92
|
+
if project_key.nil? or project_key.empty?
|
|
93
|
+
printf("%s: %s",
|
|
94
|
+
"Error".color(:red),
|
|
95
|
+
"Not valid project_key: `#{project_key}`")
|
|
96
|
+
return
|
|
97
|
+
end
|
|
98
|
+
project_api = Resource.new("#{RESOURCE_PATH}/#{project_key}/licenses")
|
|
99
|
+
qparams = {:params => {:api_key => api_key}}
|
|
100
|
+
project_api.resource.get(qparams) do |response, request, result|
|
|
101
|
+
JSONResponse.new(request, result, response)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
data/lib/veye/api/resource.rb
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'rest-client'
|
|
2
2
|
require_relative 'base_resource.rb'
|
|
3
3
|
|
|
4
|
-
#for ssl keys:
|
|
5
|
-
#openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -nodes
|
|
6
4
|
module Veye
|
|
7
5
|
module API
|
|
8
6
|
class Resource < BaseResource
|
|
9
7
|
def initialize(path = nil)
|
|
10
8
|
super(path)
|
|
11
|
-
|
|
12
|
-
timeout =
|
|
9
|
+
timeout_val = $global_options[:timeout].to_i
|
|
10
|
+
timeout = timeout_val if timeout_val > 0
|
|
11
|
+
timeout ||= 90
|
|
13
12
|
open_timeout = $global_options[:open_timeout].to_i || 10
|
|
14
13
|
|
|
15
|
-
@resource = RestClient::Resource.new(
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
@resource = RestClient::Resource.new(
|
|
15
|
+
@full_path,
|
|
16
|
+
timeout: timeout,
|
|
17
|
+
open_timeout: open_timeout,
|
|
18
|
+
)
|
|
18
19
|
end
|
|
19
20
|
end
|
|
20
21
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Veye
|
|
2
|
+
module API
|
|
3
|
+
# API wrappers for Service endpoint
|
|
4
|
+
module Service
|
|
5
|
+
RESOURCE_PATH = '/services'
|
|
6
|
+
|
|
7
|
+
def self.ping
|
|
8
|
+
public_api = Resource.new "#{RESOURCE_PATH}/ping"
|
|
9
|
+
public_api.resource.get do |response, request, result|
|
|
10
|
+
JSONResponse.new(request, result, response)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Veye
|
|
2
|
+
module API
|
|
3
|
+
# API wrappers for User api
|
|
4
|
+
module User
|
|
5
|
+
RESOURCE_PATH = '/me'
|
|
6
|
+
|
|
7
|
+
def self.get_profile(api_key)
|
|
8
|
+
user_api = Resource.new RESOURCE_PATH
|
|
9
|
+
qparams = { params: { api_key: api_key } }
|
|
10
|
+
|
|
11
|
+
user_api.resource.get(qparams) do |response, request, result|
|
|
12
|
+
JSONResponse.new(request, result, response)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.get_favorites(api_key, page = 1)
|
|
17
|
+
fav_api = Resource.new "#{RESOURCE_PATH}/favorites"
|
|
18
|
+
page ||= 1
|
|
19
|
+
qparams = {
|
|
20
|
+
params: {
|
|
21
|
+
api_key: api_key,
|
|
22
|
+
page: page
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
fav_api.resource.get(qparams) do |response, request, result|
|
|
27
|
+
JSONResponse.new(request, result, response)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/veye/api.rb
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
-
require_relative 'api/resource
|
|
2
|
-
require_relative 'api/json_response
|
|
1
|
+
require_relative 'api/resource'
|
|
2
|
+
require_relative 'api/json_response'
|
|
3
|
+
require_relative 'api/package'
|
|
4
|
+
require_relative 'api/project'
|
|
5
|
+
require_relative 'api/github'
|
|
6
|
+
require_relative 'api/service'
|
|
7
|
+
require_relative 'api/user'
|
|
3
8
|
|
|
9
|
+
# -- initialize global options
|
|
10
|
+
# ps: command line interface overwrites those variables with init_enviroment
|
|
11
|
+
$global_options = {
|
|
12
|
+
protocol: 'https',
|
|
13
|
+
server: 'www.versioneye.com',
|
|
14
|
+
path: 'api/v2',
|
|
15
|
+
port: nil,
|
|
16
|
+
timeout: 30
|
|
17
|
+
}
|
|
18
|
+
$global_options[:url] = Veye::API::Resource.build_url($global_options)
|
|
19
|
+
|
|
20
|
+
module Veye
|
|
21
|
+
module API
|
|
22
|
+
end
|
|
23
|
+
end
|
data/lib/veye/base_executor.rb
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
# Base class that will bring many helpers into command classes.
|
|
2
2
|
class BaseExecutor
|
|
3
3
|
extend FormatHelpers
|
|
4
|
-
extend RepoHelpers
|
|
5
4
|
|
|
6
5
|
def self.show_results(output_formats, results, options = {}, paging = nil)
|
|
7
|
-
format = options[:format]
|
|
6
|
+
format = options[:format] || 'pretty'
|
|
8
7
|
self.supported_format?(output_formats, format)
|
|
9
8
|
formatter = output_formats[format]
|
|
10
9
|
|
|
@@ -13,12 +12,17 @@ class BaseExecutor
|
|
|
13
12
|
formatter.after(paging, options[:pagination])
|
|
14
13
|
end
|
|
15
14
|
|
|
16
|
-
def self.
|
|
17
|
-
if response.nil?
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"#{response.data}")
|
|
21
|
-
exit_now! error_msg
|
|
15
|
+
def self.valid_response?(response, msg)
|
|
16
|
+
if response.nil? || response.success != true
|
|
17
|
+
p "#{msg.to_s.color(:red)}: #{response.data}\n"
|
|
18
|
+
return false
|
|
22
19
|
end
|
|
20
|
+
|
|
21
|
+
response.success
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# OBSOLETE: use valid_response?
|
|
25
|
+
def self.catch_request_error(response, msg)
|
|
26
|
+
valid_response?(response, msg)
|
|
23
27
|
end
|
|
24
28
|
end
|
data/lib/veye/github/delete.rb
CHANGED
|
@@ -2,34 +2,24 @@ require_relative '../base_executor.rb'
|
|
|
2
2
|
|
|
3
3
|
module Veye
|
|
4
4
|
module Github
|
|
5
|
+
# Delete class include methods to cleanup projects imported from Github
|
|
5
6
|
class Delete < BaseExecutor
|
|
6
|
-
|
|
7
7
|
def self.delete_repo(api_key, repo_name, options)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
:branch => options[:branch]
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
response_data = nil
|
|
16
|
-
safe_repo_key = self.encode_repo_key(repo_name)
|
|
17
|
-
github_api.resource["/#{safe_repo_key}"].delete(qparams) do |response, request, result|
|
|
18
|
-
response_data = API::JSONResponse.new(request, result, response)
|
|
19
|
-
end
|
|
20
|
-
show_result(response_data)
|
|
21
|
-
response_data
|
|
8
|
+
response = Veye::API::Github.delete_repo(
|
|
9
|
+
api_key, repo_name, options[:branch]
|
|
10
|
+
)
|
|
11
|
+
show_result(response)
|
|
22
12
|
end
|
|
23
13
|
|
|
24
14
|
def self.show_result(response)
|
|
25
|
-
|
|
26
|
-
printf("Cant delete - %s\n%s\n", response.message.color(:red),
|
|
27
|
-
response.data['error'])
|
|
28
|
-
else
|
|
15
|
+
if response.success
|
|
29
16
|
printf "Deleted\n".color(:green)
|
|
17
|
+
else
|
|
18
|
+
printf("Cant delete - %s\n%s\n",
|
|
19
|
+
response.message.color(:red),
|
|
20
|
+
response.data['error'])
|
|
30
21
|
end
|
|
31
22
|
end
|
|
32
23
|
end
|
|
33
24
|
end
|
|
34
25
|
end
|
|
35
|
-
|
data/lib/veye/github/import.rb
CHANGED
|
@@ -3,8 +3,10 @@ require_relative '../base_executor.rb'
|
|
|
3
3
|
|
|
4
4
|
module Veye
|
|
5
5
|
module Github
|
|
6
|
+
# Import class includes methods to import projects from Github
|
|
7
|
+
# and will check a state of dependencies.
|
|
6
8
|
class Import < BaseExecutor
|
|
7
|
-
|
|
9
|
+
@output_formats = {
|
|
8
10
|
'csv' => Github::InfoCSV.new,
|
|
9
11
|
'json' => Github::InfoJSON.new,
|
|
10
12
|
'pretty' => Github::InfoPretty.new,
|
|
@@ -12,21 +14,12 @@ module Veye
|
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
def self.import_repo(api_key, repo_name, options)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
repo_name = encode_repo_key(repo_name)
|
|
19
|
-
|
|
20
|
-
github_api.resource["/#{repo_name}"].post(params) do |response, request, result|
|
|
21
|
-
results = API::JSONResponse.new(request, result, response)
|
|
22
|
-
end
|
|
23
|
-
|
|
17
|
+
results = Veye::API::Github.import_repo(
|
|
18
|
+
api_key, repo_name, options[:branch], options[:file]
|
|
19
|
+
)
|
|
24
20
|
catch_request_error(results, "Can not find repository `#{repo_name}`")
|
|
25
|
-
show_results(
|
|
26
|
-
results
|
|
21
|
+
show_results(@output_formats, results.data, options, nil)
|
|
27
22
|
end
|
|
28
|
-
|
|
29
23
|
end
|
|
30
24
|
end
|
|
31
25
|
end
|
|
32
|
-
|
data/lib/veye/github/info.rb
CHANGED
|
@@ -3,8 +3,9 @@ require_relative '../base_executor.rb'
|
|
|
3
3
|
|
|
4
4
|
module Veye
|
|
5
5
|
module Github
|
|
6
|
+
# Info class includes methods to fetch the project info on VersionEye
|
|
6
7
|
class Info < BaseExecutor
|
|
7
|
-
|
|
8
|
+
@output_formats = {
|
|
8
9
|
'csv' => Github::InfoCSV.new,
|
|
9
10
|
'json' => Github::InfoJSON.new,
|
|
10
11
|
'pretty' => Github::InfoPretty.new,
|
|
@@ -12,19 +13,12 @@ module Veye
|
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
def self.get_repo(api_key, repo_name, options)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
safe_repo_name = self.encode_repo_key(repo_name)
|
|
19
|
-
|
|
20
|
-
github_api.resource["/#{safe_repo_name}"].get(qparams) do |response, request, result|
|
|
21
|
-
results = API::JSONResponse.new(request, result, response)
|
|
22
|
-
end
|
|
16
|
+
results = Veye::API::Github.get_repo(
|
|
17
|
+
api_key, repo_name, options[:branch], options[:file]
|
|
18
|
+
)
|
|
23
19
|
catch_request_error(results, "Can not find repository `#{repo_name}`")
|
|
24
|
-
show_results
|
|
20
|
+
show_results @output_formats, results.data, options
|
|
25
21
|
end
|
|
26
|
-
|
|
27
22
|
end
|
|
28
23
|
end
|
|
29
24
|
end
|
|
30
|
-
|
data/lib/veye/github/list.rb
CHANGED
|
@@ -3,9 +3,9 @@ require_relative '../base_executor.rb'
|
|
|
3
3
|
|
|
4
4
|
module Veye
|
|
5
5
|
module Github
|
|
6
|
+
# List class includes methods to see importable Github repositories
|
|
6
7
|
class List < BaseExecutor
|
|
7
|
-
|
|
8
|
-
@@output_formats = {
|
|
8
|
+
@output_formats = {
|
|
9
9
|
'csv' => Github::ListCSV.new,
|
|
10
10
|
'json' => Github::ListJSON.new,
|
|
11
11
|
'pretty' => Github::ListPretty.new,
|
|
@@ -13,25 +13,15 @@ module Veye
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
def self.get_list(api_key, options)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
end
|
|
24
|
-
params[:org_name] = options[:org] if options[:org]
|
|
25
|
-
params[:org_type] = options['org-type'] if options['org-type']
|
|
26
|
-
|
|
27
|
-
qparams = { :params => params }
|
|
28
|
-
github_api.resource.get(qparams) do |response, request, result|
|
|
29
|
-
results = API::JSONResponse.new(request, result, response)
|
|
16
|
+
results = Veye::API::Github.get_list(
|
|
17
|
+
api_key, options[:page], options[:lang],
|
|
18
|
+
options[:private], options[:org], options[:org_type]
|
|
19
|
+
)
|
|
20
|
+
if valid_response?(results, 'No repositories.')
|
|
21
|
+
paging = results.data['paging']
|
|
22
|
+
show_results(@output_formats, results.data, options, paging)
|
|
30
23
|
end
|
|
31
|
-
catch_request_error(results, "No repositories.")
|
|
32
|
-
show_results @@output_formats, results.data, options, results.data['paging']
|
|
33
24
|
end
|
|
34
25
|
end
|
|
35
26
|
end
|
|
36
27
|
end
|
|
37
|
-
|