veye 0.0.9 → 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +80 -29
  3. data/Makefile +6 -0
  4. data/README.md +12 -224
  5. data/bin/veye +13 -22
  6. data/changelogs.md +95 -0
  7. data/lib/veye/api/base_resource.rb +8 -9
  8. data/lib/veye/api/github.rb +77 -0
  9. data/lib/veye/api/json_response.rb +21 -25
  10. data/lib/veye/api/package.rb +98 -0
  11. data/lib/veye/api/project.rb +107 -0
  12. data/lib/veye/api/resource.rb +9 -8
  13. data/lib/veye/api/service.rb +15 -0
  14. data/lib/veye/api/user.rb +32 -0
  15. data/lib/veye/api.rb +22 -2
  16. data/lib/veye/base_executor.rb +13 -9
  17. data/lib/veye/github/delete.rb +10 -20
  18. data/lib/veye/github/import.rb +7 -14
  19. data/lib/veye/github/info.rb +6 -12
  20. data/lib/veye/github/list.rb +9 -19
  21. data/lib/veye/github/search.rb +9 -17
  22. data/lib/veye/github/sync.rb +9 -18
  23. data/lib/veye/github.rb +1 -1
  24. data/lib/veye/helpers/format_helpers.rb +15 -5
  25. data/lib/veye/package/follow.rb +24 -47
  26. data/lib/veye/package/info.rb +8 -25
  27. data/lib/veye/package/references.rb +9 -36
  28. data/lib/veye/package/search.rb +14 -24
  29. data/lib/veye/package.rb +14 -6
  30. data/lib/veye/pagination.rb +2 -0
  31. data/lib/veye/project/check.rb +39 -117
  32. data/lib/veye/project/license.rb +23 -0
  33. data/lib/veye/project.rb +4 -3
  34. data/lib/veye/service.rb +13 -17
  35. data/lib/veye/user/me.rb +11 -30
  36. data/lib/veye/user.rb +2 -1
  37. data/lib/veye/version.rb +1 -1
  38. data/lib/veye/views/github/info_csv.rb +3 -3
  39. data/lib/veye/views/github/info_json.rb +4 -0
  40. data/lib/veye/views/github/list_csv.rb +5 -3
  41. data/lib/veye/views/github/list_pretty.rb +2 -2
  42. data/lib/veye/views/github/list_table.rb +3 -2
  43. data/lib/veye/views/package/info_pretty.rb +1 -1
  44. data/lib/veye/views/package/search_csv.rb +2 -3
  45. data/lib/veye/views/package/search_table.rb +1 -3
  46. data/lib/veye/views/package.rb +1 -1
  47. data/lib/veye/views/project/licence_csv.rb +3 -3
  48. data/lib/veye/views/project/licence_json.rb +1 -1
  49. data/lib/veye/views/project/licence_pretty.rb +1 -1
  50. data/lib/veye/views/project/licence_table.rb +3 -3
  51. data/lib/veye/views/user/profile_table.rb +4 -1
  52. data/lib/veye/views/user.rb +3 -1
  53. data/lib/veye.rb +29 -61
  54. data/test/api/github_test.rb +84 -0
  55. data/test/api/package_test.rb +80 -0
  56. data/test/api/project_test.rb +118 -0
  57. data/test/api/service_test.rb +15 -0
  58. data/test/api/user_test.rb +30 -0
  59. data/test/fixtures/vcr_cassettes/github_delete.yml +48 -0
  60. data/test/fixtures/vcr_cassettes/github_import.yml +53 -0
  61. data/test/fixtures/vcr_cassettes/github_info.yml +49 -0
  62. data/test/fixtures/vcr_cassettes/github_list.yml +80 -0
  63. data/test/fixtures/vcr_cassettes/github_sync.yml +48 -0
  64. data/test/fixtures/vcr_cassettes/package_follow.yml +52 -0
  65. data/test/fixtures/vcr_cassettes/package_follow_status.yml +48 -0
  66. data/test/fixtures/vcr_cassettes/package_info.yml +56 -0
  67. data/test/fixtures/vcr_cassettes/package_reference.yml +46 -0
  68. data/test/fixtures/vcr_cassettes/package_search.yml +46 -0
  69. data/test/fixtures/vcr_cassettes/package_unfollow.yml +48 -0
  70. data/test/fixtures/vcr_cassettes/project_delete.yml +48 -0
  71. data/test/fixtures/vcr_cassettes/project_get.yml +49 -0
  72. data/test/fixtures/vcr_cassettes/project_license.yml +49 -0
  73. data/test/fixtures/vcr_cassettes/project_list.yml +48 -0
  74. data/test/fixtures/vcr_cassettes/project_update.yml +105 -0
  75. data/test/fixtures/vcr_cassettes/project_upload.yml +104 -0
  76. data/test/fixtures/vcr_cassettes/services_ping.yml +46 -0
  77. data/test/fixtures/vcr_cassettes/user_get_favorites.yml +48 -0
  78. data/test/fixtures/vcr_cassettes/user_get_profile.yml +48 -0
  79. data/test/github_delete_test.rb +31 -0
  80. data/test/github_import_test.rb +94 -0
  81. data/test/github_info_test.rb +73 -0
  82. data/test/github_list_test.rb +84 -0
  83. data/test/github_sync_test.rb +20 -0
  84. data/test/package_follow_test.rb +38 -0
  85. data/test/package_info_test.rb +73 -0
  86. data/test/package_reference_test.rb +67 -0
  87. data/test/package_search_test.rb +66 -0
  88. data/test/project_check_test.rb +326 -0
  89. data/test/project_license_test.rb +72 -0
  90. data/test/service_test.rb +29 -0
  91. data/test/test_helper.rb +29 -4
  92. data/test/user_me_test.rb +126 -0
  93. data/veye.gemspec +45 -0
  94. metadata +163 -37
  95. data/DEPENDENCIES.md +0 -25
  96. data/lib/veye/helpers/repo_helpers.rb +0 -5
  97. data/lib/veye/project/licence.rb +0 -38
  98. data/test/default_test.rb +0 -14
