CapicuaGen 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -22,6 +22,7 @@ Para más información consultar http://www.gnu.org/licenses/lgpl.html
22
22
  require 'active_support/core_ext/object/blank'
23
23
  require_relative 'Mixins/reflection_mixin'
24
24
  require_relative 'generator_command_line'
25
+ require_relative '../CapicuaGen/Examples/Example/Source/example_feature'
25
26
 
26
27
  module CapicuaGen
27
28
 
@@ -34,7 +35,7 @@ module CapicuaGen
34
35
 
35
36
  public
36
37
 
37
- attr_accessor :generation_attributes, :retry_failed, :continue_on_failed, :retries, :local_feature_directory
38
+ attr_accessor :generation_attributes, :retry_failed, :continue_on_failed, :retries, :local_templates
38
39
  attr_accessor :message_helper, :start_time, :end_time, :argv_options
39
40
 
40
41
  # Inicializo el objeto
@@ -43,29 +44,29 @@ module CapicuaGen
43
44
 
44
45
 
45
46
  # Valores determinados
46
- @retry_failed = true unless @retry_failed
47
- @retries = 1 unless @retries
48
- @continue_on_failed = true unless @continue_on_failed
49
- @local_feactures_directory= 'Capicua' unless @local_features_directory
47
+ @retry_failed = true unless @retry_failed
48
+ @retries = 1 unless @retries
49
+ @continue_on_failed = true unless @continue_on_failed
50
+ @local_templates = 'Capicua' unless @local_templates
50
51
 
51
52
  # Colecciones de caracteristicas que posee el generador
52
- @features = []
53
+ @features = []
53
54
 
54
55
  # Caraceristicas a ejecutar
55
- @targets = []
56
+ @targets = []
56
57
 
57
58
  # Atributos generales de generacion
58
- @generation_attributes = AttributeMixer.new
59
+ @generation_attributes = AttributeMixer.new
59
60
 
60
61
  # Configuro el gestor de mensajes
61
- @message_helper = MessageHelper.new
62
+ @message_helper = MessageHelper.new
62
63
 
63
64
  # Hora de comienzo y final
64
- @start_time = Time.now
65
- @end_time = Time.now
65
+ @start_time = Time.now
66
+ @end_time = Time.now
66
67
 
67
68
  # Opciones
68
- @argv_options =OpenStruct.new
69
+ @argv_options =OpenStruct.new
69
70
 
70
71
  # Aranco configuracion si es necesario
71
72
  yield self if block_given?
@@ -167,21 +168,40 @@ module CapicuaGen
167
168
  end
168
169
 
169
170
  # Genera todos las caracteristicas
170
- def generate
171
+ def generate(values={})
171
172
 
172
- @start_time = Time.now
173
+ no_arguments=values[:no_arguments]
174
+ if values[:arguments]
175
+ arguments=Array(values[:arguments])
176
+ else
177
+ arguments=ARGV.clone
178
+ end
179
+
180
+ start_time = Time.now
173
181
 
174
182
  # Reviso argumentos
175
- argv =ARGV.clone
176
- @argv_options =parse_command_line(argv)
177
183
 
178
- return if @argv_options.exit
184
+ unless no_arguments
185
+ argv =arguments.clone
186
+ @argv_options =parse_command_line(argv)
179
187
 
180
- if @argv_options.clean
181
- clean
182
- end
188
+ return if @argv_options.exit
189
+
190
+ if @argv_options.clean
191
+ clean
192
+ end
193
+
194
+ if @argv_options.example
195
+ generate_example
196
+ return
197
+ end
183
198
 
184
- return unless @argv_options.generate
199
+ generate_list if @argv_options.template_list
200
+
201
+ generate_export_template @argv_options if @argv_options.template and not @argv_options.template_list
202
+
203
+ return unless @argv_options.generate
204
+ end
185
205
 
186
206
  @targets.each do |t|
187
207
 
@@ -196,6 +216,13 @@ module CapicuaGen
196
216
  targets= [] + @targets
197
217
  retries= @retries + 1
198
218
 
219
+ # Veo si debo hacer algo, si no muestro la ayuda
220
+ if targets.blank?
221
+ parse_command_line(["-h"])
222
+ return
223
+ end
224
+
225
+
199
226
  # Posibles reintentos
200
227
  retries.times do
201
228
 
@@ -208,34 +235,37 @@ module CapicuaGen
208
235
 
209
236
  feature= get_feature_by_name(t.feature_name)
210
237
 
211
- next if @argv_options.ignore_features.include? feature.name
238
+ next if @argv_options and @argv_options.ignore_features and @argv_options.ignore_features.include? feature.name
212
239
 
213
240
  begin
