veye 0.0.2

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.
Files changed (63) hide show
  1. checksums.yaml +15 -0
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +51 -0
  4. data/README.md +271 -0
  5. data/README.rdoc +6 -0
  6. data/Rakefile +44 -0
  7. data/bin/veye +390 -0
  8. data/lib/veye/api/base_resource.rb +29 -0
  9. data/lib/veye/api/json_response.rb +56 -0
  10. data/lib/veye/api/resource.rb +22 -0
  11. data/lib/veye/api.rb +3 -0
  12. data/lib/veye/package/follow.rb +50 -0
  13. data/lib/veye/package/info.rb +50 -0
  14. data/lib/veye/package/info_csv.rb +18 -0
  15. data/lib/veye/package/info_json.rb +14 -0
  16. data/lib/veye/package/info_pretty.rb +27 -0
  17. data/lib/veye/package/info_table.rb +29 -0
  18. data/lib/veye/package/search.rb +46 -0
  19. data/lib/veye/package/search_csv.rb +33 -0
  20. data/lib/veye/package/search_json.rb +19 -0
  21. data/lib/veye/package/search_pretty.rb +35 -0
  22. data/lib/veye/package/search_table.rb +40 -0
  23. data/lib/veye/package.rb +23 -0
  24. data/lib/veye/pagination/pagination_csv.rb +17 -0
  25. data/lib/veye/pagination/pagination_json.rb +12 -0
  26. data/lib/veye/pagination/pagination_pretty.rb +22 -0
  27. data/lib/veye/pagination/pagination_table.rb +22 -0
  28. data/lib/veye/pagination/show.rb +26 -0
  29. data/lib/veye/pagination.rb +7 -0
  30. data/lib/veye/project/check.rb +147 -0
  31. data/lib/veye/project/licence.rb +48 -0
  32. data/lib/veye/project/project_csv.rb +28 -0
  33. data/lib/veye/project/project_dependency_csv.rb +25 -0
  34. data/lib/veye/project/project_dependency_json.rb +12 -0
  35. data/lib/veye/project/project_dependency_pretty.rb +30 -0
  36. data/lib/veye/project/project_dependency_table.rb +27 -0
  37. data/lib/veye/project/project_json.rb +13 -0
  38. data/lib/veye/project/project_licence_csv.rb +19 -0
  39. data/lib/veye/project/project_licence_json.rb +12 -0
  40. data/lib/veye/project/project_licence_pretty.rb +23 -0
  41. data/lib/veye/project/project_licence_table.rb +29 -0
  42. data/lib/veye/project/project_pretty.rb +28 -0
  43. data/lib/veye/project/project_table.rb +30 -0
  44. data/lib/veye/project.rb +11 -0
  45. data/lib/veye/service.rb +14 -0
  46. data/lib/veye/user/favorite_csv.rb +28 -0
  47. data/lib/veye/user/favorite_json.rb +14 -0
  48. data/lib/veye/user/favorite_pretty.rb +25 -0
  49. data/lib/veye/user/favorite_table.rb +28 -0
  50. data/lib/veye/user/me.rb +75 -0
  51. data/lib/veye/user/profile_csv.rb +21 -0
  52. data/lib/veye/user/profile_json.rb +14 -0
  53. data/lib/veye/user/profile_pretty.rb +31 -0
  54. data/lib/veye/user/profile_table.rb +34 -0
  55. data/lib/veye/user.rb +7 -0
  56. data/lib/veye/version.rb +13 -0
  57. data/lib/veye.rb +82 -0
  58. data/test/default_test.rb +14 -0
  59. data/test/files/Gemfile +20 -0
  60. data/test/files/maven-1.0.1.pom +128 -0
  61. data/test/test_helper.rb +9 -0
  62. data/veye.rdoc +5 -0
  63. metadata +229 -0
