codercmp 0.9.7 → 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f7eb5cfcf5bedbc117d1fd4f9f4d0c4283abf372
4
- data.tar.gz: 590499c02a93be6bc554b245876fd728789b9506
3
+ metadata.gz: 33f172e7819122536245dbe189b28fcf0c146160
4
+ data.tar.gz: acfcd56950dc3c875d2d3ff4becbb6a5c3e64196
5
5
  SHA512:
6
- metadata.gz: 898f86b675cb21ed3cdba632f0d7978cc36f9d2ad52f3ea8d695badf9db9646537ee0ee60c5be27c6baf080fba33f1d3d4784523f73407e9ecbfc512c6bdaa32
7
- data.tar.gz: 39b2dc40462b7fba5c0d673d314250ac4e6f46131e8a06376d601a71f3af093cfedc667cf7ad2419c0252d6c0cb37b95ea54446012aea4fbebcface0d832c7a9
6
+ metadata.gz: acf252f2ca33a3dd64f8b1a5d6a6f18ebdd5db0e5c945bcdba39d7e8ff20b4ea7d6525742ebe1a5a76713e1b62530857f5dce63309aeae6cd364e7fb76c80375
7
+ data.tar.gz: 115addcac50bfbac07452c93db2274a3e7b6482c3f6d0560bdd20695fcfa536d104ff0747b421ac0fe4e69c252c5db0c2f305692c04203d321ffdba145d5813b
@@ -56,9 +56,14 @@ INFO
56
56
  options[:no_color] = !val
57
57
  end
58
58
 
59
- opts.on( "--show-output", "-o", "Display the output after parsing the project") do
59
+ opts.on( "--show-output", "Display the output after parsing the project") do
60
60
  options[:show_output] = true
61
61
  end
62
+
63
+ opts.on( "--output-file FILE", "-o FILE", "Output to a json file instead of uploading to codercompanion") do |file_name|
64
+ puts file_name
65
+ options[:output_file] = file_name
66
+ end
62
67
 
63
68
  opts.on( "--dry-run", "Performs dry run. Does not actually upload data. The purpose of this command is to test the parsing of your files. " +
64
69
  "Becomes even more useful when used with --show-output to see the result of the parse") do
@@ -73,7 +78,7 @@ INFO
73
78
  end
74
79
 
75
80
  opts.on( "--languages", "-l", "Get the supported languages") do
76
- CoderCompanion.display_supported_languages
81
+ CoderCompanion::CLI.display_supported_languages
77
82
  exit 0
78
83
  end
79
84
 
@@ -94,7 +99,7 @@ option_parser.parse!
94
99
 
95
100
  options[:exclude] = exclude
96
101
  begin
97
- CoderCompanion::start(options, location)
102
+ CoderCompanion::CLI.new(options, location).run
98
103
  rescue CoderCompanion::CoderCompanionException => e
99
104
  CoderCompanion::j_print CoderCompanion::error_format(e.message)
100
105
  exit 1
@@ -1,4 +1,3 @@
1
- # TODO: change to use instance instead of static/class methods for all
2
1
  $:.push File.expand_path(File.dirname(__FILE__) )
3
2
 
4
3
  require 'yard'
@@ -11,6 +10,7 @@ require 'treetop'
11
10
  require 'colored'
12
11
  require 'aws-sdk'
13
12
  require 'codercompanion/codercompanion_exception'
13
+ require 'codercompanion/visual_message'
14
14
  require 'codercompanion/ruby/ruby_annotations'
15
15
  require 'codercompanion/languages'
16
16
  require 'codercompanion/parser_factory'
@@ -36,375 +36,293 @@ end
36
36
 
37
37
  module CoderCompanion
38
38
 
39
- BASEPATH = File.expand_path('..', File.dirname(__FILE__) )
40
-
41
- STATUS_OK = 200
42
- USER_NOT_FOUND = 461
43
- PROJECT_NOT_FOUND = 510
44
- GENERIC_ERROR = 500
45
-
46
39
  CONFIG_FILE_NAME = 'codercmp.conf'
47
40
 
48
- # @return [Hash]
49
- @@options = {}
50
-
51
- # @return [Hash]
52
- @@config = nil
53
-
54
- # @return [String]
55
- @@visit_config_location_message = ""
41
+ @@no_color = false
56
42
 
