phari_doc_gen 1.2.5 → 2.0.0

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: c0f0b5b7c77d8f9be2a12817c01ec137a8595b31
4
- data.tar.gz: adced1d6f344949c085537b646376295520dd030
3
+ metadata.gz: 84e53d9f6e1da49020951dcd28ef795366414da7
4
+ data.tar.gz: 98e589057107d1e726ce6c275175d94a28a35b7b
5
5
  SHA512:
6
- metadata.gz: 465b1a37a5dec79c6265320389e10ac99e17734a45981ab12c6f6392ee0620723c228b3841c79401ad5f6e3ad56023ceaa4ed375d953d8220a5782f3049f8a7c
7
- data.tar.gz: 09d5c800618dc510f31b41488be6080a2874e7407b40455339a2287c0bc799b95a55bd2d0a12afff6e01fdf1c1e4062559423b81edbbfe0c033eee36894d2798
6
+ metadata.gz: cfa16be8876a0d45963dff63dabe84acf83643f3cbf2e3a46c2357b8655088cea729ccd3f68abe73b7ad91545e89ff9fac2b74704a47ee3fbdae07b4305b8dd6
7
+ data.tar.gz: 875ba1fcd148ee471d210652c320af69f5b56dfb28d8a3af8881d212d09adacd888be3fdf6bf004347f8caaf362a4baa09219ed92b53ac77e648d4186d95c12e
File without changes
@@ -1,3 +1,10 @@
1
+ #--------------------------------------------------------------------------------------------
2
+ # THE BEER-WARE LICENSE" (Revision 42): <luiz@phari.solutions> wrote this file.
3
+ # As long as you retain this notice you can do whatever you want with this stuff.
4
+ # If we meet some day, and you think this stuff is worth it, you can buy me a beer in return.
5
+ # Luiz Philippe.
6
+ #--------------------------------------------------------------------------------------------
7
+
1
8
  require 'fileutils'
2
9
  require_relative 'Modelo.rb'
3
10
  require_relative 'Rota.rb'
@@ -5,43 +12,52 @@ require_relative 'Metodo.rb'
5
12
  require_relative 'MethodParam.rb'
6
13
 
7
14
  class FileHandler
8
- # Leitura dos arquivos
15
+ # Reading files
16
+ # Find a folder with the project name
9
17
  def packageExistis?(packageName)
10
18
  found = false
11
19
  package = ''
20
+ puts'Finding project'
21
+ puts'It may take some time...'
12
22
  Dir.glob('/**/' + packageName + '/') do |folder|
13
23
  package = folder unless found
14
24
  found = true
15
- # puts 'done'
16
25
  end
17
26
  packagePath = package.to_s
18
- # puts packagePath
19
27
  if found
28
+ # Return the folder path if found
20
29
  return packagePath
21
30
  else
31
+ # Exit if not found
22
32
  puts 'Aborting: package not found'
23
33
  exit
24
34
  end
25
35
  end
26
36
 
27
- def readProject(project)
28
- path = packageExistis?(project)
37
+ # Read the 'README.md' file and generate descriprion
38
+ def readProject(path)
29
39
  projectDescription = ''
30
- readme = File.new(path + 'README.md')
31
- projectDescription = readProjectDescription(readme)
32
- projectDescription
40
+ if File.exists?(path + 'README.md')
41
+ readme = File.new(path + 'README.md')
42
+ projectDescription = readProjectDescription(readme)
43
+ projectDescription
44
+ else
45
+ puts 'Warning: No README.md file found.'
46
+ end
33
47
  end
34
48
 
35
- def readFiles(project)
49
+ # Read models, helpers and controllers
50
+ def readFiles(path)
36
51
  models = []
37
- path = packageExistis?(project)
38
- Dir.glob(path + 'backend/api/models/*.rb') do |file|
52
+ # Find each model, helper and controller
53
+ Dir.glob(path + 'api/models/*.rb') do |file|
39
54
  filename = file.to_s
40
55
  inputFile = File.new(filename)
41
56
  modelname = File.basename(inputFile, '.rb')
42
- helpername = path + 'backend/api/app/helpers/' + modelname + '_helper.rb'
43
- controllername = path + 'backend/api/app/controllers/' + modelname + '.rb'
57
+ helpername = path + 'api/app/helpers/' + modelname + '_helper.rb'
58
+ controllername = path + 'api/app/controllers/' + modelname + '.rb'
44
59
  if File.exist?(helpername) && File.exist?(controllername)