214
241
  feature.generate
215
242
  targets.delete(t)
216
243
  rescue => e
217
- $stderr.puts e
218
- $stderr.puts e.backtrace
244
+ message_helper.puts_catched_error e
219
245
  end
220
246
  end
221
247
 
222
248
  end
223
249
 
224
- @end_time=Time.now
250
+ end_time=Time.now
225
251
 
226
252
  puts
227
- message_helper.puts_end_generate(@start_time, @end_time)
253
+ message_helper.puts_end_generate(start_time, end_time)
228
254
 
229
255
  end
230
256
 
231
257
 
232
258
  # Genera todos las caracteristicas
233
- def clean
234
-
235
- @start_time = Time.now
259
+ def clean(values ={})
260
+ @start_time = Time.now
236
261
 
237
262
  # Reviso argumentos
238
- argv =ARGV.clone
263
+ if values[:arguments]
264
+ arguments=Array(values[:arguments])
265
+ else
266
+ arguments=ARGV.clone
267
+ end
268
+ argv =arguments
239
269
  @argv_options =parse_command_line(argv)
240
270
 
241
271
  return if @argv_options.exit
@@ -271,8 +301,7 @@ module CapicuaGen
271
301
  feature.clean
272
302
  targets.delete(t)
273
303
  rescue => e
274
- $stderr.puts e
275
- $stderr.puts e.backtrace
304
+ message_helper.puts_catched_error e
276
305
  end
277
306
  end
278
307
 
@@ -285,5 +314,101 @@ module CapicuaGen
285
314
 
286
315
  end
287
316
 
