CapicuaGen 0.0.3 → 0.1.0
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.
- checksums.yaml +4 -4
- data/.gitignore +23 -19
- data/.rspec +2 -2
- data/.travis.yml +4 -4
- data/CODE_OF_CONDUCT.md +48 -48
- data/CapicuaGen.gemspec +60 -57
- data/Gemfile +4 -4
- data/README.md +57 -36
- data/Rakefile +2 -2
- data/bin/console +14 -14
- data/bin/setup +8 -8
- data/exe/{capicuagen.rb → capicuagen} +2 -0
- data/lib/CapicuaGen/Examples/Example/Source/example_feature.rb +2 -2
- data/lib/CapicuaGen/Examples/Example/Template/Gemfile.erb +8 -0
- data/lib/CapicuaGen/Examples/Example/Template/generator.erb +240 -0
- data/lib/CapicuaGen/Examples/Example/Template/instnwnd.erb +9336 -0
- data/lib/CapicuaGen/Tools/message_helper.rb +45 -6
- data/lib/CapicuaGen/Tools/template_helper.rb +86 -86
- data/lib/CapicuaGen/Tools/xml_helper.rb +100 -100
- data/lib/CapicuaGen/generator.rb +157 -32
- data/lib/CapicuaGen/generator_command_line.rb +55 -3
- data/lib/CapicuaGen/template_feature.rb +26 -10
- data/lib/CapicuaGen/version.rb +3 -3
- metadata +22 -8
- data/lib/CapicuaGen/Examples/Example/Template/SplashForm.designer.erb +0 -141
- data/lib/CapicuaGen/Examples/Example/Template/SplashForm.erb +0 -160
- data/lib/CapicuaGen/Examples/Example/Template/SplashForm.resx.erb +0 -535
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
=begin
|
3
2
|
|
4
3
|
CapicuaGen
|
@@ -20,6 +19,7 @@ Este software es código libre, y se licencia bajo LGPL.
|
|
20
19
|
Para más información consultar http://www.gnu.org/licenses/lgpl.html
|
21
20
|
=end
|
22
21
|
|
22
|
+
require 'colorize'
|
23
23
|
|
24
24
|
# Agrega opciones de refleccion a las clases que lo implementan
|
25
25
|
module CapicuaGen
|
@@ -75,21 +75,30 @@ module CapicuaGen
|
|
75
75
|
|
76
76
|
case mode
|
77
77
|
when :override
|
78
|
-
result= "* #{template} -> '#{out_file}': Sobreescrito"
|
78
|
+
result= "* #{template}".colorize(:yellow) + " -> '#{out_file}': Sobreescrito"
|
79
79
|
when :new
|
80
|
-
result= "+ #{template} -> '#{out_file}': Creado"
|
80
|
+
result= "+ #{template}".colorize(:blue) + " -> '#{out_file}': Creado"
|
81
81
|
when :ignore
|
82
|
-
result= "! #{template} -> '#{out_file}': NO creado"
|
82
|
+
result= "! #{template}".colorize(:red) + " -> '#{out_file}': NO creado"
|
83
83
|
when :delete
|
84
|
-
result= "- #{template} -> '#{out_file}': Eliminado"
|
84
|
+
result= "- #{template}".colorize(:magenta) + " -> '#{out_file}': Eliminado"
|
85
85
|
else
|
86
|
-
result= "? #{template} -> '#{out_file}': #{mode.to_s}"
|
86
|
+
result= "? #{template}".colorize(:red) + " -> '#{out_file}': #{mode.to_s}"
|
87
87
|
end
|
88
88
|
|
89
89
|
puts_message result
|
90
90
|
|
91
91
|
end
|
92
92
|
|
93
|
+
# Mesaje para template copiado
|
94
|
+
def puts_copy_template(gem, type, feature, out_file, mode)
|
95
|
+
|
96
|
+
result = ''
|
97
|
+
template= "#{gem}, #{type}, #{feature}"
|
98
|
+
puts_created_template(template, out_file, mode)
|
99
|
+
|
100
|
+
end
|
101
|
+
|
93
102
|
# Mensaje gneracion acabada
|
94
103
|
def puts_end_generate(start_time, end_time)
|
95
104
|
|
@@ -98,6 +107,36 @@ module CapicuaGen
|
|
98
107
|
puts
|
99
108
|
end
|
100
109
|
|
110
|
+
# Mesaje para plantilla creada
|
111
|
+
def puts_list_template(gem, file, feature)
|
112
|
+
puts_message "- gem:".colorize(:red) + " '#{gem}', " + "type: ".colorize(:yellow) + "'#{file}', " + "feature: ".colorize(:blue) + "'#{feature}'"
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
def puts_catched_error(e)
|
117
|
+
$stderr.puts e.to_s.colorize(:red)
|
118
|
+
$stderr.puts
|
119
|
+
$stderr.puts e.backtrace.join($/).to_s.colorize(:red)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Indica que un archivo fue modificado
|
123
|
+
def puts_file_modified(out_file, mode)
|
124
|
+
case mode
|
125
|
+
when :override
|
126
|
+
result= "*".colorize(:yellow) + " -> '#{out_file}': Modificado"
|
127
|
+
when :new
|
128
|
+
result= "+".colorize(:blue) + " -> '#{out_file}': Creado"
|
129
|
+
when :ignore
|
130
|
+
result= "!".colorize(:red) + " -> '#{out_file}': NO modificado"
|
131
|
+
when :delete
|
132
|
+
result= "-".colorize(:magenta) + " -> '#{out_file}': Eliminado"
|
133
|
+
else
|
134
|
+
result= "?".colorize(:red) + " -> '#{out_file}': #{mode.to_s}"
|
135
|
+
end
|
136
|
+
puts_message result
|
137
|
+
|
138
|
+
end
|
139
|
+
|
101
140
|
|
102
141
|
end
|
103
142
|
|
@@ -1,87 +1,87 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
CapicuaGen
|
4
|
-
|
5
|
-
CapicuaGen es un software que ayuda a la creación automática de
|
6
|
-
sistemas empresariales a través de la definición y ensamblado de
|
7
|
-
diversos generadores de características.
|
8
|
-
|
9
|
-
El proyecto fue iniciado por José Luis Bautista Martin, el 6 de enero
|
10
|
-
del 2016.
|
11
|
-
|
12
|
-
Puede modificar y distribuir este software, según le plazca, y usarlo
|
13
|
-
para cualquier fin ya sea comercial, personal, educativo, o de cualquier
|
14
|
-
índole, siempre y cuando incluya este mensaje, y se permita acceso el
|
15
|
-
código fuente.
|
16
|
-
|
17
|
-
Este software es código libre, y se licencia bajo LGPL.
|
18
|
-
|
19
|
-
Para más información consultar http://www.gnu.org/licenses/lgpl.html
|
20
|
-
=end
|
21
|
-
|
22
|
-
|
23
|
-
module CapicuaGen
|
24
|
-
|
25
|
-
require 'fileutils'
|
26
|
-
require 'ERB'
|
27
|
-
|
28
|
-
|
29
|
-
# Clase ayudante para crear arvhiso a partir de Template
|
30
|
-
class TemplateHelper
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def initialize
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
public
|
39
|
-
|
40
|
-
# Genera un archivo en base a un template
|
41
|
-
def self.generate_template (erb_file, current_binding, values= {})
|
42
|
-
|
43
|
-
|
44
|
-
erb = ERB.new(File.open(erb_file, 'r').read)
|
45
|
-
|
46
|
-
|
47
|
-
# Archivo de salida
|
48
|
-
out_file = values[:out_file] if values[:out_file]
|
49
|
-
force = values[:force] if values[:force]
|
50
|
-
|
51
|
-
#caracteristica
|
52
|
-
feature = values[:feature] if values[:feature]
|
53
|
-
message_helper= feature.message_helper if feature
|
54
|
-
message_helper= MessageHelper.new unless message_helper
|
55
|
-
|
56
|
-
# Genero la plantilla
|
57
|
-
result = erb.result(current_binding)
|
58
|
-
|
59
|
-
# Devuelve el resultado si no hay archivo de salida
|
60
|
-
return result unless out_file
|
61
|
-
|
62
|
-
|
63
|
-
exists= File.exist?(out_file)
|
64
|
-
|
65
|
-
|
66
|
-
if exists and not force
|
67
|
-
message_helper.puts_created_template(File.basename(erb_file), out_file, :ignore)
|
68
|
-
return result
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
|
-
# Creo el directorio
|
73
|
-
FileUtils::mkdir_p File.dirname(out_file)
|
74
|
-
|
75
|
-
# Escribo el resultado
|
76
|
-
File.open(out_file, 'w') { |file| file.write(result) }
|
77
|
-
|
78
|
-
if exists
|
79
|
-
message_helper.puts_created_template(File.basename(erb_file), out_file, :override)
|
80
|
-
else
|
81
|
-
message_helper.puts_created_template(File.basename(erb_file), out_file, :new)
|
82
|
-
end
|
83
|
-
|
84
|
-
return result
|
85
|
-
end
|
86
|
-
end
|
1
|
+
=begin
|
2
|
+
|
3
|
+
CapicuaGen
|
4
|
+
|
5
|
+
CapicuaGen es un software que ayuda a la creación automática de
|
6
|
+
sistemas empresariales a través de la definición y ensamblado de
|
7
|
+
diversos generadores de características.
|
8
|
+
|
9
|
+
El proyecto fue iniciado por José Luis Bautista Martin, el 6 de enero
|
10
|
+
del 2016.
|
11
|
+
|
12
|
+
Puede modificar y distribuir este software, según le plazca, y usarlo
|
13
|
+
para cualquier fin ya sea comercial, personal, educativo, o de cualquier
|
14
|
+
índole, siempre y cuando incluya este mensaje, y se permita acceso el
|
15
|
+
código fuente.
|
16
|
+
|
17
|
+
Este software es código libre, y se licencia bajo LGPL.
|
18
|
+
|
19
|
+
Para más información consultar http://www.gnu.org/licenses/lgpl.html
|
20
|
+
=end
|
21
|
+
|
22
|
+
|
23
|
+
module CapicuaGen
|
24
|
+
|
25
|
+
require 'fileutils'
|
26
|
+
require 'ERB'
|
27
|
+
|
28
|
+
|
29
|
+
# Clase ayudante para crear arvhiso a partir de Template
|
30
|
+
class TemplateHelper
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def initialize
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
public
|
39
|
+
|
40
|
+
# Genera un archivo en base a un template
|
41
|
+
def self.generate_template (erb_file, current_binding, values= {})
|
42
|
+
|
43
|
+
|
44
|
+
erb = ERB.new(File.open(erb_file, 'r').read)
|
45
|
+
|
46
|
+
|
47
|
+
# Archivo de salida
|
48
|
+
out_file = values[:out_file] if values[:out_file]
|
49
|
+
force = values[:force] if values[:force]
|
50
|
+
|
51
|
+
#caracteristica
|
52
|
+
feature = values[:feature] if values[:feature]
|
53
|
+
message_helper= feature.message_helper if feature
|
54
|
+
message_helper= MessageHelper.new unless message_helper
|
55
|
+
|
56
|
+
# Genero la plantilla
|
57
|
+
result = erb.result(current_binding)
|
58
|
+
|
59
|
+
# Devuelve el resultado si no hay archivo de salida
|
60
|
+
return result unless out_file
|
61
|
+
|
62
|
+
|
63
|
+
exists= File.exist?(out_file)
|
64
|
+
|
65
|
+
|
66
|
+
if exists and not force
|
67
|
+
message_helper.puts_created_template(File.basename(erb_file), out_file, :ignore)
|
68
|
+
return result
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
# Creo el directorio
|
73
|
+
FileUtils::mkdir_p File.dirname(out_file)
|
74
|
+
|
75
|
+
# Escribo el resultado
|
76
|
+
File.open(out_file, 'w') { |file| file.write(result) }
|
77
|
+
|
78
|
+
if exists
|
79
|
+
message_helper.puts_created_template(File.basename(erb_file), out_file, :override)
|
80
|
+
else
|
81
|
+
message_helper.puts_created_template(File.basename(erb_file), out_file, :new)
|
82
|
+
end
|
83
|
+
|
84
|
+
return result
|
85
|
+
end
|
86
|
+
end
|
87
87
|
end
|
@@ -1,100 +1,100 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
CapicuaGen
|
4
|
-
|
5
|
-
CapicuaGen es un software que ayuda a la creación automática de
|
6
|
-
sistemas empresariales a través de la definición y ensamblado de
|
7
|
-
diversos generadores de características.
|
8
|
-
|
9
|
-
El proyecto fue iniciado por José Luis Bautista Martin, el 6 de enero
|
10
|
-
del 2016.
|
11
|
-
|
12
|
-
Puede modificar y distribuir este software, según le plazca, y usarlo
|
13
|
-
para cualquier fin ya sea comercial, personal, educativo, o de cualquier
|
14
|
-
índole, siempre y cuando incluya este mensaje, y se permita acceso el
|
15
|
-
código fuente.
|
16
|
-
|
17
|
-
Este software es código libre, y se licencia bajo LGPL.
|
18
|
-
|
19
|
-
Para más información consultar http://www.gnu.org/licenses/lgpl.html
|
20
|
-
=end
|
21
|
-
|
22
|
-
require 'nokogiri'
|
23
|
-
require "rexml/document"
|
24
|
-
|
25
|
-
module CapicuaGen
|
26
|
-
|
27
|
-
# Clase ayudante para tratar con archivos XML
|
28
|
-
class XMLHelper
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
public
|
37
|
-
|
38
|
-
# obtiene un nodo de un xml
|
39
|
-
def self.get_node_from_xml_document(xml, xpath)
|
40
|
-
|
41
|
-
# Busco el nodo
|
42
|
-
xml_node_xpath= xml.root.xpath(xpath)
|
43
|
-
|
44
|
-
# Si no xml_node_xpath un primer nodo
|
45
|
-
return xml_node_xpath.first if xml_node_xpath.first
|
46
|
-
|
47
|
-
return create_node(xml.root, xpath)
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
# Localiza un nodo y si no existe lo crea
|
54
|
-
def self.create_node(xml_node, path)
|
55
|
-
|
56
|
-
paths= path.split(/\//).select { |x| !x.blank? }
|
57
|
-
|
58
|
-
|
59
|
-
current_node_name= paths.shift
|
60
|
-
|
61
|
-
# Alcance el ultimo nodo lo creo
|
62
|
-
if paths.count==0
|
63
|
-
current_node= Nokogiri::XML::Node.new(clear_node_name(current_node_name), xml_node)
|
64
|
-
xml_node.add_child(current_node)
|
65
|
-
return current_node
|
66
|
-
end
|
67
|
-
|
68
|
-
# Si no existe lo creo
|
69
|
-
current_node= xml_node.xpath(current_node_name).first
|
70
|
-
unless current_node
|
71
|
-
current_node= Nokogiri::XML::Node.new(clear_node_name(current_node_name), xml_node)
|
72
|
-
xml_node.add_child(current_node)
|
73
|
-
end
|
74
|
-
|
75
|
-
return create_node current_node, paths.join('/')
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
# Limpia un atributo del nombre de un nodo
|
80
|
-
def self.clear_node_name(node_string)
|
81
|
-
if node_string=~/([^\[]+)\[/
|
82
|
-
return $1
|
83
|
-
else
|
84
|
-
return node_string
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
# Formate el xml
|
90
|
-
def self.format(xml_string)
|
91
|
-
doc= REXML::Document.new(xml_string)
|
92
|
-
doc.context[:attribute_quote]= :quote
|
93
|
-
formatted= ""
|
94
|
-
doc.write(formatted, 2)
|
95
|
-
return formatted
|
96
|
-
end
|
97
|
-
|
98
|
-
|
99
|
-
end
|
100
|
-
end
|
1
|
+
=begin
|
2
|
+
|
3
|
+
CapicuaGen
|
4
|
+
|
5
|
+
CapicuaGen es un software que ayuda a la creación automática de
|
6
|
+
sistemas empresariales a través de la definición y ensamblado de
|
7
|
+
diversos generadores de características.
|
8
|
+
|
9
|
+
El proyecto fue iniciado por José Luis Bautista Martin, el 6 de enero
|
10
|
+
del 2016.
|
11
|
+
|
12
|
+
Puede modificar y distribuir este software, según le plazca, y usarlo
|
13
|
+
para cualquier fin ya sea comercial, personal, educativo, o de cualquier
|
14
|
+
índole, siempre y cuando incluya este mensaje, y se permita acceso el
|
15
|
+
código fuente.
|
16
|
+
|
17
|
+
Este software es código libre, y se licencia bajo LGPL.
|
18
|
+
|
19
|
+
Para más información consultar http://www.gnu.org/licenses/lgpl.html
|
20
|
+
=end
|
21
|
+
|
22
|
+
require 'nokogiri'
|
23
|
+
require "rexml/document"
|
24
|
+
|
25
|
+
module CapicuaGen
|
26
|
+
|
27
|
+
# Clase ayudante para tratar con archivos XML
|
28
|
+
class XMLHelper
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def initialize
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
public
|
37
|
+
|
38
|
+
# obtiene un nodo de un xml
|
39
|
+
def self.get_node_from_xml_document(xml, xpath)
|
40
|
+
|
41
|
+
# Busco el nodo
|
42
|
+
xml_node_xpath= xml.root.xpath(xpath)
|
43
|
+
|
44
|
+
# Si no xml_node_xpath un primer nodo
|
45
|
+
return xml_node_xpath.first if xml_node_xpath.first
|
46
|
+
|
47
|
+
return create_node(xml.root, xpath)
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# Localiza un nodo y si no existe lo crea
|
54
|
+
def self.create_node(xml_node, path)
|
55
|
+
|
56
|
+
paths= path.split(/\//).select { |x| !x.blank? }
|
57
|
+
|
58
|
+
|
59
|
+
current_node_name= paths.shift
|
60
|
+
|
61
|
+
# Alcance el ultimo nodo lo creo
|
62
|
+
if paths.count==0
|
63
|
+
current_node= Nokogiri::XML::Node.new(clear_node_name(current_node_name), xml_node)
|
64
|
+
xml_node.add_child(current_node)
|
65
|
+
return current_node
|
66
|
+
end
|
67
|
+
|
68
|
+
# Si no existe lo creo
|
69
|
+
current_node= xml_node.xpath(current_node_name).first
|
70
|
+
unless current_node
|
71
|
+
current_node= Nokogiri::XML::Node.new(clear_node_name(current_node_name), xml_node)
|
72
|
+
xml_node.add_child(current_node)
|
73
|
+
end
|
74
|
+
|
75
|
+
return create_node current_node, paths.join('/')
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
# Limpia un atributo del nombre de un nodo
|
80
|
+
def self.clear_node_name(node_string)
|
81
|
+
if node_string=~/([^\[]+)\[/
|
82
|
+
return $1
|
83
|
+
else
|
84
|
+
return node_string
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
# Formate el xml
|
90
|
+
def self.format(xml_string)
|
91
|
+
doc= REXML::Document.new(xml_string)
|
92
|
+
doc.context[:attribute_quote]= :quote
|
93
|
+
formatted= ""
|
94
|
+
doc.write(formatted, 2)
|
95
|
+
return formatted
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|