60
+ # Call the necessary methods for each helper and controller
45
61
  modelHelper = File.new(helpername, 'r')
46
62
  modelController = File.new(controllername, 'r')
47
63
  methods = readMethods(modelHelper, helpername)
@@ -50,37 +66,26 @@ class FileHandler
50
66
  models << currentModel
51
67
  end
52
68
  end
69
+ # Return models
53
70
  models
54
71
  end
55
72
 
56
- # Métodos auxiliares a leitura
73
+ # Auxiliary methods of reading
74
+
75
+ #Generate project descriprion based on 'README.md'
57
76
  def readProjectDescription(readme)
58
77
  isCode = false
59
78
  @projectDescription = ''
60
79
  arr = IO.readlines(readme)
80
+ # Read each line from the README
61
81
  arr.each do |line|
62
- next if line.start_with?('# ')
63
- if line.start_with?('## ')
64
- line = '<h3>' + line.slice(3, line.length - 3)
65
- line += '</h3>'
66
- # puts line
67
- end
68
- if line.start_with?('### ')
69
- line = '<h4>' + line.slice(4, line.length - 4) + '</h4>'
70
- # puts line
71
- end
72
- if line.start_with?('##### ')
73
- line = '<h5>' + line.slice(6, line.length - 6) + '</h5>'
74
- # puts line
75
- end
76
- if line.start_with?('* ')
77
- line = '<li>' + line.slice(2, line.length - 2) + '</li>'
78
- # puts line
79
- end
80
- while hasBetween?(line, '**', '**')
81
- line = higlightText(line)
82
- # puts line
83
- end
82
+ # Read markdown syntax and trasform into HTML tags
83
+ next if line.start_with?('# ') || line.start_with?('#!shell')
84
+ line = '<h3>' + line.slice(3, line.length - 3) + '</h3>'if line.start_with?('## ')
85
+ line = '<h4>' + line.slice(4, line.length - 4) + '</h4>' if line.start_with?('### ')
86
+ line = '<h5>' + line.slice(6, line.length - 6) + '</h5>' if line.start_with?('##### ')
87
+ line = '<li>' + line.slice(2, line.length - 2) + '</li>' if line.start_with?('* ')
88
+ line = higlightText(line) while hasBetween?(line, '**', '**')
84
89
  line = italicText(line) while hasBetween?(line, '*', '*')
85
90
  if line.include?('```')
86
91
  if isCode
@@ -96,9 +101,11 @@ class FileHandler
96
101
  end
97
102
  @projectDescription += line
98
103
  end
104
+ # Return the HTML formated lines
99
105
  @projectDescription
100
106
  end
101
107
 
108
+ # Verify if line contains markdown syntax like **bold**
102
109
  def hasBetween?(line, stringA, stringB)
103
110
  if line.include?(stringA)
104
111
  initial = line.index(stringA)
@@ -109,6 +116,7 @@ class FileHandler
109
116
  false
110
117
  end
111
118
 
119
+ # Convert **bold** markdown to <b>bold</b> HTML
112
120
  def higlightText(line)
113
121
  initialIndex = line.index('**') + 2
114
122
  finalIndex = line.index('**', initialIndex)
@@ -116,10 +124,10 @@ class FileHandler
116
124
  higlightedString = line.slice(initialIndex, finalIndex - initialIndex)
117
125
  finalString = line.slice(finalIndex + 2, line.length - finalIndex + 2)
118
126
  line = initialString + '<b>' + higlightedString + '</b>' + finalString
119
- # puts line
120
127
  line
121
128
  end
122
129
 
130
+ # Convert *italic* markdown to <i>italic</i> HTML
123
131
  def italicText(line)
124
132
  initialIndex = line.index('*') + 1
125
133
  finalIndex = line.index('*', initialIndex)
@@ -127,10 +135,10 @@ class FileHandler
127
135
  higlightedString = line.slice(initialIndex, finalIndex - initialIndex)
128
136
  finalString = line.slice(finalIndex + 1, line.length - finalIndex + 1)
129
137
  line = initialString + '<i>' + higlightedString + '</i>' + finalString
130
- # puts line
131
138
  line
132
139
  end