@@ -3,32 +3,24 @@ require_relative '../base_executor.rb'
3
3
 
4
4
  module Veye
5
5
  module Github
6
+ # Search - find projects on Github
6
7
  class Search < BaseExecutor
7
- @@output_formats = {
8
+ @output_formats = {
8
9
  'csv' => Github::SearchCSV.new,
9
10
  'json' => Github::SearchJSON.new,
10
11
  'pretty' => Github::SearchPretty.new,
11
12
  'table' => Github::SearchTable.new
12
13
  }
13
14
 
15
+ # TODO: add missing tests + API call test
14
16
  def self.search(api_key, search_term, options)
15
- github_api = API::Resource.new(RESOURCE_PATH)
16
- results = nil
17
- params = {api_key: api_key, q: search_term}
18
- params[:langs] = options[:lang] unless options[:lang].nil?
19
- params[:users] = options[:user] unless options[:user].nil?
20
- params[:page] = options[:page] || "1"
21
- qparams = {params: params}
22
-
23
- github_api.resource["/search"].get(qparams) do |response, request, result|
24
- results = API::JSONResponse.new(request, result, response)
25
- end
26
-
27
- catch_request_error(results, "No match")
28
- show_results(@@output_formats, results.data, options, results.data['paging'])
29
- results
17
+ results = Veye::API::Github.search(
18
+ api_key, search_term, options[:lang], options[:user], options[:page]
19
+ )
20
+ catch_request_error(results, 'No match')
21
+ paging_dt = results.data['paging']
22
+ show_results(@output_formats, results.data, options, paging_dt)
30
23
  end
31
24
  end
32
25
  end
33
26
  end
34
-
@@ -2,30 +2,21 @@ require_relative '../base_executor.rb'
2
2
 
3
3
  module Veye
4
4
  module Github
5
+ # Sync class is responsible for updating info on VersionEye
5
6
  class Sync < BaseExecutor
6
7
  def self.import_all(api_key, options)
7
- github_api = API::Resource.new(RESOURCE_PATH)
8
- response_data = nil
9
- params = {api_key: api_key}
10
- params[:force] = options[:force] unless options[:force].nil?
11
-
12
- qparams = {params: params}
13
- github_api.resource['/sync'].get(qparams) do |response, request, result|
14
- response_data = API::JSONResponse.new(request, result, response)
15
- end
16
-
17
- catch_request_error(response_data, "Can not import repositories from Github")
18
- show_result(response_data)
19
- return response_data
8
+ response = Veye::API::Github.import_all(api_key, options[:force])
9
+ catch_request_error(response, 'Can not import repositories from Github')
10
+ show_result(response)
20
11
  end
21
12
 
22
13
  def self.show_result(response)
23
- unless response.data["changed"]
24
- printf("%s - %s\n",
25
- "No changes.".color(:red),
26
- "Use `force` flag if you want to reload everything.")
27
- else
14
+ if response.data['changed']
28
15
  printf "Imported. #{response.data['msg']}\n".color(:green)
16
+ else
17
+ printf("%s - %s\n",
18
+ 'No changes.'.color(:red),
19
+ 'Use `force` flag if you want to reload everything.')
29
20
  end
30
21
  end
31
22
  end
data/lib/veye/github.rb CHANGED
@@ -8,7 +8,7 @@ require_relative 'github/delete.rb'
8
8
  require_relative 'views/github.rb'
9
9
 
10
10
  module Veye
11
+ # commands for the Github API on VersionEye
11
12
  module Github
12
- RESOURCE_PATH = "/github"
13
13
  end
14
14
  end
@@ -1,16 +1,26 @@
1
1
  require 'rainbow/ext/string'
2
2
 
3
+ # FormatHelpers module includes common helper functions
4
+ # for output rendering.
3
5
  module FormatHelpers
4
6
  def supported_format?(output_formats, format)
7
+ formats_attached?(output_formats) && format_exists?(output_formats, format)
8
+ end
9
+
10
+ def formats_attached?(output_formats)
5
11
  if output_formats.nil?
6
- exit_now! "Executor doesnt have any formattor defined."
12
+ p 'Executor doesnt have any formattor defined.'.color(:red)
7
13
  end
8
- unless output_formats.has_key?(format)
9
- msg = "This command doesnt support output format: `#{format}`\n".color(:red)
14
+ !output_formats.nil?
15
+ end
16
+
17
+ def format_exists?(output_formats, format)
18
+ unless output_formats.key?(format)
19
+ msg = "Unsupported output format: `#{format}`\n".color(:red)
10
20
  msg += "Supported formats: #{output_formats.keys.join(', ')}\n"
11
- exit_now! msg
21
+ p msg
22
+ return false
12
23
  end
13
24
  true
14
25
  end
15
-
16
26
  end
@@ -2,63 +2,40 @@ require_relative '../base_executor.rb'
2
2
 
3
3
  module Veye
4
4
  module Package
5
+ # Manage a following status of the software library
5
6
  class Follow < BaseExecutor
6
- def self.parse_prod_key(prod_key)
7
- tokens = prod_key.to_s.split('/')
8
- lang = Package.encode_language(tokens.first)
9
- safe_prod_key = Package.encode_prod_key(tokens.drop(1).join("/"))
10
- [lang, safe_prod_key]
7
+ def self.show_result(response)
8
+ result = response.data
9
+ return if result.nil?
10
+ printf(
11
+ "Following `%s`: %s\n",
12
+ result['prod_key'],
13
+ result['follows'].to_s.color(:green)
14
+ )
11
15
  end
12
16
 
13
- def self.get_follow_status(prod_key, api_key)
14
- product_api = API::Resource.new(RESOURCE_PATH)
15
- results = nil
16
- qparams = {:params => {:api_key => api_key}}
17
- lang, safe_prod_key = parse_prod_key(prod_key)
18
- product_api.resource[
19
- "#{lang}/#{safe_prod_key}/follow.json"].get(qparams) do |response, request, result|
20
-
21
- results = API::JSONResponse.new(request, result, response)
17
+ def self.get_follow_status(package_key, api_key)
18
+ prod_key, lang = Package.parse_key(package_key)
19
+ results = Veye::API::Package.get_follow_status(api_key, prod_key, lang)
20
+ if valid_response?(results, 'Didnt get any response.')
21
+ show_result(results)
22
22
  end
23
-
24
- catch_request_error(results, "Didnt get any response.")
25
- show_result(results)
26
- results
27
23
  end
28
24
 
29
- def self.follow(prod_key, api_key)
30
- product_api = API::Resource.new(RESOURCE_PATH)
31
- results = nil
32
- qparams = {:api_key => api_key}
33
- lang, safe_prod_key = parse_prod_key(prod_key)
34
- product_api.resource[
35
- "/#{lang}/#{safe_prod_key}/follow.json"].post(qparams) do |response, request, result|
36
- results = API::JSONResponse.new(request, result, response)
25
+ def self.follow(package_key, api_key)
26
+ prod_key, lang = Package.parse_key(package_key)
27
+ results = Veye::API::Package.follow(api_key, prod_key, lang)
28
+ if valid_response?(results, 'Cant follow.')
29
+ show_result(results)
37
30
  end
38
- catch_request_error(results, "Cant follow.")
39
- show_result(results)
40
- results
41
31
  end
42
32
 
43
- def self.unfollow(prod_key, api_key)
44
- product_api = API::Resource.new(RESOURCE_PATH)
45
- results = nil
46
- qparams = {:params => {:api_key => api_key}}
47
- lang, safe_prod_key = parse_prod_key(prod_key)
48
- product_api.resource[
49
- "/#{lang}/#{safe_prod_key}/follow.json"].delete(qparams) do |response, request, result|
50
- results = API::JSONResponse.new(request, result, response)
33
+ def self.unfollow(package_key, api_key)
34
+ prod_key, lang = Package.parse_key(package_key)
35
+ results = Veye::API::Package.unfollow(api_key, prod_key, lang)
36
+ if valid_response?(results, 'Cant unfollow.')
37
+ show_result(results)
51
38
  end
52
-
53
- catch_request_error(results, "Cant unfollow.")
54
- show_result(results)
55
- results
56
- end
57
-
58
- def self.show_result(response)
59
- result = response.data
60
- return if result.nil?
61
- printf "Following `#{result['prod_key']}`: #{result['follows']}\n".color(:green)
62
39
  end
63
40
  end
64
41
  end
@@ -3,8 +3,9 @@ require_relative '../base_executor.rb'
3
3
 
4
4
  module Veye
5
5
  module Package
6
+ # View an detailed information of the package.
6
7
  class Info < BaseExecutor
7
- @@output_formats = {
8
+ @output_formats = {
8
9
  'csv' => Package::InfoCSV.new,
9
10
  'json' => Package::InfoJSON.new,
10
11
  'pretty' => Package::InfoPretty.new,
@@ -12,32 +13,14 @@ module Veye
12
13
  }
13
14
 
14
15
  def self.get_package(package_key, options = {})
15
- product_api = API::Resource.new(RESOURCE_PATH)
16
- tokens = package_key.to_s.split('/')
17
- lang = Package.encode_language(tokens.first)
18
- safe_prod_key = Package.encode_prod_key(tokens.drop(1).join("/"))
19
- results = nil
20
-
21
- if lang.nil? or safe_prod_key.nil?
22
- msg = %Q[
23
- You missed language or product key.
24
- Example: clojure/ztellman/aleph, which as required structure <prog lang>/<product_code>
25
- ]
26
- error_msg = sprintf("%s. \n%s",
27
- "Error: Malformed key.".color(:red),
28
- msg)
29
- exit_now!(error_msg)
30
- end
31
-
32
- product_api.resource["/#{lang}/#{safe_prod_key}"].get do |response, request, result, &block|
33
- results = API::JSONResponse.new(request, result, response)
16
+ prod_key, lang = Package.parse_key(package_key)
17
+ results = Veye::API::Package.get_package(prod_key, lang)
18
+ err_msg = "Didnt find any package with product_key: `#{package_key}`"
19
+ if valid_response?(results, err_msg)
20
+ paging = results.data['paging']
21
+ show_results(@output_formats, results.data, options, paging)
34
22
  end
35
-
36
- catch_request_error(results, "Didnt find any package with product_key: `#{package_key}`")
37
- show_results(@@output_formats, results.data, options, results.data['paging'])
38
- return results
39
23
  end
40
24
  end
41
-
42
25
  end
43
26
  end
@@ -3,52 +3,25 @@ require_relative '../base_executor.rb'
3
3
 
4
4
  module Veye
5
5
  module Package
6
+ # Commands to view package references
6
7
  class References < BaseExecutor
7
- @@output_formats = {
8
+ @output_formats = {
8
9
  'csv' => Package::ReferencesCSV.new,
9
10
  'json' => Package::ReferencesJSON.new,
10
11
  'pretty' => Package::ReferencesPretty.new,
11
12
  'table' => Package::ReferencesTable.new
12
13
  }
13
14
 
14
- def self.validate_input!(lang, safe_prod_key)
15
- if lang.nil? or safe_prod_key.nil?
16
- msg = %Q[
17
- You missed language or product key.
18
- Example: clojure/ztellman/aleph, which as required structure
19
- <prog lang>/<product_code>
20
- ]
21
- error_msg = sprintf("%s. \n%s",
22
- "Error: Malformed key.".color(:red),
23
- msg)
24
- exit_now!(error_msg)
25
- end
26
- end
27
-
28
15
  def self.get_references(package_key, options = {})
29
- product_api = API::Resource.new(RESOURCE_PATH)
30
-
31
- tokens = package_key.to_s.split('/')
32
- lang = Package.encode_language(tokens.first).capitalize #endpoint bug
33
-
34
- safe_prod_key = Package.encode_prod_key(tokens.drop(1).join("/"))
35
- validate_input!(lang, safe_prod_key)
36
-
37
- api_path = "/#{lang}/#{safe_prod_key}/references"
38
- page_nr = options[:page] || "1"
39
- qparams = {params: {page: page_nr}}
40
- results = nil
41
-
42
- product_api.resource[api_path].get(qparams) do |response, request, result, &block|
43
- results = API::JSONResponse.new(request, result, response)
16
+ prod_key, lang = Package.parse_key(package_key)
17
+ results = Veye::API::Package.get_references(
18
+ prod_key, lang, options[:page]
19
+ )
20
+ if valid_response?(results, "No references for: `#{package_key}`")
21
+ paging = results.data['paging']
22
+ show_results(@output_formats, results.data, options, paging)
44
23
  end
45
-
46
- catch_request_error(results, "No references for: `#{package_key}`")
47
- show_results(@@output_formats, results.data, options, results.data['paging'])
48
- return results
49
-
50
24
  end
51
25
  end
52
26
  end
53
27
  end
54
-
@@ -3,36 +3,26 @@ require_relative '../base_executor.rb'
3
3
 
4
4
  module Veye
5
5
  module Package
6
+ # This class includes commands for Package search and
7
+ # presentation renderers.
6
8
  class Search < BaseExecutor
7
- @@output_formats = {
8
- 'csv' => Package::SearchCSV.new,
9
- 'json' => Package::SearchJSON.new,
10
- 'pretty' => Package::SearchPretty.new,
11
- 'table' => Package::SearchTable.new
9
+ @output_formats = {
10
+ 'csv' => Package::SearchCSV.new,
11
+ 'json' => Package::SearchJSON.new,
12
+ 'pretty' => Package::SearchPretty.new,
13
+ 'table' => Package::SearchTable.new
12
14
  }
13
15
 
14
16
  def self.search(search_term, options)
15
- search_api = Veye::API::Resource.new "#{RESOURCE_PATH}/search"
16
- language = options[:language]
17
- group_id = options["group-id"]
18
- page = options[:page] || "1"
19
- results = nil
20
- search_params = {:q => search_term.to_s}
21
-
22
- search_params[:lang] = Package.encode_language(language) unless language.nil?
23
- search_params[:g] = group_id unless group_id.nil?
24
- search_params[:page] = page unless page.nil?
25
-
26
- request_params = {:params => search_params}
27
- search_api.resource["/#{search_term}"].get(request_params) do |response, request, result, &block|
28
- results = API::JSONResponse.new(request, result, response)
17
+ results = Veye::API::Package.search(
18
+ search_term, options[:language], options['group-id'], options[:page]
19
+ )
20
+ if valid_response?(results, "No results for `#{search_term}`")
21
+ show_results(@output_formats,
22
+ results.data, options,
23
+ results.data['paging'])
29
24
  end
30
-
31
- catch_request_error(results, "No results for `${search_term}`")
32
- show_results(@@output_formats, results.data, options, results.data['paging'])
33
- return results
34
25
  end
35
26
  end
36
-
37
27
  end
38
28
  end
data/lib/veye/package.rb CHANGED
@@ -12,13 +12,21 @@ module Veye
12
12
  Set.new ["Clojure", "Java", "Javascript", "Node.JS", "PHP", "Python", "Ruby", "R"]
13
13
  end
14
14
 
15
- def self.encode_prod_key(prod_key)
16
- prod_key = prod_key.to_s
17
- prod_key.gsub(/\//, ":").gsub(/\./, "~")
18
- end
15
+ def self.parse_key(package_key)
16
+ tokens = package_key.to_s.split('/')
17
+ lang = tokens.first
18
+ prod_key = tokens.drop(1).join("/")
19
+
20
+ if lang.nil? or prod_key.nil?
21
+ msg = %Q[
22
+ You missed language or product key.
23
+ Example: clojure/ztellman/aleph, as structured <prog lang>/<product_code>
24
+ ]
25
+ printf("%s. \n%s", "Error: Malformed key.".color(:red), msg)
26
+ exit
27
+ end
19
28
 
20
- def self.encode_language(lang)
21
- lang.gsub(/\./, "").downcase
29
+ [prod_key, lang]
22
30
  end
23
31
  end
24
32
  end
@@ -1,6 +1,8 @@
1
1
  require_relative 'pagination/show.rb'
2
2
 
3
3
  module Veye
4
+ # Pagination module includes rendering methods to render
5
+ # pagination information
4
6
  module Pagination
5
7
  #add module constants here
6
8
  end
@@ -3,146 +3,69 @@ require_relative '../base_executor.rb'
3
3
 
4
4
  module Veye
5
5
  module Project
6
+ # Check class includes methods to check and upload project files
6
7
  class Check < BaseExecutor
7
8
  extend FormatHelpers
8
9
 
9
- @@output_formats = {
10
- "csv" => Project::InfoCSV.new,
11
- "json" => Project::InfoJSON.new,
12
- "pretty" => Project::InfoPretty.new,
13
- "table" => Project::InfoTable.new,
14
- "md" => Project::InfoMarkdown.new
10
+ @output_formats = {
11
+ 'csv' => Project::InfoCSV.new,
12
+ 'json' => Project::InfoJSON.new,
13
+ 'pretty' => Project::InfoPretty.new,
14
+ 'table' => Project::InfoTable.new,
15
+ 'md' => Project::InfoMarkdown.new
15
16
  }
16
17
 
17
- @@dependency_output_formats = {
18
- "csv" => Project::DependencyCSV.new,
19
- "json" => Project::DependencyJSON.new,
20
- "pretty" => Project::DependencyPretty.new,
21
- "table" => Project::DependencyTable.new,
22
- "md" => Project::DependencyMarkdown.new
18
+ @dependency_output_formats = {
19
+ 'csv' => Project::DependencyCSV.new,
20
+ 'json' => Project::DependencyJSON.new,
21
+ 'pretty' => Project::DependencyPretty.new,
22
+ 'table' => Project::DependencyTable.new,
23
+ 'md' => Project::DependencyMarkdown.new
23
24
  }
24
25
 
25
26
  def self.get_list(api_key, options)
26
- project_api = API::Resource.new(RESOURCE_PATH)
27
- qparams = {:params => {:api_key => api_key}}
28
- results = nil
29
- project_api.resource.get(qparams) do |response, request, result|
30
- results = API::JSONResponse.new(request, result, response)
31
- end
32
-
33
- catch_request_error(results, "Can not read list of projects.")
34
- show_results(@@output_formats, results.data, options)
35
- results
27
+ results = Veye::API::Project.get_list(api_key)
28
+ catch_request_error(results, 'Can not read list of projects.')
29
+ show_results(@output_formats, results.data, options)
36
30
  end
37
31
 
38
32
  def self.upload(filename, api_key, options)
39
- results = {:success => false}
40
- file_path = File.absolute_path(filename)
41
-
42
- unless File.exists?(file_path)
43
- error_msg = sprintf("%s: Cant read file `%s`",
44
- "Error".color(:red),
45
- "#{filename}".color(:yellow))
46
- exit_now!(error_msg)
47
- end
48
-
49
- file_size = File.size(file_path)
50
- unless file_size != 0 and file_size < MAX_FILE_SIZE
51
- exit_now!("Size of file is not acceptable: 0kb < x <= #{MAX_FILE_SIZE/1000}kb")
52
- end
53
-
54
- project_api = API::Resource.new(RESOURCE_PATH)
55
- puts "built new project_api successfully"
56
-
57
- file_obj = File.open(file_path, 'rb')
58
-
59
- upload_data = {
60
- :upload => file_obj,
61
- :api_key => api_key
62
- }
63
- project_api.resource.post(upload_data) do |response, request, result, &block|
64
- results = API::JSONResponse.new(request, result, response)
65
- end
66
-
67
- catch_request_error(results, "Upload failed.")
68
- show_results(@@output_formats, results.data, options)
33
+ results = Veye::API::Project.upload(api_key, filename)
34
+ catch_request_error(results, 'Upload failed.')
35
+ show_results(@output_formats, results.data, options)
69
36
  show_dependencies(results.data, options)
70
- results
71
37
  end
72
38
 
73
39
  def self.update(project_key, filename, api_key, options)
74
- results = {:success => false}
75
- file_path = File.absolute_path(filename)
76
-
77
- unless File.exists?(file_path)
78
- error_msg = sprintf("%s: Cant read file `%s`",
79
- "Error".color(:red),
80
- "#{filename}".color(:yellow)
81
- )
82
- exit_now!(error_msg)
83
- end
84
-
85
- file_size = File.size(file_path)
86
- unless file_size != 0 and file_size < MAX_FILE_SIZE
87
- exit_now!(" The size of file is not acceptable: 0kb < x <= #{MAX_FILE_SIZE/1000}kb")
88
- end
89
-
90
- project_api = API::Resource.new("#{RESOURCE_PATH}/#{project_key}")
91
- file_obj = File.open(file_path, 'rb')
92
- upload_data = {
93
- :project_file => file_obj,
94
- :api_key => api_key
95
- }
96
- project_api.resource.post(upload_data) do |response, request, result, &block|
97
- results = API::JSONResponse.new(request, result, response)
98
- end
99
- catch_request_error(results, "Re-upload failed.")
100
- show_results(@@output_formats, results.data, options)
40
+ results = Veye::API::Project.update(api_key, project_key, filename)
41
+ catch_request_error(results, 'Re-upload failed.')
42
+ show_results(@output_formats, results.data, options)
101
43
  show_dependencies(results.data, options)
102
- results
103
44
  end
104
- def self.get_project(project_key, api_key, options)
105
- results = nil
106
- project_api = API::Resource.new(RESOURCE_PATH)
107
-
108
- if project_key.nil? or project_key.empty?
109
- error_msg = sprintf("%s: %s",
110
- "Error".color(:red),
111
- "Not valid project_key: `#{project_key}`")
112
- exit_now! error_msg
113
- end
114
-
115
- project_url = "/#{project_key}"
116
- qparams = {:params => {:api_key => api_key}}
117
- project_api.resource[project_url].get(qparams) do |response, request, result|
118
- results = API::JSONResponse.new(request, result, response)
119
- end
120
45
 
121
- catch_request_error(results, "Cant read information about project: `#{project_key}`")
122
- show_results(@@output_formats, results.data, options)
46
+ def self.get_project(project_key, api_key, options)
47
+ results = Veye::API::Project.get_project(api_key, project_key)
48
+ err_msg = "No data for the project: `#{project_key}`"
49
+ catch_request_error(results, err_msg)
50
+ show_results(@output_formats, results.data, options)
123
51
  show_dependencies(results.data, options)
124
- results
125
52
  end
126
53
 
127
54
  def self.delete_project(project_key, api_key)
128
- project_api = Veye::API::Resource.new(RESOURCE_PATH)
129
- qparams = {:params => {:api_key => api_key}}
130
- results = nil
131
-
132
- project_api.resource["/#{project_key}"].delete(qparams) do |response, request, result|
133
- results = API::JSONResponse.new(request, result, response)
134
- end
135
- catch_request_error(results, "Cant delete project: `#{project_key}`")
136
- show_message(results, "Deleted", "Cant delete.")
137
- results
55
+ results = Veye::API::Project.delete_project(api_key, project_key)
56
+ err_msg = "Failed to delete project: `#{project_key}`"
57
+ catch_request_error(results, err_msg)
58
+ show_message(results, 'Deleted', 'Cant delete.')
138
59
  end
139
60
 
61
+ #-- layout helpers
140
62
  def self.show_dependencies(results, options)
141
63
  format = options[:format]
64
+ format ||= 'pretty'
142
65
  return if format == 'json'
143
- self.supported_format?(@@dependency_output_formats, format)
66
+ self.supported_format?(@dependency_output_formats, format)
144
67
 
145
- formatter = @@dependency_output_formats[format]
68
+ formatter = @dependency_output_formats[format]
146
69
 
147
70
  formatter.before
148
71
  formatter.format results['dependencies']
@@ -150,15 +73,14 @@ module Veye
150
73
  end
151
74
 
152
75
  def self.show_message(results, success_msg, fail_msg)
153
- unless results.success
76
+ if results.success
77
+ printf "#{success_msg}\n".color(:green)
78
+ else
154
79
  printf("Error: %s\n%s\n",
155
- fail_message.color(:red),
80
+ fail_msg.color(:red),
156
81
  response.data['error'])
157
- else
158
- printf "#{success_msg}\n".color(:green)
159
82
  end
160
83
  end
161
84
  end
162
85
  end
163
86
  end
164
-
@@ -0,0 +1,23 @@
1
+ require_relative '../views/project.rb'
2
+ require_relative '../base_executor.rb'
3
+
4
+ module Veye
5
+ module Project
6
+ # Licence class holds commands for checking licenses in the project.
7
+ class License < BaseExecutor
8
+ @output_formats = {
9
+ 'csv' => Project::LicenceCSV.new,
10
+ 'json' => Project::LicenceJSON.new,
11
+ 'pretty' => Project::LicencePretty.new,
12
+ 'table' => Project::LicenceTable.new
13
+ }
14
+
15
+ def self.get_licenses(project_key, api_key, options)
16
+ results = Veye::API::Project.get_licenses(api_key, project_key)
17
+ err_msg = "Cant access a information for project `#{project_key}`."
18
+ catch_request_error(results, err_msg)
19
+ show_results(@output_formats, results.data, options)
20
+ end
21
+ end
22
+ end
23
+ end
data/lib/veye/project.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  require_relative 'project/check.rb'
2
- require_relative 'project/licence.rb'
2
+ require_relative 'project/license.rb'
3
3
 
4
4
  module Veye
5
+ # Project module includes commands for managing
6
+ # projects on VersionEye and presenting results
7
+ # on command line.
5
8
  module Project
6
- RESOURCE_PATH = "/projects"
7
- MAX_FILE_SIZE = 500000 # ~ 500kB
8
9
  end
9
10
  end