57
- # @return [String]
58
- @@src_folder = ""
59
-
60
- # @return [CoderCompanion::API]
61
- @@api = CoderCompanion::API.new
62
-
63
- def self.init
64
- =begin
65
- -----------------------------------------------------------------------------------------------
66
-
67
- __-¯--__
68
- __-¯¯ ¯¯--__
69
- __-¯¯ ¯¯-___,
70
- /¯-__ __-¯¯__ |
71
- | ¯¯--__ __-¯¯__-¯¯ | |
72
- | ¯--__-¯¯__-¯¯ | |
73
- | | r¯¯ ¯¯ | |
74
- | | | O | |
75
- L | | _-| |
76
- `~__ | | __-¯¯__-¯¯
77
- `~__ | | __-¯¯__-¯¯ __-¯¯`~__
78
- `~__ | '¯¯__-¯¯ __-¯¯ ;-
79
- `L_-¯¯ __-¯¯ __-¯¯
80
- __-¯¯ __-¯¯
81
- `~_ __-¯¯
82
- `~__-¯¯
83
- #{special_format("R u n n i n g C o d e r C o m p a n i o n u p l o a d e r")}
84
-
85
- -----------------------------------------------------------------------------------------------
86
- =end
87
- j_print <<INFO
88
- -----------------------------------------------------------------------------------------------
43
+ class << self
44
+ def j_print(string)
45
+ puts string if !silent_run
46
+ end
89
47
 
90
- #{special_format("R u n n i n g C o d e r C o m p a n i o n u p l o a d e r")}
91
-
92
- -----------------------------------------------------------------------------------------------
93
- INFO
94
- @@visit_config_location_message = error_format("Please visit ") + error_url_format("http://codercompanion.com") + error_format(" for more info")
95
-
96
- # Using config_filename otherwise default to 'codercmp.conf' in pwd
97
- config_filename = @@options[:config_file] ? @@options[:config_file] : "#{CONFIG_FILE_NAME}"
98
-
99
- file = nil
100
- begin
101
- file = File.open(config_filename)
102
- rescue => e
103
- j_print e.to_s
104
- raise CoderCompanionException.new(error_format("An error occured while trying to open the configuration file"))
48
+ def j_print_inline(string)
49
+ print string if !silent_run
105
50
  end
106
51
 
107
- begin
108
- @@config = JSON.parse(file.read)
109
- rescue => e
110
- j_print error_format e.to_s
111
- raise CoderCompanionException.new(error_format("could not parse your config file. ") + @@visit_config_location_message)
52
+ # @param [String] string
53
+ def special_format(string)
54
+ return no_color ? string : string.white_on_black.bold
112
55
  end
113
-
114
- verify_config_file
115
- end
116
56
 
117
- def self.base_path
118
- BASEPATH
119
- end
57
+ # @param [String] string
58
+ def warning_format(string)
59
+ return no_color ? string : string.black_on_yellow.bold
60
+ end
120
61
 
121
- def self.j_print(string)
122
- puts string if !silent_run
123
- end
62
+ # @param [String] string
63
+ def error_format(string)
64
+ return no_color ? string : string.white_on_red.bold
65
+ end
124
66
 
125
- def self.j_print_inline(string)
126
- print string if !silent_run
127
- end
128
-
129
- # @return [CoderCompanion::CacheHandler]
130
- def self.cache_handler
131
- @@cache_handler
132
- end
67
+ # @param [String] string
68
+ def error_url_format(string)
69
+ return no_color ? string : string.yellow_on_red.bold.underline
70
+ end
133
71
 
134
- # @return [Boolean]
135
- def self.dry_run?
136
- @@options[:dry_run]
137
- end
72
+ # @param [String] string
73
+ def red_format(string)
74
+ return no_color ? string : string.red_on_black.bold
75
+ end
138
76
 
139
- # @return [Boolean]
140
- def self.silent_run
141
- @@options[:silent_run]
142
- end
77
+ # @param [String] string
78
+ def notification_format(string)
79
+ return no_color ? string : string.yellow_on_black
80
+ end
143
81
 
144
- # @return [Boolean]
145
- def self.fresh_run
146
- @@options[:fresh_run]
147
- end
82
+ # @param [String] string
83
+ def success_format(string)
84
+ return no_color ? string : string.green_on_black.bold
85
+ end
148
86
 
149
- # @return [Boolean]
150
- def self.no_color
151
- @@options[:no_color]
152
- end
87
+ def pretty_inspect(thing)
88
+ begin
89
+ thing.awesome_inspect
90
+ rescue
91
+ thing.inspect
92
+ end
93
+ end
153
94
 
154
- def self.excluded
155
- @@options[:exclude]
156
- end
95
+ # @param no_color [Boolean]
96
+ def no_color=(no_color)
97
+ @@no_color = no_color
98
+ end
99
+
100
+ # @return [Boolean]
101
+ def no_color
102
+ @@no_color
103
+ end
157
104
 
158
- # @return [Object]
159
- def self.config
160
- @@config
161
- end
105
+ # @param silent_run [Boolean]
106
+ def silent_run=(silent_run)
107
+ @@silent_run = silent_run
108
+ end
162
109
 
163
- # @return [String]
164
- def self.language
165
- @@language
110
+ # @return [Boolean]
111
+ def silent_run
112
+ @@silent_run
113
+ end
166
114
  end
167
115
 
168
- # @param language [String] the language
169
- def self.language=(language)
170
- @@language = language
171
- end
116
+ class CLI
117
+ attr_reader :cache_handler, :src_folder, :api, :options, :config, :language
172
118
 
173
- # @return [String]
174
- def self.annotation
175
- @@annotation
176
- end
119
+ def initialize(options = {}, location)
120
+ @options = options
121
+ @src_folder = location
122
+ @cache_handler = CacheHandler.new options[:dry_run]
177
123
 
178
- # @param annotation [String] the annotation type
179
- def self.annotation=(annotation)
180
- @@annotation = annotation
181
- end
124
+ CoderCompanion.no_color = options[:no_color]
125
+ CoderCompanion.silent_run = options[:silent_run]
126
+
127
+ print_greeting
128
+ @config = parse_config_file
129
+ verify_config @config
130
+
131
+ @api = API.new({
132
+ :access_key => @config["project"]["access_key"],
133
+ :access_id => @config["user"]["access_id"],
134
+ :host => @config["host"]
135
+ })
136
+ end
182
137
 
183
- # @param [String] string
184
- def self.special_format(string)
185
- return CoderCompanion.no_color ? string : string.white_on_black.bold
186
- end
138
+ # @return [Boolean]
139
+ def dry_run?
140
+ options[:dry_run]
141
+ end
187
142
 
188
- # @param [String] string
189
- def self.warning_format(string)
190
- return CoderCompanion.no_color ? string : string.black_on_yellow.bold
191
- end
143
+ # @return [String]
144
+ def output_file
145
+ options[:output_file]
146
+ end
192
147
 
193
- # @param [String] string
194
- def self.error_format(string)
195
- return CoderCompanion.no_color ? string : string.white_on_red.bold
196
- end
148
+ # @return [Boolean]
149
+ def fresh_run
150
+ options[:fresh_run]
151
+ end
197
152
 
198
- # @param [String] string
199
- def self.error_url_format(string)
200
- return CoderCompanion.no_color ? string : string.yellow_on_red.bold.underline
201
- end
153
+ def excluded
154
+ options[:exclude]
155
+ end
202
156
 
203
- # @param [String] string
204
- def self.red_format(string)
205
- return CoderCompanion.no_color ? string : string.red_on_black.bold
206
- end
157
+ def print_greeting
158
+ ::CoderCompanion.j_print VisualMessage.get_greeting_text
159
+ end
207
160
 
208
- # @param [String] string
209
- def self.notification_format(string)
210
- return CoderCompanion.no_color ? string : string.yellow_on_black
211
- end
161
+ def parse_config_file
162
+ @@visit_config_location_message = ::CoderCompanion.error_format("Please visit ") + ::CoderCompanion.error_url_format("http://codercompanion.com") + ::CoderCompanion.error_format(" for more info")
163
+
164
+ # Using config_filename otherwise default to 'codercmp.conf' in pwd
165
+ config_filename = options[:config_file] ? options[:config_file] : "#{CONFIG_FILE_NAME}"
166
+
167
+ file = nil
168
+ begin
169
+ file = File.open(config_filename)
170
+ rescue => e
171
+ ::CoderCompanion.j_print e.to_s
172
+ raise CoderCompanionException.new(::CoderCompanion.error_format("An error occured while trying to open the configuration file"))
173
+ end
212
174
 
213
- # @param [String] string
214
- def self.success_format(string)
215
- return CoderCompanion.no_color ? string : string.green_on_black.bold
216
- end
175
+ begin
176
+ return JSON.parse(file.read)
177
+ rescue => e
178
+ ::CoderCompanion.j_print ::CoderCompanion.error_format e.to_s
179
+ raise CoderCompanionException.new(::CoderCompanion.error_format("could not parse your config file. ") + @@visit_config_location_message)
180
+ end
181
+
182
+ end
217
183
 
218
- def self.verify_config_file
219
- j_print notification_format("Verifying Config file...")
220
- error = false
221
- if @@config
222
- if @@config["project"]
223
- if @@config["project"]["access_key"] == nil || @@config["project"]["access_key"].match(/^\s*$/)
224
- j_print error_format("No access_key for project specified.")
225
- error = true
226
- end
184
+ def verify_config config
185
+ ::CoderCompanion.j_print ::CoderCompanion.notification_format("Verifying Config file...")
186
+ error = false
187
+ if config
188
+ if config["project"]
189
+ if config["project"]["access_key"] == nil || config["project"]["access_key"].match(/^\s*$/)
190
+ ::CoderCompanion.j_print ::CoderCompanion.error_format("No access_key for project specified.")
191
+ error = true
192
+ end
227
193
 
228
- is_supported = true
229
- self.language = @@config["project"]["language"]
230
- if self.language == nil || self.language.match(/^\s*$/)
231
- j_print error_format("No language specified in your config file.")
232
- error = true
233
- elsif !CoderCompanion::Languages.is_supported?(self.language)
234
- is_supported = false
235
- j_print error_format("#{self.language} is not a supported language")
236
- j_print notification_format("To see a list of supported languages run: \n\tcodercmp --language\n")
194
+ is_supported = true
195
+ @language = config["project"]["language"]
196
+ if language == nil || language.match(/^\s*$/)
197
+ ::CoderCompanion.j_print ::CoderCompanion.error_format("No language specified in your config file.")
198
+ error = true
199
+ elsif !Languages.is_supported?(language)
200
+ is_supported = false
201
+ ::CoderCompanion.j_print ::CoderCompanion.error_format("#{language} is not a supported language")
202
+ ::CoderCompanion.j_print ::CoderCompanion.notification_format("To see a list of supported languages run: \n\tcodercmp --language\n")
203
+ error = true
204
+ end
205
+ else
206
+ ::CoderCompanion.j_print ::CoderCompanion.error_format("Project not found in config file. ")
237
207
  error = true
238
208
  end
239
- =begin -- Validation when multiple annotation options is allowed
240
- if !error && is_supported
241
- self.annotation = @@config["project"]["annotation"]
242
- languages = CoderCompanion::Languages.supported_languages
243
- language_details = nil
244
- languages.each do |lang|
245
- language_details = (lang[:key] == language) ? lang : nil
246
- if language_details
247
- break
248
- end
249
- end
250
- if language_details && language_details[:annotation_required] && (self.annotation == nil || self.annotation.match(/^\s*$/))
251
- j_print error_format("#{self.language} is supported but must make use of ONE of the following annotations styles: #{language_details[:valid_annotation].join(", ")}")
209
+ if config["user"]
210
+ if config["user"]["access_id"] == nil || config["user"]["access_id"] == ""
211
+ ::CoderCompanion.j_print ::CoderCompanion.error_format("No access_id for project specified.")
252
212
  error = true
253
213
  end
214
+ else
215
+ ::CoderCompanion.j_print ::CoderCompanion.error_format("User info not found")
216
+ error = true
254
217
  end
255
- =end
256
- else
257
- j_print error_format("Project not found in config file. ")
258
- error = true
259
- end
260
- if @@config["user"]
261
- if @@config["user"]["access_id"] == nil || @@config["user"]["access_id"] == ""
262
- j_print error_format("No access_id for project specified.")
218
+ if config["host"] == nil || config["host"] == ""
219
+ ::CoderCompanion.j_print ::CoderCompanion.error_format("Host not found")
263
220
  error = true
264
221
  end
265
- else
266
- j_print error_format("User info not found")
267
- error = true
268
222
  end
269
- if @@config["host"] == nil || @@config["host"] == ""
270
- j_print error_format("Host not found")
271
- error = true
272
- end
273
- end
274
-
275
- if error
276
- raise CoderCompanionException.new(@@visit_config_location_message)
277
- end
278
-
279
- j_print success_format("Config file Successfully Verified")
280
- end
281
-
282
- def self.pretty_inspect(thing)
283
- begin
284
- thing.awesome_inspect
285
- rescue
286
- thing.inspect
287
- end
288
- end
289
-
290
- def self.display_supported_languages
291
- languages = CoderCompanion::Languages.supported_languages
292
- puts <<INFO
293
- ---------------------------------------------------------------------------------------------
294
-
295
- #{CoderCompanion::notification_format("CoderCompanion Supported Languages (2015-05-30)")}
296
-
297
- ---------------------------------------------------------------------------------------------
298
- INFO
299
-
300
- languages.each do |lang|
301
223
 
302
- puts <<INFO
224
+ if error
225
+ raise CoderCompanionException.new(@@visit_config_location_message)
226
+ end
303
227
 
304
- Language: #{CoderCompanion::notification_format(lang[:key])}\t\t|\t Requires Annotations: #{lang[:annotation_required] ? CoderCompanion::success_format("YES") : CoderCompanion::red_format("NO") }\t\t|\tAnnotations Style(s): #{(lang[:annotation_required]) ? CoderCompanion::notification_format(lang[:valid_annotation].join(", ")) : CoderCompanion::notification_format("N/A")}
305
-
306
- INFO
228
+ ::CoderCompanion.j_print ::CoderCompanion.success_format("Config file Successfully Verified")
307
229
  end
308
- end
309
-
310
- def self.run
311
- if self.dry_run?
312
-
313
- j_print <<INFO
314
-
315
- #{notification_format("Performing dry run:")}
316
- - No cache use
317
- - No upload
318
-
319
- INFO
320
230
 
231
+ def self.display_supported_languages
232
+ languages = CoderCompanion::Languages.supported_languages
233
+ puts VisualMessage.supported_languages_header
234
+ languages.each do |lang|
235
+ puts VisualMessage.supported_language_row lang
236
+ end
321
237
  end
322
238
 
239
+ def run
240
+ if self.dry_run?
241
+ CoderCompanion.j_print VisualMessage.dry_run_text
242
+ end
323
243
 
324
- @@cache_handler = CacheHandler.new
325
- @@cache_handler.load_cache(fresh_run)
326
-
327
-
328
- p = CoderCompanion::ParserFactory.get_parser(self.language)
244
+ cache_handler.load_cache(fresh_run)
245
+
246
+ p = CoderCompanion::ParserFactory.get_parser(language)
329
247
 
330
- # Running test for different languages
331
- uploadable = p.create_project_json(@@src_folder)
248
+ # Running test for different languages
249
+ uploadable = p.create_project_json(src_folder, excluded, cache_handler)
332
250
 
333
- if @@options[:show_output]
334
- ap uploadable
335
- end
251
+ if options[:show_output]
252
+ ap uploadable
253
+ end
336
254
 
337
- if !uploadable
338
- j_print error_format("Something went wrong while trying to create uploadable")
339
- return
340
- end
255
+ if !uploadable
256
+ ::CoderCompanion.j_print ::CoderCompanion.error_format("Something went wrong while trying to create uploadable")
257
+ return
258
+ end
341
259
 
342
260
 
343
- if !self.dry_run?
344
- #puts pretty_inspect(uploadable)
345
- # Maybe wrap this in a begin--rescue block
346
- # Uncomment this
347
- file_rel_path = './test_upload.codercompanion'
348
- File.open(file_rel_path, 'w+') {|f| f.write(uploadable.to_json) }
261
+ if !dry_run?
262
+ #puts pretty_inspect(uploadable)
263
+ # Maybe wrap this in a begin--rescue block
264
+ # Uncomment this
349
265
 
350
- #zip file here
266
+ file_rel_path = './test_upload.codercompanion'
267
+ if output_file
268
+ ::CoderCompanion.j_print ::CoderCompanion.notification_format("saving output to #{output_file}")
269
+ file_rel_path = output_file
270
+ end
271
+ File.open(file_rel_path, 'w+') {|f| f.write(uploadable.to_json) }
272
+
273
+ if output_file
274
+ ::CoderCompanion.j_print ::CoderCompanion.success_format("Successfully saved the output")
275
+ return
276
+ end
277
+ #zip file here
351
278
 
352
- j_print notification_format("uploading to #{@@config["host"]}...")
279
+ ::CoderCompanion.j_print ::CoderCompanion.notification_format("uploading to #{config["host"]}...")
353
280
 
354
- # Uncomment this
355
- # Upload file to be processed
356
- upload(file_rel_path)
281
+ # Uncomment this
282
+ # Upload file to be processed
283
+ upload(file_rel_path)
357
284
 
358
- File.delete(file_rel_path)
359
- self.cache_handler.write_cached_data
360
- j_print success_format("Uploaded your changes successfully")
285
+ File.delete(file_rel_path)
286
+ cache_handler.write_cached_data
287
+ ::CoderCompanion.j_print ::CoderCompanion.success_format("Uploaded your changes successfully")
288
+ end
361
289
  end
362
- end
363
290
 
364
- def self.upload(file)
365
- response = @@api.get_temporary_access_key
366
- unless response
367
- File.delete(file)
368
- raise CoderCompanion::CoderCompanionException, "Failed to upload project"
369
- end
291
+ def upload(file)
292
+ response = api.get_temporary_access_key
293
+ unless response
294
+ File.delete(file)
295
+ raise CoderCompanion::CoderCompanionException, "Failed to upload project"
296
+ end
370
297
 
371
- response_data = JSON.parse(response)["data"]
372
- credentials = response_data["credentials"]
373
- region = response_data["region"]
374
- s3_bucket = response_data["s3_bucket"]
375
- s3_client = CoderCompanion::S3Client.new(
376
- :session_token => credentials["session_token"],
377
- :access_key_id => credentials["access_key_id"],
378
- :secret_access_key => credentials["secret_access_key"],
379
- :region => region,
380
- :s3_bucket => s3_bucket
381
- )
382
-
383
- current_time = Time.now.utc.strftime("%Y-%m-%d:%H:%M:%S")
384
- key = "#{@@config["user"]["access_id"]}/#{@@config["project"]["access_key"]}/#{current_time}/upload"
385
-
386
- # put object using the s3_client
387
- result = s3_client.put_object(file, key)
388
- unless result
389
- File.delete(file)
390
- raise CoderCompanion::CoderCompanionException, "Failed to upload file to S3"
391
- end
392
-
393
- # notify the api that we have uploaded the file to s3
394
- response = @@api.notify_s3_upload(key)
395
- unless response
396
- File.delete(file)
397
- raise CoderCompanion::CoderCompanionException, "Failed to complete upload. It is possible our servers are down"
298
+ response_data = JSON.parse(response)["data"]
299
+ credentials = response_data["credentials"]
300
+ region = response_data["region"]
301
+ s3_bucket = response_data["s3_bucket"]
302
+ s3_client = CoderCompanion::S3Client.new(
303
+ :session_token => credentials["session_token"],
304
+ :access_key_id => credentials["access_key_id"],
305
+ :secret_access_key => credentials["secret_access_key"],
306
+ :region => region,
307
+ :s3_bucket => s3_bucket
308
+ )
309
+
310
+ current_time = Time.now.utc.strftime("%Y-%m-%d:%H:%M:%S")
311
+ key = "#{config["user"]["access_id"]}/#{config["project"]["access_key"]}/#{current_time}/upload"
312
+
313
+ # put object using the s3_client
314
+ result = s3_client.put_object(file, key)
315
+ unless result
316
+ File.delete(file)
317
+ raise CoderCompanion::CoderCompanionException, "Failed to upload file to S3"
318
+ end
319
+
320
+ # notify the api that we have uploaded the file to s3
321
+ response = api.notify_s3_upload(key)
322
+ unless response
323
+ File.delete(file)
324
+ raise CoderCompanion::CoderCompanionException, "Failed to complete upload. It is possible our servers are down"
325
+ end
398
326
  end
399
327
  end
400
-
401
- def self.start(options, location)
402
- @@options = options
403
-
404
- @@src_folder = location
405
-
406
- self.init
407
- self.run
408
- end
409
-
410
328
  end
@@ -1,18 +1,25 @@
1
1
  module CoderCompanion
2
2
  class API
3
- def initialize()
4
- # puts CoderCompanion::config
3
+ STATUS_OK = 200
4
+ USER_NOT_FOUND = 461
5
+ PROJECT_NOT_FOUND = 510
6
+ GENERIC_ERROR = 500
7
+
8
+ attr_reader :config
9
+
10
+ def initialize(config={})
11
+ @config = config
5
12
  end
6
13
 
7
14
  def upload(file)
8
15
  response = nil
9
16
  begin
10
- response = RestClient.post(CoderCompanion::config["host"] + '/update_project.json', :myfile => File.new(file),# /Users/oseghale/Projects/JinglePage/JingleParser/test_upload.jingle'),
11
- :access_key => CoderCompanion::config["project"]["access_key"], :access_id => CoderCompanion::config["user"]["access_id"]) { |response, request, result, &block|
17
+ response = RestClient.post(config[:host] + '/update_project.json', :myfile => File.new(file),# /Users/oseghale/Projects/JinglePage/JingleParser/test_upload.jingle'),
18
+ :access_key => config[:access_key], :access_id => config[:access_id]) { |response, request, result, &block|
12
19
  return response.code || nil
13
20
  }
14
21
  rescue
15
- return CoderCompanion::GENERIC_ERROR
22
+ return GENERIC_ERROR
16
23
 
17
24
  end
18
25
 
@@ -20,10 +27,10 @@ module CoderCompanion
20
27
 
21
28
  def get_temporary_access_key
22
29
  begin
23
- RestClient.post("#{CoderCompanion::config["host"]}/project/get_temporary_access_key.json",
24
- :access_key => CoderCompanion::config["project"]["access_key"],
25
- :access_id => CoderCompanion::config["user"]["access_id"]) { |response, request, result, &block|
26
- return (response.code == CoderCompanion::STATUS_OK) ? response : nil
30
+ RestClient.post("#{config[:host]}/project/get_temporary_access_key.json",
31
+ :access_key => config[:access_key],
32
+ :access_id => config[:access_id]) { |response, request, result, &block|
33
+ return (response.code == STATUS_OK) ? response : nil
27
34
  }
28
35
  rescue
29
36
  return nil
@@ -32,11 +39,11 @@ module CoderCompanion
32
39
 
33
40
  def notify_s3_upload(key)
34
41
  begin
35
- RestClient.post("#{CoderCompanion::config["host"]}/project/notify_project_upload.json",
42
+ RestClient.post("#{config[:host]}/project/notify_project_upload.json",
36
43
  :s3_key => key,
37
- :access_key => CoderCompanion::config["project"]["access_key"],
38
- :access_id => CoderCompanion::config["user"]["access_id"]) { |response, request, result, &block|
39
- return (response.code == CoderCompanion::STATUS_OK) ? response : nil
44
+ :access_key => config[:access_key],
45
+ :access_id => config[:access_id]) { |response, request, result, &block|
46
+ return (response.code == STATUS_OK) ? response : nil
40
47
  }
41
48
  rescue
42
49
  return nil
@@ -4,9 +4,12 @@ module CoderCompanion
4
4
 
5
5
  # @return [Object]
6
6
  attr_accessor :file_cache
7
+
8
+ attr_reader :dry_run
7
9
 
8
- def initialize
10
+ def initialize(dry_run=false)
9
11
  @file_cache = {}
12
+ @dry_run = dry_run
10
13
  end
11
14
 
12
15
  # @return [File, nil]
@@ -22,12 +25,11 @@ module CoderCompanion
22
25
 
23
26
  # @param fresh_run [Boolean] should we use cache for this run?
24
27
  def load_cache(fresh_run)
25
- if !CoderCompanion.dry_run?
26
- if fresh_run
27
- delete_cache
28
- else
29
- find_cache
30
- end
28
+ return if dry_run
29
+ if fresh_run
30
+ delete_cache
31
+ else
32
+ find_cache
31
33
  end
32
34
  end
33
35
 
@@ -42,36 +44,34 @@ module CoderCompanion
42
44
  end
43
45
 
44
46
  def delete_cache
45
- if !CoderCompanion.dry_run?
46
- begin
47
- File.delete(CACHE_DIR + '/cache.data')
48
- CoderCompanion::j_print CoderCompanion::warning_format("Running a fresh sesh")
49
- rescue
50
- CoderCompanion::j_print CoderCompanion::warning_format("No cache to delete. Running a fresh sesh")
51
- end
47
+ return if dry_run
48
+ begin
49
+ File.delete(CACHE_DIR + '/cache.data')
50
+ CoderCompanion::j_print CoderCompanion::warning_format("Running a fresh sesh")
51
+ rescue
52
+ CoderCompanion::j_print CoderCompanion::warning_format("No cache to delete. Running a fresh sesh")
52
53
  end
53
54
  end
54
55
 
55
56
  # @param [String] file_path
56
57
  def update_cache_path(file_path)
57
- if !CoderCompanion.dry_run?
58
- if !self.file_cache
59
- self.file_cache = {}
60
- end
61
- self.file_cache[file_path] = encrypt(File.open(file_path).read)
58
+ return if dry_run
59
+
60
+ if !self.file_cache
61
+ self.file_cache = {}
62
62
  end
63
+ self.file_cache[file_path] = encrypt(File.open(file_path).read)
63
64
  end
64
65
 
65
66
  # @return [nil]
66
67
  def write_cached_data
67
- if !CoderCompanion.dry_run?
68
- if !Dir.exists?(CACHE_DIR)
69
- Dir.mkdir(CACHE_DIR)
70
- end
71
- File.open(CACHE_DIR + '/cache.data', 'w+') do |f|
72
- f.write(self.file_cache.to_json)
73
- end
68
+ return if dry_run
69
+ if !Dir.exists?(CACHE_DIR)
70
+ Dir.mkdir(CACHE_DIR)
74
71
  end
72
+ File.open(CACHE_DIR + '/cache.data', 'w+') do |f|
73
+ f.write(self.file_cache.to_json)
74
+ end
75
75
  end
76
76
 
77
77
  # @return [JSON]
@@ -20,7 +20,6 @@ module CoderCompanion
20
20
  end
21
21
 
22
22
  def parse_file(file)
23
- CoderCompanion::j_print_inline CoderCompanion::success_format '.'
24
23
  data = File.open(file).read
25
24
  tree = @parser.parse(data)
26
25
 
@@ -47,6 +46,7 @@ module CoderCompanion
47
46
  end
48
47
 
49
48
  ast = self.build_tree(tree)
49
+ CoderCompanion::j_print_inline CoderCompanion::success_format '.'
50
50
  {:type => 'source', :body => ast, :file_path => file}
51
51
  end
52
52
 
@@ -27,10 +27,9 @@ module CoderCompanion
27
27
  return value
28
28
  end
29
29
 
30
- def create_uploadable(results)
30
+ def create_uploadable(results, cache_handler)
31
31
  obj = {}
32
32
  results.each do |source|
33
- cache_handler = CoderCompanion.cache_handler
34
33
  modified = cache_handler.is_file_modified?(source[:file_path])
35
34
  cache_handler.update_cache_path(source[:file_path])
36
35
  source[:body].each do |element|
@@ -3,16 +3,21 @@ module CoderCompanion
3
3
 
4
4
  # @return [TreeWalker]
5
5
  attr_reader :tree_walker
6
+
7
+ # @return [Array<String>]
8
+ attr_accessor :excluded
6
9
 
7
10
  # Parses and creates the json that will be uploaded
8
11
  # @param [String] dir_name
12
+ # @param [Array<String>] excluded_files
9
13
  # @return [Hash]
10
- def create_project_json(dir_name)
14
+ def create_project_json(dir_name, excluded_files, cache_handler)
15
+ self.excluded = excluded_files
11
16
  files = get_parseable_files(dir_name)
12
17
  CoderCompanion::j_print CoderCompanion::notification_format("Parsing files...")
13
18
  results = parse(files)
14
19
  CoderCompanion::j_print CoderCompanion::success_format("\nSuccessfully parsed source code")
15
- tree_walker.create_uploadable(results)
20
+ tree_walker.create_uploadable(results, cache_handler)
16
21
  end
17
22
 
18
23
  # Parse the files
@@ -34,7 +39,7 @@ module CoderCompanion
34
39
  Dir.foreach(dir_name) do |item|
35
40
  next if item == '.' or item == '..'
36
41
  path = File.join(dir_name, item).gsub(/^(\.\/)?/, '') # Remove the leading ./ in the file name
37
- next if CoderCompanion.excluded.include?(path)
42
+ next if excluded.include?(path)
38
43
  if File.directory?(path)
39
44
  construct_array(path, res_arr)
40
45
  else
@@ -1,5 +1,3 @@
1
- require 'byebug'
2
- require 'rdoc/rdoc'
3
1
  module CoderCompanion
4
2
  module Ruby
5
3
  class RubyParser < LanguageParser
@@ -38,6 +36,7 @@ module CoderCompanion
38
36
  YARD::Registry.clear
39
37
  YARD.parse(file)
40
38
  results = YARD::Registry.all(:root, :module, :class, :method, :classvariable)
39
+ CoderCompanion::j_print_inline CoderCompanion::success_format '.'
41
40
  {:type => 'source', :body => results, :file_path => file}
42
41
  end
43
42
  end
@@ -3,17 +3,17 @@ module CoderCompanion
3
3
  class RubyTreeWalker < CoderCompanion::TreeWalker
4
4
 
5
5
  # @param [Array<Hash>] results
6
+ # @param [CacheHandler] cache_handler
6
7
  # @return [Hash]
7
- def create_uploadable(results)
8
- return build(results)
8
+ def create_uploadable(results, cache_handler)
9
+ return build(results, cache_handler)
9
10
  end
10
11
 
11
12
  # @param results [Array<Hash>] the results from parsing the code
12
13
  # @return [Hash]
13
- def build(results)
14
+ def build(results, cache_handler)
14
15
  obj = {}
15
16
  results.each do |source|
16
- cache_handler = CoderCompanion.cache_handler
17
17
  modified = cache_handler.is_file_modified?(source[:file_path])
18
18
  cache_handler.update_cache_path(source[:file_path])
19
19
 
@@ -1,7 +1,8 @@
1
1
  module CoderCompanion
2
2
  class TreeWalker
3
3
  # @param [Array<Hash>] results The result hash to be converted into an uploadeable
4
- def create_uploadable(results)
4
+ # @param cache_handler [CacheHandler]
5
+ def create_uploadable(results, cache_handler)
5
6
  raise NotImplementedError, "#{self.class}: 'create_uploadable' must be overriden"
6
7
  end
7
8
  end
@@ -0,0 +1,66 @@
1
+ module CoderCompanion
2
+ module VisualMessage
3
+
4
+ def self.get_greeting_text
5
+ =begin
6
+ -----------------------------------------------------------------------------------------------
7
+
8
+ __-¯--__
9
+ __-¯¯ ¯¯--__
10
+ __-¯¯ ¯¯-___,
11
+ /¯-__ __-¯¯__ |
12
+ | ¯¯--__ __-¯¯__-¯¯ | |
13
+ | ¯--__-¯¯__-¯¯ | |
14
+ | | r¯¯ ¯¯ | |
15
+ | | | O | |
16
+ L | | _-| |
17
+ `~__ | | __-¯¯__-¯¯
18
+ `~__ | | __-¯¯__-¯¯ __-¯¯`~__
19
+ `~__ | '¯¯__-¯¯ __-¯¯ ;-
20
+ `L_-¯¯ __-¯¯ __-¯¯
21
+ __-¯¯ __-¯¯
22
+ `~_ __-¯¯
23
+ `~__-¯¯
24
+ #{special_format("R u n n i n g C o d e r C o m p a n i o n u p l o a d e r")}
25
+
26
+ -----------------------------------------------------------------------------------------------
27
+ =end
28
+ return <<INFO
29
+ -----------------------------------------------------------------------------------------------
30
+
31
+ #{::CoderCompanion.special_format("R u n n i n g C o d e r C o m p a n i o n u p l o a d e r")}
32
+
33
+ -----------------------------------------------------------------------------------------------
34
+ INFO
35
+ end
36
+
37
+ def self.supported_languages_header
38
+ return <<INFO
39
+ -----------------------------------------------------------------------------------------------
40
+
41
+ #{CoderCompanion::notification_format("CoderCompanion Supported Languages (2015-05-30)")}
42
+
43
+ -----------------------------------------------------------------------------------------------
44
+ INFO
45
+ end
46
+
47
+ def self.supported_language_row lang
48
+ return <<INFO
49
+
50
+ Language: #{::CoderCompanion.notification_format(lang[:key])}\t\t|\t Requires Annotations: #{lang[:annotation_required] ? ::CoderCompanion.success_format("YES") : ::CoderCompanion.red_format("NO") }\t\t|\tAnnotations Style(s): #{(lang[:annotation_required]) ? ::CoderCompanion.notification_format(lang[:valid_annotation].join(", ")) : ::CoderCompanion.notification_format("N/A")}
51
+
52
+ INFO
53
+ end
54
+
55
+ def self.dry_run_text
56
+ return <<INFO
57
+
58
+ #{CoderCompanion.notification_format("Performing dry run:")}
59
+ - No cache use
60
+ - No upload
61
+
62
+ INFO
63
+
64
+ end
65
+ end
66
+ end
@@ -1,3 +1,3 @@
1
1
  module CoderCompanion
2
- VERSION = '0.9.7'
2
+ VERSION = '0.9.8'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codercmp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7
4
+ version: 0.9.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sega Okhiria
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-17 00:00:00.000000000 Z
11
+ date: 2015-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: treetop
@@ -94,6 +94,34 @@ dependencies:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.8.7
97
+ - !ruby/object:Gem::Dependency
98
+ name: json
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: aws-sdk
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '2'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: '2'
97
125
  description: codercmp is a gem intended for use as a command line interface to parse
98
126
  and upload code architecture and object structure to CoderCompanion.
99
127
  email:
@@ -125,6 +153,7 @@ files:
125
153
  - lib/codercompanion/ruby/ruby_tree_walker.rb
126
154
  - lib/codercompanion/s3_client.rb
127
155
  - lib/codercompanion/tree_walker.rb
156
+ - lib/codercompanion/visual_message.rb
128
157
  - lib/codercompanion_version.rb
129
158
  homepage: ''
130
159
  licenses: