veye 0.0.9 → 0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|