133
140
 
141
+ # Convert [www.someaddress.com](text) markdown to <a href="www.someaddress.com">text</a> HTML
134
142
  def linkText(line)
135
143
  if line.include?(' [') && line.include?('](')
136
144
  initialContentIndex = line.index('[') + 1
@@ -146,6 +154,7 @@ class FileHandler
146
154
  line
147
155
  end
148
156
 
157
+ # Read all methods from a helper file; helper = file, helpername = file path
149
158
  def readMethods(helper, helpername)
150
159
  lineIndex = 0
151
160
  tipo = ''
@@ -157,12 +166,16 @@ class FileHandler
157
166
  toSent = true
158
167
  begin
159
168
  arr = IO.readlines(helper)
169
+ # Read each line from helper
160
170
  arr.each do |line|
161
171
  lineIndex += 1
172
+ # Verify if it has a clause
162
173
  if hasKeyword?(line, lineIndex, helpername)
174
+ # If it does, identify which clause it is
163
175
  arg = decodeArgument(line)
164
176
  keyword = arg[0]
165
177
  argument = arg[1]
178
+ # Execute clause
166
179
  case keyword
167
180
  when 'methods'
168
181
  if nome != ''
@@ -181,8 +194,6 @@ class FileHandler
181
194
  toSent = true
182
195
  end
183
196
  nome = argument
184
- # methods.last.printName
185
- # puts "#{methods.size}"
186
197
  when 'param'
187
198
  data = dataValue(argument)
188
199
  inputs << data
@@ -190,19 +201,23 @@ class FileHandler
190
201
  data = dataValue(argument)
191
202
  outputs << data
192
203
  else
204
+ # If a possible syntax error is found, a warning is sent informing file and linne
193
205
  puts "Warning: in #{helpername}:#{lineIndex}: #{keyword} is not a keyword" if keyword != 'namespace'
194
206
  end
195
207
  end
196
208
  descricao = decodeDescription(line) if hasDescription?(line, lineIndex, helpername)
197
209
  end
198
210
  rescue ArgumentError => e
211
+ # If a syntax error is found, it rais an Argument Error informing the file and line
199
212
  puts "ERROR: #{helpername}:#{lineIndex}: in #{nome}"
200
213
  puts e.message
201
214
  end
202
215
  methods << Metodo.new(nome, tipo, inputs, outputs, descricao)
216
+ # Return a methods array
203
217
  methods
204
218
  end
205
219
 
220
+ # Read all routes from a controller file; controller = file, controllername = file path
206
221
  def readRoutes(controller, controllername)
207
222
  lineIndex = 0
208
223
  tipo = ''
@@ -215,13 +230,17 @@ class FileHandler
215
230
  toSent = true
216
231
  begin
217
232
  arr = IO.readlines(controller)
233
+ # Read each line from controller
218
234
  arr.each do |line|
219
235
  lineIndex += 1
236
+ # Skip to next line if no clause is found
220
237
  next unless hasKeyword?(line, lineIndex, controllername)
238
+ # If it has any clause, identify which one it is
221
239
  arg = decodeArgument(line)
222
240
  keyword = arg[0]
223
241
  argument = arg[1]
224
242
  case keyword
243
+ # Then execute clause
225
244
  when 'route'
226
245
  if nome != ''
227
246
  routes << Rota.new(nome, tipo, requisicao, dataInput, inputs, outputs)
@@ -279,18 +298,24 @@ class FileHandler
279
298
  data = dataValue(argument)
280
299
  outputs << data
281
300
  else
301
+ # If a possible syntax error is found, a warning is sent informing file and linne
302
+ # (Here in the namespace comparison, i'm doing a little mcgyver)
282
303
  puts "Warning: in #{controllername}:#{lineIndex}: #{keyword} is not a keyword" if keyword != 'namespace'
283
304
  end
284
305
  end
285
306
  rescue ArgumentError => e
307
+ # If a syntax error is found, it raise an Argument Error informing the file and line
286
308
  puts "ERROR: #{controllername}:#{lineIndex}: in #{nome}"
287
309
  puts e.message
288
310
  end
289
311
  routes << Rota.new(nome, tipo, requisicao, dataInput, inputs, outputs)
312
+ # Return a routes array
290
313
  routes
291
314
  end
292
315
 