data/bin/veye ADDED
@@ -0,0 +1,390 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gli'
4
+ require 'rest_client'
5
+ require 'json'
6
+ require 'rainbow'
7
+
8
+ require 'veye'
9
+
10
+ include GLI::App
11
+
12
+ program_desc 'VersionEye commandline tool'
13
+ program_long_desc Veye::BIGEYE.foreground(:green)
14
+
15
+ wrap_help_text :verbatim
16
+ version Veye::VERSION
17
+
18
+ config_file '.veye.rc'
19
+
20
+ desc 'set api key'
21
+ flag :api_key, :default_value => "<add your api key here>"
22
+
23
+ desc 'set server url'
24
+ flag :server, :default_value => "www.versioneye.com"
25
+
26
+ desc 'set service port'
27
+ flag :port, :default_value => "80"
28
+
29
+ desc 'set service path'
30
+ flag :path, :default_value => "api/v2"
31
+
32
+ desc 'set connection protocol'
33
+ flag :protocol, :default_value => "http"
34
+
35
+ desc "don't use colors"
36
+ switch 'color', :default_value => true, :negetable => true
37
+
38
+ pre do |global_options, options, args|
39
+ $global_options = init_environment #global_options
40
+ $global_options.merge!(global_options)
41
+ check_configs($global_options)
42
+ $global_options[:url] = Veye::API::Resource.build_url($global_options)
43
+ end
44
+
45
+ desc 'check service status'
46
+ command :ping do |c|
47
+ c.action do |global_options, options, args|
48
+ respond = Veye::Service.ping()
49
+ if respond.success
50
+ puts "#{respond.data['message']}".foreground(:green)
51
+ else
52
+ printf(
53
+ "VersionEye didnt recognized secret word.Answered %s, %s\n",
54
+ respond.code.to_s.foreground(:red),
55
+ "#{respond.message}".foreground(:yellow)
56
+ )
57
+ end
58
+ end
59
+ end
60
+
61
+ desc 'Search packages on VersionEye.'
62
+ arg_name 'search_term'
63
+ command :search do |c|
64
+ c.desc 'filter results by language'
65
+ c.flag [:l, :language, 'language-name']
66
+
67
+ c.desc 'filter result by Manven specific GroupId'
68
+ c.flag "group-id"
69
+
70
+ c.desc "get next N results, by default it only return 30 results."
71
+ c.flag [:page, 'page-number']
72
+
73
+ c.desc "change output format"
74
+ c.flag [:format,'format-name'], :default_value => "pretty"
75
+
76
+ c.desc "show paging information"
77
+ c.switch [:pagination, 'show-pagination'], :default_value => true,
78
+ :negatable => true
79
+
80
+ c.action do |global_options, options, args|
81
+ help_now!("the search term is mandatory.".foreground(:red)) if args.empty?
82
+ search_term = args.shift
83
+ response = Veye::Package::Search.search(search_term,
84
+ options[:language],
85
+ options["group-id"],
86
+ options[:page])
87
+
88
+ if response.success == false or response.data["results"].empty?
89
+ error_msg = sprintf(
90
+ "No results for `%s` %s",
91
+ "#{search_term}".foreground(:yellow),
92
+ (options[:language].nil?)? "" : " for language: #{options[:language]}"
93
+ )
94
+ exit_now!(error_msg)
95
+ end
96
+
97
+ Veye::Package::Search.format(response.data["results"], options[:format])
98
+ if options[:pagination]
99
+ printf("\n#-- pagination data ------------------\n")
100
+ Veye::Pagination::Show.format response.data['paging'], options[:format]
101
+ end
102
+
103
+ end
104
+ end
105
+
106
+ desc 'returns package information'
107
+ arg_name 'product_key'
108
+ command :info do |c|
109
+ c.desc "change output format"
110
+ c.flag [:format, 'format-name'], :default_value => 'pretty'
111
+
112
+ c.action do |global_options, options, args|
113
+ help_now!("package_key is missing".foreground(:red)) if args.empty?
114
+ package_key = args.shift
115
+ response = Veye::Package::Info.search(package_key)
116
+
117
+ unless response.success
118
+ error_msg = sprintf(
119
+ "Didnt find any package with product_key: `%s`",
120
+ "#{package_key}".foreground(:yellow)
121
+ )
122
+ exit_now!(error_msg)
123
+ end
124
+
125
+ Veye::Package::Info.format(response.data, options[:format])
126
+ end
127
+ end
128
+
129
+ desc 'analyzes given project file and returns version info'
130
+ arg_name 'product_file'
131
+
132
+ command :check do |c|
133
+ c.desc "change output format"
134
+ c.flag [:format, 'format-name'], :default_value => 'pretty'
135
+
136
+ c.action do |global_options, options, args|
137
+ help_now!("File of project is unspecified.".foreground(:red)) if args.empty?
138
+ file_name = args.shift
139
+ response = Veye::Project::Check.upload(file_name, global_options[:api_key])
140
+ if response.success == false
141
+ exit_now!("File upload failed.\n #{response.message}\n".foreground(:red))
142
+ end
143
+
144
+ if response.success
145
+ Veye::Project::Check.format_dependencies(
146
+ response.data['dependencies'],
147
+ options[:format]
148
+ )
149
+ else
150
+ exit_now!("Didnt get dependency info from API: #{response.message}")
151
+ end
152
+ end
153
+ end
154
+
155
+
156
+ desc 'manage your projects'
157
+ arg_name 'subcommand'
158
+ command :projects do |c|
159
+ c.desc "change output format"
160
+ c.flag [:format, 'format-name'], :default_value => 'pretty'
161
+
162
+ c.desc "show all projects"
163
+ c.command :list do |list|
164
+ list.action do |global_options, options, args|
165
+ api_key = global_options[:api_key]
166
+ response = Veye::Project::Check.get_list(api_key)
167
+
168
+ if response.success == false
169
+ error_msg = "Didnt get list of projects: \n #{response.message.foreground(:red)}"
170
+ exit_now!(error_msg)
171
+ end
172
+
173
+ Veye::Project::Check.format(response.data, options[:format])
174
+ end
175
+ end
176
+
177
+ c.desc "upload new project file"
178
+ c.arg_name "filepath"
179
+ c.command :upload do |upload|
180
+ upload.action do |global_options, options, args|
181
+ help_now!("The filepath is missing.".foreground(:red)) if args.empty?
182
+ filename = args.shift
183
+ api_key = global_options[:api_key]
184
+ response = Veye::Project::Check.upload(filename, api_key)
185
+ unless response.success
186
+ error_msg = "Uploading failed - #{response.message.foreground(:red)}"
187
+ exit_now! error_msg
188
+ end
189
+
190
+ Veye::Project::Check.format(response.data, options[:format])
191
+ Veye::Project::Check.format_dependencies(response.data['dependencies'], options[:format])
192
+ end
193
+ end
194
+
195
+ c.desc "update existing project file"
196
+ c.arg_name "project_key_and_filepath", multiple: true
197
+ c.command :update do |update|
198
+ update.action do |global_options, options, args|
199
+ help_now!("The project key and the filepath are missing".foreground(:red)) if args.empty?
200
+ help_now!("One argument is missing: a project key or filepath".foreground(:red)) if args.count == 1
201
+
202
+ project_key, filename = args
203
+ api_key = global_options[:api_key]
204
+
205
+ response = Veye::Project::Check.update(project_key, filename, api_key)
206
+ unless response.success
207
+ error_msg = "Uploading failed - #{response.message.foreground(:red)}"
208
+ exit_now! error_msg
209
+ end
210
+
211
+ Veye::Project::Check.format(response.data, options[:format])
212
+ Veye::Project::Check.format_dependencies(response.data['dependencies'], options[:format])
213
+ end
214
+ end
215
+
216
+ c.desc "show project info"
217
+ c.arg_name "project_key"
218
+ c.command :show do |show|
219
+ show.action do |global_options, options, args|
220
+ help_now!("Project_key is unspecified".foreground(:red)) if args.empty?
221
+ proj_key = args.shift
222
+ api_key = global_options[:api_key]
223
+
224
+ response = Veye::Project::Check.get_project(proj_key, api_key)
225
+ unless response.success
226
+ error_msg = "Cant read information about project: `#{proj_key}`"
227
+ error_msg += "- #{response.message}".foreground(:red)
228
+ exit_now! error_msg
229
+ end
230
+
231
+ Veye::Project::Check.format(response.data, options[:format])
232
+ Veye::Project::Check.format_dependencies(response.data['dependencies'], options[:format])
233
+ end
234
+ end
235
+
236
+ c.desc "show licences of subdependencies"
237
+ c.arg_name "project_key"
238
+ c.command :licences do |licences|
239
+ licences.action do |global_options, options, args|
240
+ help_now!("Project's key is unspecified".foreground(:red)) if args.empty?
241
+ proj_key = args.shift
242
+ api_key = global_options[:api_key]
243
+
244
+ response = Veye::Project::Licence.get_project(proj_key, api_key)
245
+ unless response.success
246
+ error_msg = sprintf("%s \n %s",
247
+ "Cant access a information for project `#{proj_key}`".foreground(:red),
248
+ "#{response.message}")
249
+ exit_now! error_msg
250
+ end
251
+
252
+ Veye::Project::Licence.format(response.data, options[:format])
253
+ end
254
+ end
255
+
256
+ c.desc "delete project"
257
+ c.arg_name "project_key"
258
+ c.command :delete do |delete|
259
+ delete.action do |global_options, options, args|
260
+ help_now!("Project is missing".foreground(:red)) if args.empty?
261
+ proj_key = args.shift
262
+ api_key = global_options[:api_key]
263
+
264
+ response = Veye::Project::Check.delete_project(proj_key, api_key)
265
+ unless response.success
266
+ printf("Cant delete - %s\n%s\n", response.message.foreground(:red),
267
+ response.data['error'])
268
+ else
269
+ printf "Deleted\n".foreground(:green)
270
+ end
271
+ end
272
+ end
273
+ end
274
+
275
+ desc "package related methods"
276
+ command :products do |c|
277
+ c.desc "change output format"
278
+ c.flag [:format, 'format-name'], :default_value => 'pretty'
279
+
280
+ c.desc "check your following status"
281
+ c.arg_name "prod_key"
282
+ c.command :following do |following|
283
+ following.action do |global_options, options, args|
284
+ help_now!("Product's key is missing".foreground(:red)) if args.empty?
285
+ prod_key = args.shift
286
+ api_key = global_options[:api_key]
287
+
288
+ response = Veye::Package::Follow.get_follow_status(prod_key, api_key)
289
+ unless response.success
290
+ error_msg = sprintf("Checking state of following failed: %s \n %s",
291
+ "#{response.message}".foreground(:red),
292
+ "#{response.data}")
293
+ exit_now! error_msg
294
+ end
295
+
296
+ printf "#{response.data}\n".foreground(:green)
297
+ end
298
+ end
299
+
300
+ c.desc "start following specific software package"
301
+ c.arg_name "prod_key"
302
+ c.command :follow do |follow|
303
+ follow.action do |global_options, options, args|
304
+ help_now!("Product's key is missing".foreground(:red)) if args.empty?
305
+ prod_key = args.shift
306
+ api_key = global_options[:api_key]
307
+
308
+ response = Veye::Package::Follow.follow(prod_key, api_key)
309
+ unless response.success
310
+ error_msg = sprintf("Following failed: %s \n %s",
311
+ "#{response.message}".foreground(:red),
312
+ "#{response.data}")
313
+ exit_now! error_msg
314
+ end
315
+ printf "#{response.data}\n".foreground(:green)
316
+ end
317
+ end
318
+
319
+ c.desc "stop following given software package"
320
+ c.arg_name "prod_key"
321
+ c.command :unfollow do |unfollow|
322
+ unfollow.action do |global_options, options, args|
323
+ help_now!("Product's key is missing".foreground(:red)) if args.empty?
324
+ prod_key = args.shift
325
+ api_key = global_options[:api_key]
326
+
327
+ response = Veye::Package::Follow.unfollow(prod_key, api_key)
328
+ unless response.success
329
+ error_msg = sprintf("Unfollowing failed: %s \n %s",
330
+ "#{response.message}".foreground(:red),
331
+ "#{response.data}")
332
+ exit_now! error_msg
333
+ end
334
+
335
+ printf "#{response.data}\n".foreground(:green)
336
+ end
337
+ end
338
+ end
339
+
340
+
341
+ desc "handle your personal data"
342
+ command :me do |c|
343
+ c.desc "change output format"
344
+ c.flag [:format, 'format-name'], :default_value => 'pretty'
345
+
346
+ c.desc "get profile information"
347
+ c.action do |global_options, options, args|
348
+ api_key = global_options[:api_key]
349
+ response = Veye::User::Me.get_profile(api_key)
350
+ unless response.success
351
+ error_msg = sprintf("Failed to read your profile data: %s\n%s\n",
352
+ "#{response.message}".foreground(:red),
353
+ "#{response.data}")
354
+ exit_now! error_msg
355
+ end
356
+
357
+ Veye::User::Me.format_profile response.data, options[:format]
358
+ end
359
+
360
+ c.desc "get your favorite packages"
361
+ c.command :favorites do |favorites|
362
+ favorites.desc "pagination number"
363
+ favorites.flag [:page, 'page-number']
364
+
365
+ favorites.desc "show paging information"
366
+ favorites.switch [:pagination, 'show-pagination'], :default_value => true,
367
+ :negatable => true
368
+
369
+ favorites.action do |global_options, options, args|
370
+ api_key = global_options[:api_key]
371
+ response = Veye::User::Me.get_favorites(api_key, options[:page])
372
+
373
+ unless response.success
374
+ error_msg = sprintf("Failed to read your profile data: %s\n%s\n",
375
+ "#{response.message}".foreground(:red),
376
+ "#{response.data}")
377
+ exit_now! error_msg
378
+ end
379
+
380
+ Veye::User::Me.format_favorites response.data['favorites'], options[:format]
381
+ if options[:pagination]
382
+ printf("\n#-- pagination data ------------------\n")
383
+ Veye::Pagination::Show.format response.data['paging'], options[:format]
384
+ end
385
+ end
386
+
387
+ end
388
+ end
389
+
390
+ exit run(ARGV)
@@ -0,0 +1,29 @@
1
+ module Veye
2
+ module API
3
+ class BaseResource
4
+ attr_reader :resource, :full_path
5
+
6
+ def initialize(path = nil)
7
+ @full_path = $global_options[:url]
8
+ @full_path = "#{@full_path}#{path}" unless path.nil?
9
+ end
10
+
11
+ def self.build_url(global_options)
12
+ resource_url = nil
13
+ protocol = global_options[:protocol]
14
+ server = global_options[:server]
15
+ port = global_options.fetch(:port, "")
16
+ path = global_options[:path]
17
+
18
+ unless port.to_s.empty?
19
+ resource_url = "#{protocol}://#{server}:#{port}/#{path}"
20
+ else
21
+ resource_url = "#{protocol}://#{server}/#{path}"
22
+ end
23
+
24
+ return resource_url
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,56 @@
1
+ require 'json'
2
+
3
+ module Veye
4
+ module API
5
+ class JSONResponse
6
+ attr_reader :code, :success, :message, :data, :url, :headers
7
+ def initialize(request, result, response)
8
+ @url = request.url
9
+ @headers = request.headers
10
+ @code = result.code.to_i
11
+
12
+ response_data = JSON.parse(response)
13
+
14
+ @success, @message = success?(result, response_data)
15
+ @data = response_data
16
+ end
17
+
18
+ def success?(result, response_data)
19
+ @code = result.code.to_i
20
+ success = false
21
+
22
+ case @code
23
+ when 200
24
+ success = true
25
+ message = "fetched successfully"
26
+ when 201
27
+ success = true
28
+ message = "created successfully"
29
+ when 400
30
+ message = "bad request - wrong parameters, data"
31
+ when 401
32
+ message = "not authorized - add apikey or update settings file ~/.veye.rc"
33
+ when 403
34
+ message = "forbidden - server refused execute query"
35
+ when 413
36
+ message = "request entity too big - use smaller data object"
37
+ when 500
38
+ message = "internal server error - write to us"
39
+ when 501
40
+ message = "not implemented - write to us"
41
+ when 503
42
+ message = "service unavailable - temporary overloaded - write to us."
43
+ when 531
44
+ message = "not authorized - add apikey or update settings file ~/.veye.rc"
45
+ else
46
+ success = false
47
+ message = ""
48
+ end
49
+
50
+ return success, message
51
+ end
52
+
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,22 @@
1
+ require 'rest_client'
2
+ require_relative 'base_resource.rb'
3
+
4
+
5
+ #for ssl keys:
6
+ #openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -nodes
7
+ module Veye
8
+ module API
9
+ class Resource < BaseResource
10
+ def initialize(path = nil)
11
+ super(path)
12
+ @resource = RestClient::Resource.new(
13
+ @full_path,
14
+ :ssl_client_cert => OpenSSL::X509::Certificate.new(File.read("cert.pem")),
15
+ :ssl_client_key => OpenSSL::PKey::RSA.new(File.read("key.pem"), "passphrase, if any"),
16
+ :ssl_ca_file => "ca_certificate.pem",
17
+ :verify_ssl => OpenSSL::SSL::VERIFY_PEER
18
+ )
19
+ end
20
+ end
21
+ end
22
+ end
data/lib/veye/api.rb ADDED
@@ -0,0 +1,3 @@
1
+ require_relative 'api/resource.rb'
2
+ require_relative 'api/json_response.rb'
3
+
@@ -0,0 +1,50 @@
1
+ module Veye
2
+ module Package
3
+ class Follow
4
+
5
+ def self.get_follow_status(prod_key, api_key)
6
+ product_api = API::Resource.new(RESOURCE_PATH)
7
+ response_data = nil
8
+ qparams = {:params => {:api_key => api_key}}
9
+ safe_prod_key = Package.encode_prod_key(prod_key)
10
+ product_api.resource[
11
+ "/#{safe_prod_key}/follow.json"].get(qparams) do |response, request, result|
12
+
13
+ response_data = API::JSONResponse.new(request, result, response)
14
+ end
15
+
16
+ return response_data
17
+ end
18
+
19
+ def self.follow(prod_key, api_key)
20
+ product_api = API::Resource.new(RESOURCE_PATH)
21
+ response_data = nil
22
+ qparams = {:api_key => api_key}
23
+ safe_prod_key = Package.encode_prod_key(prod_key)
24
+
25
+ product_api.resource[
26
+ "/#{safe_prod_key}/follow.json"].post(qparams) do |response, request, result|
27
+
28
+ response_data = API::JSONResponse.new(request, result, response)
29
+ end
30
+
31
+ return response_data
32
+ end
33
+
34
+ def self.unfollow(prod_key, api_key)
35
+ product_api = API::Resource.new(RESOURCE_PATH)
36
+ response_data = nil
37
+ qparams = {:params => {:api_key => api_key}}
38
+ safe_prod_key = Package.encode_prod_key(prod_key)
39
+
40
+ product_api.resource[
41
+ "/#{safe_prod_key}/follow.json"].delete(qparams) do |response, request, result|
42
+
43
+ response_data = API::JSONResponse.new(request, result, response)
44
+ end
45
+
46
+ return response_data
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,50 @@
1
+ require_relative 'info_csv.rb'
2
+ require_relative 'info_json.rb'
3
+ require_relative 'info_pretty.rb'
4
+ require_relative 'info_table.rb'
5
+
6
+ module Veye
7
+ module Package
8
+
9
+ class Info
10
+ @@output_formats = {
11
+ 'csv' => InfoCSV.new,
12
+ 'json' => InfoJSON.new,
13
+ 'pretty' => InfoPretty.new,
14
+ 'table' => InfoTable.new
15
+ }
16
+
17
+ def self.search(package_key)
18
+ product_api = API::Resource.new(RESOURCE_PATH)
19
+ tokens = package_key.to_s.split('/')
20
+ lang = Package.encode_language(tokens.first)
21
+ safe_prod_key = Package.encode_prod_key(tokens.drop(1).join("/"))
22
+
23
+ if lang.nil? or safe_prod_key.nil?
24
+ msg = %Q[
25
+ You missed language or product key.
26
+ Example: clojure/ztellman/aleph, which as required structure <prog lang>/<product_code>
27
+ ]
28
+ error_msg = sprrintf("%s. \n%s",
29
+ "Error: Malformed key.".foreground(:red),
30
+ msg)
31
+ exit_now!(error_msg)
32
+ end
33
+
34
+ request_response = nil
35
+ product_api.resource["/#{lang}/#{safe_prod_key}"].get do |response, request, result, &block|
36
+ request_response = API::JSONResponse.new(request, result, response)
37
+ end
38
+ return request_response
39
+ end
40
+
41
+ def self.format(results, format = 'pretty')
42
+ formatter = @@output_formats[format]
43
+ formatter.before
44
+ formatter.format(results)
45
+ formatter.after
46
+ end
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,18 @@
1
+ module Veye
2
+ module Package
3
+ class InfoCSV
4
+ def before
5
+ printf("name,version,language,prod_key,licence,prod_type,description,link\n")
6
+ end
7
+ def after; end
8
+
9
+ def format(result, index = 0)
10
+ printf("%s,%s,%s,%s,%s,%s,%s,%s\n",
11
+ result["name"], result["version"], result["language"],
12
+ result["prod_key"], result["license"], result["prod_type"],
13
+ result["link"], result["description"])
14
+ end
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,14 @@
1
+ module Veye
2
+ module Package
3
+ class InfoJSON
4
+ def before; end
5
+ def after; end
6
+
7
+ def format(result, index = 0)
8
+ printf("%s\n", result.to_json)
9
+ end
10
+ end
11
+
12
+ end
13
+ end
14
+
@@ -0,0 +1,27 @@
1
+ require 'rainbow'
2
+
3
+ module Veye
4
+ module Package
5
+ class InfoPretty
6
+ def before; end
7
+ def after; end
8
+
9
+ def format(result, index = 0)
10
+ printf("\t%15s - %s\n", "#{result['name']}".foreground(:green).bright,
11
+ "#{result['version'].bright}")
12
+ puts "\t-------------------------"
13
+ printf("\t%-15s: %s\n", "Language", result["language"])
14
+ printf("\t%-15s: %s\n", "Licence", result["licence"])
15
+
16
+ printf("\t%-15s: %s\n", "Product type", result["prod_type"])
17
+ printf("\t%-15s: %s\n", "Product key",
18
+ "#{result["prod_key"]}".bright)
19
+ printf("\t%-15s:\n\t %s\n", "Description", result["description"])
20
+ printf("\t%-15s: %s\n", "Group id", result["group_id"])
21
+ printf("\t%-15s: %s\n", "Link", result["link"])
22
+
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ require 'terminal-table'
2
+
3
+ module Veye
4
+ module Package
5
+ class InfoTable
6
+ def before
7
+ @@table = Terminal::Table.new :title => "Package information",
8
+ :headings => %w(name version product_key language description)
9
+ @@table.align_column(0, :right)
10
+ end
11
+
12
+ def after
13
+ puts @@table.to_s
14
+ end
15
+
16
+ def format(result)
17
+ row = [result["name"], result["version"], result["prod_key"]]
18
+ row << result["language"]
19
+ row << result["description"]
20
+
21
+ @@table << row
22
+
23
+ @@table << ["", "", "", "link:", result["link"]]
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+