317
+
318
+ def generate_example()
319
+
320
+ arguments= ['generate']
321
+
322
+ argv_options =parse_command_line(ARGV)
323
+
324
+
325
+ generator_example = CapicuaGen::Generator.new do |g|
326
+
327
+ # Creo las caracteristicas necesarias
328
+ feature_example = CapicuaGen::ExampleFeature.new(:name => 'feature_example')
329
+
330
+ # Agrego las caracteristica en al generador
331
+ g.add_feature_and_target feature_example
332
+
333
+ # Configuro los atributos
334
+ g.generation_attributes.add :out_dir => argv_options.out
335
+
336
+ end
337
+
338
+
339
+ arguments << "--force" if argv_options.force
340
+
341
+ generator_example.generate :arguments => arguments
342
+
343
+ end
344
+
345
+ def generate_list
346
+ templates=[]
347
+
348
+ dir = File.join(File.dirname(__FILE__), '../../..')
349
+
350
+ Dir["#{dir}/**/*"].select { |e| File.file? e and e=~/Template/ }.each do |f|
351
+
352
+ feature_template=get_gem_type_feature(f)
353
+ templates<<feature_template if feature_template
354
+
355
+ end
356
+
357
+ templates.uniq.each do |feature_template|
358
+ message_helper.puts_list_template(feature_template[:gem], feature_template[:type], feature_template[:feature]) if feature_template
359
+ end
360
+
361
+
362
+ end
363
+
364
+ def generate_export_template(options)
365
+ templates=[]
366
+
367
+ dir = File.join(File.dirname(__FILE__), '../../..')
368
+
369
+ Dir["#{dir}/**/*"].select { |e| File.file? e and e=~/Template/ }.each do |template_file|
370
+
371
+
372
+ feature_template=get_gem_type_feature(template_file)
373
+
374
+ next unless feature_template
375
+
376
+ next unless feature_template[:gem]=~ /#{options.template_gem}/
377
+ next unless feature_template[:type]=~ /#{options.template_type}/
378
+ next unless feature_template[:feature]=~ /#{options.template_feature}/
379
+
380
+
381
+ out_file=File.join(options.template_out, feature_template[:gem], feature_template[:type], feature_template[:feature], File.basename(template_file))
382
+
383
+ exists= File.exist?(out_file)
384
+
385
+ if not exists or options.force
386
+
387
+ # Creo el directorio
388
+ FileUtils::mkdir_p File.dirname(out_file)
389
+ FileUtils.cp template_file, out_file
390
+
391
+ if exists
392
+ message_helper.puts_copy_template(feature_template[:gem], feature_template[:type], feature_template[:feature], out_file, :override)
393
+ else
394
+ message_helper.puts_copy_template(feature_template[:gem], feature_template[:type], feature_template[:feature], out_file, :new)
395
+ end
396
+
397
+ else
398
+ message_helper.puts_copy_template(feature_template[:gem], feature_template[:type], feature_template[:feature], out_file, :ignore)
399
+ end
400
+
401
+
402
+ end
403
+ end
404
+
405
+ def get_gem_type_feature(file)
406
+ if file=~/([^\/*]+)\/([^\/*?]+)\/([^\/*?]+)\/Template\//i
407
+ return { :gem => $1, :type => $2, :feature => $3 }
408
+ else
409
+ return nil
410
+ end
411
+ end
412
+
288
413
  end
289
414
  end
@@ -50,6 +50,7 @@ Comandos:
50
50
  clean : Limpia los archivos generados.
51
51
  cleanAndGenerate : Limpia los archivos generados y luego los vuelve a crear.
52
52
  example : Genera un ejemplo
53
+ template : Lista o permite reemplazar plantillas por defecto.
53
54
 
54
55
 
55
56
  Ejecute 'opt.rb COMMAND --help' para obtener mas
@@ -85,6 +86,7 @@ HELP
85
86
  # List of arguments.
86
87
  opts.on("--ignore featurename1, featurename2, featurename2", Array, "Lista de caracteristicas que sera omitidas") do |ignore_features|
87
88
  options.ignore_features = ignore_features
89
+ options.ignore_features =[] unless options.ignore_features
88
90
  end
89
91
 
90
92
  opts.on("-f", "--force", "Fuerza que se sobreescriban las carateristicas generadas") do
@@ -143,14 +145,60 @@ HELP
143
145
 
144
146
 
145
147
  'example' => OptionParser.new do |opts|
146
- opts.banner = "Uso: cleanAndGenerate [options]"
148
+ opts.banner = "Uso: example [options]"
147
149
  opts.separator ""
148
150
  opts.separator "Opciones:"
149
151
  opts.separator ""
150
152
 
153
+
154
+ opts.on("-o", "--out directorio", "Directorio de salida") do |directorio|
155
+ options.out = directorio
156
+ end
157
+
158
+ opts.on("-f", "--force", "Se sobreescribe el ejemplo") do
159
+ options.force= true
160
+ end
161
+
162
+ opts.on_tail("-h", "--help", "Muestra este mensaje") do
163
+ puts opts
164
+ options.help=true
165
+ options.exit=true
166
+ end
167
+
168
+ opts.separator ""
169
+ end,
170
+
171
+
172
+ 'template' => OptionParser.new do |opts|
173
+ opts.banner = "Uso: template [options]"
174
+ opts.separator ""
175
+ opts.separator "Opciones:"
176
+ opts.separator ""
177
+
178
+
179
+ # List of arguments.
180
+ opts.on("-l", "--list", "Lista los templates instalados") do
181
+ options.template_list = true
182
+ end
183
+
184
+ # Gema instalada
185
+ opts.on("-g", "--gem gema", "Gema (instalada) a obtener") do |template_gem|
186
+ options.template_gem = template_gem
187
+ end
188
+
189
+ # Tipo de caracteristica
190
+ opts.on("-t", "--type tipo", "Tipos de carecteristica") do |type|
191
+ options.template_type = type
192
+ end
193
+
194
+ # Tipo de caracteristica
195
+ opts.on("-f", "--feature caracteristica", "Carecteristica") do |feature|
196
+ options.template_feature = feature
197
+ end
198
+
151
199
  # List of arguments.
152
200
  opts.on("-o", "--out directorio", "") do |directorio|
153
- options.out = directorio
201
+ options.template_out = directorio
154
202
  end
155
203
 
156
204
  opts.on_tail("-h", "--help", "Muestra este mensaje") do
@@ -161,7 +209,6 @@ HELP
161
209
 
162
210
  opts.separator ""
163
211
  end
164
-
165
212
  }
166
213
 
167
214
 
@@ -191,6 +238,11 @@ HELP
191
238
  options.example =true
192
239
  options.out ='.'
193
240
 
241
+ when 'template'
242
+ options.clean =false
243
+ options.generate =false
244
+ options.template =true
245
+ options.template_out ='capicua'
194
246
  end
195
247
 
196
248
  subcommands[command].order! internal_args
@@ -147,12 +147,13 @@ module CapicuaGen
147
147
 
148
148
  def configure_template_directories
149
149
  # Configuro las rutas de los templates
150
- self.template_directories << get_template_local_dir(get_class_file)
150
+ template_local_dir = get_template_local_dir(get_class_file)
151
+ self.template_directories << template_local_dir if template_local_dir
151
152
  self.template_directories << File.join(File.dirname(get_class_file), '../template')
152
153
 
153
154
  end
154
155
 
155
- # Configura los objetivos de las platillas (despues de establecer el generador)
156
+ # Configura los objetivos de las platillas (despues de establecer el generador)
156
157
  def configure_template_targets
157
158
 
158
159
  end
@@ -216,18 +217,24 @@ module CapicuaGen
216
217
 
217
218
  exists= File.exist?(out_file)
218
219
 
219
- FileUtils.cp template_file, out_file
220
+ # Creo el directorio
221
+ FileUtils::mkdir_p File.dirname(out_file)
220
222
 
221
223
  if exists
222
- message_helper.puts_created_template(File.basename(out_file), out_file, :override)
224
+ if @generator.argv_options.force
225
+ FileUtils.cp template_file, out_file
226
+ message_helper.puts_created_template(File.basename(out_file), out_file, :override)
227
+ else
228
+ message_helper.puts_created_template(File.basename(out_file), out_file, :ignore)
229
+ end
223
230
  else
231
+ FileUtils.cp template_file, out_file
224
232
  message_helper.puts_created_template(File.basename(out_file), out_file, :new)
225
233
  end
226
234
 
227
-
228
235
  else
229
236
  # Creo la salida
230
- return TemplateHelper.generate_template(template_file, current_binding, :out_file => out_file, :feature => self, :force => argv_options.force)
237
+ return TemplateHelper.generate_template(template_file, current_binding, :out_file => out_file, :feature => self, :force => @generator.argv_options.force)
231
238
  end
232
239
 
233
240
 
@@ -289,10 +296,19 @@ module CapicuaGen
289
296
  protected
290
297
  # Directorio local para obtener los templates
291
298
  def get_template_local_dir(file)
292
- feacture_directory= File.dirname(file).split('/')
293
- feacture_name = feacture_directory[feacture_directory.count-2]
294
- package_name = feacture_directory[feacture_directory.count-3]
295
- return File.join(@generator.local_feature_directory, package_name, feacture_name, 'Template')
299
+ begin
300
+ feacture_directory= File.dirname(file).split('/')
301
+ feacture_name = feacture_directory[feacture_directory.count-2]
302
+ package_name = feacture_directory[feacture_directory.count-3]
303
+ gem_name = feacture_directory[feacture_directory.count-4]
304
+ template_local = File.join(@generator.local_templates, gem_name, package_name, feacture_name)
305
+
306
+ return template_local
307
+
308
+ rescue
309
+ #Seguramente no sigue la estructura indicada para templates
310
+ return nil
311
+ end
296
312
  end
297
313
 
298
314
 
@@ -1,3 +1,3 @@
1
- module CapicuaGen
2
- VERSION = "0.0.3"
3
- end
1
+ module CapicuaGen
2
+ VERSION = "0.1.0"
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: CapicuaGen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - José Luis Bautista Martín
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-15 00:00:00.000000000 Z
11
+ date: 2016-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,6 +98,20 @@ dependencies:
98
98
  - - "~>"
99
99
  - !ruby/object:Gem::Version
100
100
  version: '2.1'
101
+ - !ruby/object:Gem::Dependency
102
+ name: colorize
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: 0.7.7
108
+ type: :runtime
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: 0.7.7
101
115
  description: |-
102
116
  CapicuaGen es un software que ayuda a la creación automática de
103
117
  sistemas empresariales a través de la definición y ensamblado de
@@ -117,7 +131,7 @@ description: |-
117
131
  email:
118
132
  - joseluisbautista@gmail.com
119
133
  executables:
120
- - capicuagen.rb
134
+ - capicuagen
121
135
  extensions: []
122
136
  extra_rdoc_files: []
123
137
  files:
@@ -133,11 +147,11 @@ files:
133
147
  - Rakefile
134
148
  - bin/console
135
149
  - bin/setup
136
- - exe/capicuagen.rb
150
+ - exe/capicuagen
137
151
  - lib/CapicuaGen/Examples/Example/Source/example_feature.rb
138
- - lib/CapicuaGen/Examples/Example/Template/SplashForm.designer.erb
139
- - lib/CapicuaGen/Examples/Example/Template/SplashForm.erb
140
- - lib/CapicuaGen/Examples/Example/Template/SplashForm.resx.erb
152
+ - lib/CapicuaGen/Examples/Example/Template/Gemfile.erb
153
+ - lib/CapicuaGen/Examples/Example/Template/generator.erb
154
+ - lib/CapicuaGen/Examples/Example/Template/instnwnd.erb
141
155
  - lib/CapicuaGen/Mixins/attributes_mixin.rb
142
156
  - lib/CapicuaGen/Mixins/parameter_mixin.rb
143
157
  - lib/CapicuaGen/Mixins/reflection_mixin.rb
@@ -168,7 +182,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
182
  requirements:
169
183
  - - ">="
170
184
  - !ruby/object:Gem::Version
171
- version: '0'
185
+ version: 2.0.0
172
186
  required_rubygems_version: !ruby/object:Gem::Requirement
173
187
  requirements:
174
188
  - - ">="