293
- # Métodos de decodificação da leitura
316
+ # Decoding clauses methods
317
+
318
+ # Verify if a given line has any clause
294
319
  def hasKeyword?(line, lineIndex, fileName)
295
320
  if (line.include? '#') && (line.include? '@')
296
321
  for i in 0..line.index('#')-1
@@ -301,16 +326,20 @@ class FileHandler
301
326
  for i in line.index('#')+1..line.index('@')-1
302
327
  if line[i].match(/^[[:alpha:]]$/)
303
328
  lineText = line.slice(line.index('#'), line.index("\n") - line.index('#'))
329
+ # A warning informing file and line is sent if a possible error is found
304
330
  puts "Warning: in #{fileName}:#{lineIndex}: #{lineText} is not a keyword"
305
331
  return false
306
332
  end
307
333
  end
334
+ # Return true if it do
308
335
  true
309
336
  else
337
+ # And false if it don't
310
338
  false
311
339
  end
312
340
  end
313
341
 
342
+ # The ** description clause has his own method seen that it has different syntax
314
343
  def hasDescription?(line, lineIndex, fileName)
315
344
  if (line.include? '#') && (line.include? '**')
316
345
  for i in 0..line.index('#')-1
@@ -321,22 +350,27 @@ class FileHandler
321
350
  for i in line.index('#')+1..line.index('**')-1
322
351
  if line[i].match(/^[[:alpha:]]$/)
323
352
  lineText = line.slice(line.index('#'), line.index("\n") - line.index('#'))
353
+ # A warning informing file and line is sent if a possible error is found
324
354
  puts "Warning: in #{fileName}:#{lineIndex}: #{lineText} is not a description"
325
355
  return false
326
356
  end
327
357
  end
358
+ # Return true if it has description clause
328
359
  true
329
360
  else
361
+ # And false if it don't
330
362
  false
331
363
  end
332
364
  end
333
365
 
366
+ # Decode which clause is on a given line, and which arguments
334
367
  def decodeArgument(line)
335
368
  args = []
336
369
  initialIndex = line.index('@') + 1
337
370
  finalIndex = line.index("\s", line.index('@'))
338
371
  if finalIndex == nil || initialIndex == nil
339
372
  if line.index('@')+1 == /^[[:alpha:]]$/
373
+ # Raises an Argument Error if some error is found
340
374
  raise ArgumentError.new("Sytanx error: expected 2 arguments (one given)")
341
375
  else raise ArgumentError.new("Sytanx error: expected 2 arguments (none given)")
342
376
  end
@@ -346,15 +380,17 @@ class FileHandler
346
380
  argument = line.slice(finalIndex + 1, line.size - finalIndex)
347
381
  args << keyword
348
382
  args << argument
383
+ # Return array with clause and arguments
349
384
  args
350
385
  end
351
386
 
387
+ # If the clause is a param or return value, decode the name and datatype
352
388
  def dataValue(argument)
353
389
  if argument.include? "\s"
354
390
  name = argument.slice(0, argument.index("\s"))
355
- type = argument.slice(argument.index("\s") + 1, argument.size - 1)
391
+ type = argument.slice(argument.index("\s") + 1, argument.size - 2)
356
392
  data = MethodParam.new(name, type)
357
- # data.printSelf
393
+ # Return the data
358
394
  return data
359
395
  elsif argument.include? "nil"
360
396
  data = MethodParam.new('', 'nil')
@@ -364,46 +400,62 @@ class FileHandler
364
400
  return data
365
401
  end
366
402
  argumentText = argument.slice(0, argument.index("\n"))
403
+ # If any information is missing or incorrect, raises an Argument Error
367
404
  raise ArgumentError.new("Sytanx error: #{argumentText} is no data")
368
405
  end
369
406
 
407
+ # Decode the text from a description clause
370
408
  def decodeDescription(line)
371
409
  initialIndex = line.index('*') + 3
372
410
  lenght = line.size - initialIndex
373
411
  description = line.slice(initialIndex, lenght)
374
- # puts "#{description}"
412
+ # Return the description text
375
413
  description
376
414
  end
377
415
 
378
- # Escrita dos arquivos
379
- def writeFiles(models, project, projectDescription, path)
380
- FileUtils.mkdir_p(path + 'css')
381
- css = File.open(path + 'css/master.css', 'w')
416
+ # File writing
417
+ def writeFiles(models, projectName, projectDescription, path)
418
+ outputFolder = path + "#{projectName}_PhariDoc/"
419
+ FileUtils.mkdir_p(outputFolder)
420
+ # Create the css/master.css file, which is default for any project
421
+ FileUtils.mkdir_p(outputFolder + 'css/')
422
+ css = File.open(outputFolder + 'css/master.css', 'w')
382
423
  writeCSS(css)
383
424
  css.close
384
- projectHTML = File.open(path + 'project.html', 'w')
425
+ # Write the project main page
426
+ projectHTML = File.open(outputFolder + 'project.html', 'w')
385
427
  writeHeader(projectHTML)
386
- writeProjectPage(project, projectHTML, models, projectDescription)
428
+ writeProjectPage(projectName, projectHTML, models, projectDescription)
387
429
  projectHTML.close
388
- FileUtils.mkdir_p(path + 'models')
430
+ # Write each model's page
431
+ FileUtils.mkdir_p(outputFolder + 'models/')
389
432
  models.each do |model|
390
433
  name = model.name.downcase
391
- modelHTML = File.open(path + "models/#{name}.html", 'w')
434
+ modelHTML = File.open(outputFolder + "models/#{name}.html", 'w')
392
435
  writeHeaderInDir(modelHTML)
393
- writeModelPage(modelHTML, model)
436
+ writeModelPage(modelHTML, model, projectName)
437
+ modelHTML.close
394
438
  end
395
439
  end
396
440
 
441
+ # Write the css content
397
442
  def writeCSS(file)
398
443
  file.write("body{
399
- background-color: #702794;
444
+ background-color: #2CA896;
400
445
  }
401
446
  a{
447
+ color: #2CA896;
448
+ }
449
+ a:hover{
402
450
  color: #333;
403
451
  }
404
452
  li{
405
453
  padding-left: 3%;
406
454
  }
455
+ code{
456
+ background-color: #DDD;
457
+ color: black;
458
+ }
407
459
  .logo{
408
460
  margin: 5%;
409
461
  }
@@ -418,6 +470,7 @@ class FileHandler
418
470
  }")
419
471
  end
420
472
 
473
+ # Write the HTML header
421
474
  def writeHeader(file)
422
475
  file.write("<!DOCTYPE html>
423
476
 
@@ -441,6 +494,7 @@ class FileHandler
441
494
  <br><br><br>")
442
495
  end
443
496
 
497
+ # Write the HTML header with relative paths
444
498
  def writeHeaderInDir(file)
445
499
  file.write("<!DOCTYPE html>
446
500
 
@@ -464,6 +518,7 @@ class FileHandler
464
518
  <br><br><br>")
465
519
  end
466
520
 
521
+ #Write the main project HTML content
467
522
  def writeProjectPage(project, file, models, description)
468
523
  file.write("<div class='container panel panel-default'>
469
524
  <div class='row'>
@@ -496,13 +551,14 @@ class FileHandler
496
551
  </body>")
497
552
  end
498
553
 
499
- def writeModelPage(file, model)
554
+ # Write a model HTML page content
555
+ def writeModelPage(file, model, project)
500
556
  name = model.name.capitalize
501
557
  file.write("<div class='container panel panel-default'>
502
558
  <div class='row'>
503
559
  <div class='panel panel-default'>
504
560
  <div class='panel-heading'>
505
- <h1>PhariSchool</h1>
561
+ <h1>#{project}</h1>
506
562
  </div>
507
563
  <div class='panel-body'>
508
564
  <h2>#{name} Model</h2>
@@ -525,15 +581,15 @@ class FileHandler
525
581
  outputs = method.outputs
526
582
  description = method.description
527
583
  file.write(" <div class='list-group-item'>
528
- <h4 class='list-group-item-heading'>#{type} - #{name}</h4>
529
- <p><br>Input:<br>
584
+ <h4 class='list-group-item-heading'>CRUD: #{type}<br>Name: #{name}</h4>
585
+ <p><br>Inputs:<br>
530
586
  <ul>")
531
587
  inputs.each do |input|
532
588
  type = input.type
533
589
  name = input.name
534
590
  file.write("<li>#{type}: #{name}</li>")
535
591
  end
536
- file.write("</ul><br>Output:<br>
592
+ file.write("</ul><br>Outputs:<br>
537
593
  <ul>")
538
594
  outputs.each do |output|
539
595
  if output != 'nil'
@@ -565,17 +621,17 @@ class FileHandler
565
621
  inputs = route.inputs
566
622
  outputs = route.outputs
567
623
  file.write(" <div class='list-group-item'>
568
- <h4 class='list-group-item-heading'>Route type #{type} - #{name}</h4>
624
+ <h4 class='list-group-item-heading'>CRUD: #{type}<br>Name: #{name}</h4>
569
625
  <p><br>Request: #{request}<br>
570
626
  <br>Notation type: #{dataInput}<br>
571
- <br>Input:<br>
627
+ <br>Inputs:<br>
572
628
  <ul>")
573
629
  inputs.each do |input|
574
630
  type = input.type
575
631
  name = input.name
576
632
  file.write("<li>#{type}: #{name}</li>")
577
633
  end
578
- file.write("</ul><br>Output:<br>
634
+ file.write("</ul><br>Outputs:<br>
579
635
  <ul>")
580
636
  outputs.each do |output|
581
637
  if output != 'nil'
@@ -1,3 +1,10 @@
1
+ #--------------------------------------------------------------------------------------------
2
+ # THE BEER-WARE LICENSE" (Revision 42): <luiz@phari.solutions> wrote this file.
3
+ # As long as you retain this notice you can do whatever you want with this stuff.
4
+ # If we meet some day, and you think this stuff is worth it, you can buy me a beer in return.
5
+ # Luiz Philippe.
6
+ #--------------------------------------------------------------------------------------------
7
+
1
8
  class MethodParam
2
9
  @name = ''
3
10
  @type = ''
@@ -1,3 +1,10 @@
1
+ #--------------------------------------------------------------------------------------------
2
+ # THE BEER-WARE LICENSE" (Revision 42): <luiz@phari.solutions> wrote this file.
3
+ # As long as you retain this notice you can do whatever you want with this stuff.
4
+ # If we meet some day, and you think this stuff is worth it, you can buy me a beer in return.
5
+ # Luiz Philippe.
6
+ #--------------------------------------------------------------------------------------------
7
+
1
8
  require_relative 'MethodParam.rb'
2
9
 
3
10
  class Metodo
@@ -1,3 +1,10 @@
1
+ #--------------------------------------------------------------------------------------------
2
+ # THE BEER-WARE LICENSE" (Revision 42): <luiz@phari.solutions> wrote this file.
3
+ # As long as you retain this notice you can do whatever you want with this stuff.
4
+ # If we meet some day, and you think this stuff is worth it, you can buy me a beer in return.
5
+ # Luiz Philippe.
6
+ #--------------------------------------------------------------------------------------------
7
+
1
8
  class Modelo
2
9
  @methods = []
3
10
  @routes = []
@@ -1,3 +1,10 @@
1
+ #--------------------------------------------------------------------------------------------
2
+ # THE BEER-WARE LICENSE" (Revision 42): <luiz@phari.solutions> wrote this file.
3
+ # As long as you retain this notice you can do whatever you want with this stuff.
4
+ # If we meet some day, and you think this stuff is worth it, you can buy me a beer in return.
5
+ # Luiz Philippe.
6
+ #--------------------------------------------------------------------------------------------
7
+
1
8
  class Rota
2
9
  @type = ''
3
10
  @name = ''
data/lib/phari_doc_gen.rb CHANGED
@@ -1,3 +1,10 @@
1
+ #--------------------------------------------------------------------------------------------
2
+ # THE BEER-WARE LICENSE" (Revision 42): <luiz@phari.solutions> wrote this file.
3
+ # As long as you retain this notice you can do whatever you want with this stuff.
4
+ # If we meet some day, and you think this stuff is worth it, you can buy me a beer in return.
5
+ # Luiz Philippe.
6
+ #--------------------------------------------------------------------------------------------
7
+
1
8
  require 'fileutils'
2
9
  require_relative 'phari_doc_gen/Modelo.rb'
3
10
  require_relative 'phari_doc_gen/Rota.rb'
@@ -6,29 +13,31 @@ require_relative 'phari_doc_gen/MethodParam.rb'
6
13
  require_relative 'phari_doc_gen/FileHandler.rb'
7
14
 
8
15
  class PhariDocGen
9
- def generate (project, path)
10
- if project == nil
16
+ # Generate documentation for standard projects
17
+ def generate (project, outputPath)
18
+ generate = FileHandler.new
19
+ # Ask for project name if nil
20
+ if project.nil?
11
21
  puts "Insert project which generate documentation"
12
22
  project = gets.chomp
23
+ while project == ''
24
+ project = gets.chomp
25
+ end
13
26
  end
14
- if project == ''
15
- puts 'Aborting generation due to empty project name'
16
- exit
17
- end
18
- generate = FileHandler.new
19
- projectDescription = generate.readProject(project)
20
- models = generate.readFiles(project)
21
- if path == nil
22
- puts 'Insert full path to output file'
23
- path = gets.chomp
24
- end
25
- path += '/' unless path.end_with?('/')
26
- path = '/'+path unless path.start_with?('/')
27
- if path == ''
28
- puts 'Aborting generation due to empty path'
29
- exit
27
+ # Verify the existence of the project
28
+ projectPath = generate.packageExistis?(project)
29
+ # Get description from README.md
30
+ projectDescription = generate.readProject(projectPath)
31
+ # Get models with their methods and routes
32
+ models = generate.readFiles(projectPath)
33
+ # Specify the output path
34
+ if outputPath.nil?
35
+ outputPath = ''
36
+ else
37
+ outputPath += '/' unless outputPath.end_with?('/')
30
38
  end
31
- generate.writeFiles(models, project, projectDescription, path)
39
+ # Write documentation
40
+ generate.writeFiles(models, project, projectDescription, outputPath)
32
41
  puts 'Done!'
33
42
  end
34
43
  end
metadata CHANGED
@@ -1,24 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phari_doc_gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Phari
7
+ - Phari Solutions
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-25 00:00:00.000000000 Z
11
+ date: 2017-05-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A documentation generator gem for projects following sinatra-padrino
14
- patterns.
15
- email: luizphilippep@gmail.com
13
+ description: |2-
14
+ Hi there buddy! I've heard you've been looking for a simple
15
+ and functional documentation generator for this Ruby web app
16
+ of yours. So here goes a brief tutorial on how to use this
17
+ little gem developed by Phari Solutions. First things first.
18
+ To use this gem, you will need to be following the sinatra/padrino
19
+ patterns. If you're using those frameworks probably you already
20
+ matched the requisites, otherwise, organize your folders properly.
21
+ Your project tree has to be organized in a main directory called
22
+ 'api' that must contain another folder 'app' with three other
23
+ directories 'models', 'helpers' and 'controllers' within. The files will
24
+ also have to be especifically named. But we'll look further into it
25
+ later. Now, requisites aside, Phari Doc Generator will provide you
26
+ an easy way to generate documentation for your projects. The result
27
+ will be a project page with a description that can be written using a simplified
28
+ markdown syntax that is going to be explained ahead. Also, each ruby
29
+ Class will have it's own page especifying it's helper methods and controllers
30
+ routes including their inputs, outputs and descriptions. The gem includes
31
+ an executable file and the classes that can be used individually,
32
+ providing the possibility to use the generator for any project
33
+ structure. See full documentation in:
34
+ email: contact@phari.solutions
16
35
  executables:
17
- - generate
36
+ - phari_doc_gen
18
37
  extensions: []
19
38
  extra_rdoc_files: []
20
39
  files:
21
- - bin/generate
40
+ - bin/phari_doc_gen
22
41
  - lib/phari_doc_gen.rb
23
42
  - lib/phari_doc_gen/FileHandler.rb
24
43
  - lib/phari_doc_gen/MethodParam.rb
@@ -27,7 +46,7 @@ files:
27
46
  - lib/phari_doc_gen/Rota.rb
28
47
  homepage: ''
29
48
  licenses:
30
- - MIT
49
+ - Beerware
31
50
  metadata: {}
32
51
  post_install_message:
33
52
  rdoc_options: []
@@ -48,5 +67,5 @@ rubyforge_project:
48
67
  rubygems_version: 2.5.1
49
68
  signing_key:
50
69
  specification_version: 4
51
- summary: 'Main classes: PhariDocGen && PhariDocGen/FileHandler'
70
+ summary: 'Main classes: PhariDocGen && FileHandler'
52
71
  test_files: []