kamila 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/doc/classes/Array2D.html +221 -0
  2. data/doc/classes/Array2D.src/M000001.html +19 -0
  3. data/doc/classes/Array2D.src/M000002.html +18 -0
  4. data/doc/classes/Array2D.src/M000003.html +18 -0
  5. data/doc/classes/Array2D.src/M000004.html +23 -0
  6. data/doc/classes/CfYiyi.html +172 -0
  7. data/doc/classes/CfYiyi.src/M000011.html +17 -0
  8. data/doc/classes/CfYiyi.src/M000012.html +26 -0
  9. data/doc/classes/EscapeShellCmd.html +157 -0
  10. data/doc/classes/EscapeShellCmd.src/M000013.html +18 -0
  11. data/doc/classes/Example.html +184 -0
  12. data/doc/classes/Example.src/M000005.html +17 -0
  13. data/doc/classes/Example.src/M000006.html +19 -0
  14. data/doc/classes/Example.src/M000007.html +19 -0
  15. data/doc/classes/Example.src/M000008.html +20 -0
  16. data/doc/classes/Method/Overload.html +123 -0
  17. data/doc/classes/Method/Signature.html +315 -0
  18. data/doc/classes/Method/Signature.src/M000015.html +20 -0
  19. data/doc/classes/Method/Signature.src/M000016.html +18 -0
  20. data/doc/classes/Method/Signature.src/M000017.html +18 -0
  21. data/doc/classes/Method/Signature.src/M000018.html +18 -0
  22. data/doc/classes/Method/Signature.src/M000019.html +22 -0
  23. data/doc/classes/Method/Signature.src/M000020.html +18 -0
  24. data/doc/classes/Method/Signature.src/M000021.html +21 -0
  25. data/doc/classes/Method/Signature.src/M000022.html +26 -0
  26. data/doc/classes/Method/Signature.src/M000023.html +36 -0
  27. data/doc/classes/Method/Signature.src/M000024.html +18 -0
  28. data/doc/classes/Method/Signature.src/M000025.html +24 -0
  29. data/doc/classes/Method/Signature.src/M000026.html +18 -0
  30. data/doc/classes/Method.html +144 -0
  31. data/doc/classes/Method.src/M000014.html +33 -0
  32. data/doc/classes/Module.html +111 -0
  33. data/doc/classes/MyCGI.html +137 -0
  34. data/doc/classes/MyCGI.src/M000034.html +18 -0
  35. data/doc/classes/ScanearDisco.html +251 -0
  36. data/doc/classes/ScanearDisco.src/M000027.html +24 -0
  37. data/doc/classes/ScanearDisco.src/M000028.html +28 -0
  38. data/doc/classes/ScanearDisco.src/M000029.html +52 -0
  39. data/doc/classes/ScanearDisco.src/M000030.html +19 -0
  40. data/doc/classes/ScanearDisco.src/M000031.html +48 -0
  41. data/doc/classes/ScanearDisco.src/M000032.html +40 -0
  42. data/doc/classes/TestEscapeShellCmd.html +137 -0
  43. data/doc/classes/TestEscapeShellCmd.src/M000033.html +19 -0
  44. data/doc/classes/Utilidades.html +173 -0
  45. data/doc/classes/Utilidades.src/M000009.html +17 -0
  46. data/doc/classes/Utilidades.src/M000010.html +28 -0
  47. data/doc/created.rid +1 -0
  48. data/doc/files/lib/Array2D_rb.html +120 -0
  49. data/doc/files/lib/cf_yiyi_rb.html +120 -0
  50. data/doc/files/lib/escape_shell_cmd_rb.html +121 -0
  51. data/doc/files/lib/mycgi_rb.html +127 -0
  52. data/doc/files/lib/overload_rb.html +101 -0
  53. data/doc/files/lib/scanear_disco_rb.html +140 -0
  54. data/doc/files/lib/utilidades_rb.html +120 -0
  55. data/doc/files/test/testEscapeShellCmd_rb.html +116 -0
  56. data/doc/files/test/testmycgi_rb.html +109 -0
  57. data/doc/files/test/testoverload_rb.html +101 -0
  58. data/doc/fr_class_index.html +38 -0
  59. data/doc/fr_file_index.html +36 -0
  60. data/doc/fr_method_index.html +60 -0
  61. data/doc/index.html +24 -0
  62. data/lib/Array2D.rb +33 -0
  63. data/lib/application.rb +3509 -0
  64. data/lib/cerrar.sh +2 -0
  65. data/lib/cf_yiyi.rb +26 -0
  66. data/lib/escape_shell_cmd.rb +24 -0
  67. data/lib/kamila.rb +452 -0
  68. data/lib/mycgi.rb +41 -0
  69. data/lib/mypdf.rb +215 -0
  70. data/lib/overload.rb +197 -0
  71. data/lib/scanear_disco.rb +169 -0
  72. data/lib/smtp_tls.rb +66 -0
  73. data/lib/utilidades.rb +29 -0
  74. data/test/testEscapeShellCmd.rb +12 -0
  75. metadata +133 -0
data/lib/mypdf.rb ADDED
@@ -0,0 +1,215 @@
1
+ # ******************** kamila version 1.0.1 - Framework *********************
2
+ #
3
+ # Copyright (C) 2008 Edgar Gonzalez (egonzale.wordpress.com)
4
+ #
5
+ # This framework is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This framework is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this framework; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
+ #
19
+ # Este framework es software libre; puedes redistribuirlo y/o modificarlo
20
+ # bajo los terminos de la licencia publica general GNU tal y como fue publicada
21
+ # por la Fundacion del Software Libre; desde la version 2.1 o cualquier
22
+ # versión superior.
23
+ #
24
+ # Este framework es distribuido con la esperanza de ser util pero SIN NINGUN
25
+ # TIPO DE GARANTIA; sin dejar atras su LADO MERCANTIL o PARA FAVORECER ALGUN
26
+ # FIN EN PARTICULAR. Lee la licencia publica general para mas detalles.
27
+ #
28
+ # Debes recibir una copia de la Licencia Publica General GNU junto con este
29
+ # framework, si no es asi, escribe a Fundacion del Software Libre Inc.,
30
+ # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
31
+ # ***************************************************************************
32
+ =begin
33
+ super class: FPDF
34
+ class : Mypdf
35
+ Source : mypdf.rb
36
+ Autor : Edgar Gonzalez
37
+ Email : edgargonzalezmunoz@gmail.com
38
+ Blog : egonzale.wordpress.com
39
+ Website : www.myjavaserver.com/~egonzale
40
+ Framework : kamila versión 1.0.1
41
+ Fecha : 18 de Julio del 2008
42
+
43
+ This is based directly on the fifth tutorial example given on the
44
+ FPDF website (http://www.fpdf.org).
45
+ =end
46
+ require 'rubygems'
47
+ require 'fpdf'
48
+
49
+ class Mypdf < FPDF
50
+ private
51
+ @font = nil
52
+ @fontf = nil
53
+ @image1 = nil
54
+ @image2 = nil
55
+ @xy1 = nil
56
+ @xy2 = nil
57
+ @xy3 = nil
58
+ @xy4 = nil
59
+ @title1 = nil
60
+ @title2 = nil
61
+ @title3 = nil
62
+ @title4 = nil
63
+ @lines = nil
64
+ @y = nil
65
+ @pagef = nil
66
+
67
+ public
68
+ #Encabezado de Pagina. Metodo agregado por Edgargonzalezmunoz@gmail.com
69
+ def HeaderPage(font,image1,image2,xy1,title1,xy2,title2,xy3,title3,xy4,title4,lines)
70
+ @font = font
71
+ @image1 = image1
72
+ @image2 = image2
73
+ @xy1 = xy1
74
+ @xy2 = xy2
75
+ @xy3 = xy3
76
+ @xy4 = xy4
77
+ @title1 = title1
78
+ @title2 = title2
79
+ @title3 = title3
80
+ @title4 = title4
81
+ @lines = lines
82
+ end
83
+
84
+ def Header()
85
+ #Font
86
+ SetFont(@font[0].to_s,@font[1].to_s,@font[2])
87
+ # Logos
88
+ Image(@image1[0].to_s,@image1[1],@image1[2],@image1[3],@image1[4])
89
+ Image(@image2[0].to_s,@image2[1],@image2[2],@image2[3],@image2[4])
90
+ # titulos 4 lineas de encabezado
91
+ SetXY(@xy1[0],@xy1[1])
92
+ Cell(@title1[0],@title1[1],@title1[2].to_s,@title1[3],@title1[4],@title1[5].to_s)
93
+ SetXY(@xy2[0],@xy2[1])
94
+ Cell(@title2[0],@title2[1],@title2[2].to_s,@title2[3],@title2[4],@title2[5].to_s)
95
+ SetXY(@xy3[0],@xy3[1])
96
+ Cell(@title3[0],@title3[1],@title3[2].to_s,@title3[3],@title3[4],@title3[5].to_s)
97
+ SetXY(@xy4[0],@xy4[1])
98
+ Cell(@title4[0],@title4[1],@title4[2].to_s,@title4[3],@title4[4],@title4[5].to_s)
99
+ # Salto de lineas
100
+ Ln(@lines)
101
+ end
102
+
103
+ # Pie de pagina. Metodo agregado por Edgargonzalezmunoz@gmail.com
104
+ def FooterPage(font,y,page)
105
+ @fontf = font
106
+ @y = y
107
+ @pagef = page
108
+ end
109
+
110
+ def Footer()
111
+ # font
112
+ SetFont(@fontf[0].to_s,@fontf[1].to_s,@fontf[2])
113
+ # Posicion: a -y cms del final
114
+ SetY(@y)
115
+ # Numero de pagina
116
+ nro = PageNo()
117
+ Cell(@pagef[0],@pagef[1],@pagef[2].to_s+nro.to_s+'/{nb}',@pagef[3],@pagef[4],@pagef[5].to_s)
118
+ end
119
+
120
+ # Load data
121
+ def LoadData(file)
122
+ data = Array.new
123
+ # Read file lines
124
+ IO.foreach(file) {|line| data.push(line.chop.split(';'))}
125
+ return data
126
+ end
127
+
128
+ # Simple table
129
+ def BasicTable(header, data)
130
+ # Header
131
+ header.each do |col|
132
+ Cell(40, 7, col, 1)
133
+ end
134
+ Ln()
135
+ # Data
136
+ data.each do |row|
137
+ row.each {|col| Cell(40, 6, col, 1)}
138
+ Ln()
139
+ end
140
+ end
141
+
142
+ # Better table
143
+ def ImprovedTable(header, data, wh, wd)
144
+ # Column widths
145
+ j=0
146
+ 0.upto(header.length - 1) do |i|
147
+ Cell(wh[i,j], wh[i,j+1], header[i], wh[i,j+2], wh[i,j+3], wh[i,j+4].to_s)
148
+ end
149
+ Ln()
150
+ # Data
151
+ i=0
152
+ k=0
153
+ longitud = data.length
154
+ data.each do |row|
155
+ row.each do |col|
156
+ #col.to_s.reverse.gsub(/\d{3}(?=\d)/, '\&,').reverse
157
+ Cell(wd[i,j], wd[i,j+1], col.to_s, wd[i,j+2].to_s, wd[i,j+3], wd[i,j+4].to_s)
158
+ i=i+1
159
+ end
160
+ if k!=longitud
161
+ Ln()
162
+ end
163
+ k=k+1
164
+ end
165
+ # Closure line
166
+ sum = 0
167
+ for i in 0..header.length-1
168
+ sum += wh[i,0]
169
+ end
170
+ Cell(sum, 0, '', 'T')
171
+ end
172
+
173
+ # Colored table
174
+ def FancyTable(header, data, wh, wd, fillcolor, textcolor, drawcolor, linewidth, font, fillcolorRestart, textcolorRestart, fontRestart)
175
+ # Colors, line width and bold font
176
+ SetFillColor(fillcolor[0], fillcolor[1], fillcolor[2])
177
+ SetTextColor(textcolor)
178
+ SetDrawColor(drawcolor[0], drawcolor[1], drawcolor[2])
179
+ SetLineWidth(linewidth)
180
+ SetFont(font[0].to_s,font[1].to_s,font[2])
181
+ # Column widths
182
+ j=0
183
+ 0.upto(header.length - 1) do |i|
184
+ Cell(wh[i,j], wh[i,j+1], header[i], wh[i,j+2], wh[i,j+3], wh[i,j+4].to_s,1)
185
+ end
186
+ Ln()
187
+ # Color and font restoration
188
+ SetFillColor(fillcolorRestart[0], fillcolorRestart[1], fillcolorRestart[2])
189
+ SetTextColor(textcolorRestart)
190
+ SetFont(fontRestart[0].to_s,fontRestart[1].to_s,fontRestart[2])
191
+ # Data
192
+ fill = 0
193
+ # Data
194
+ i=0
195
+ k=0
196
+ longitud = data.length
197
+ data.each do |row|
198
+ row.each do |col|
199
+ Cell(wd[i,j], wd[i,j+1], col.to_s, wd[i,j+2].to_s, wd[i,j+3], wd[i,j+4].to_s,fill)
200
+ i=i+1
201
+ end
202
+ if k!=longitud
203
+ Ln()
204
+ end
205
+ k=k+1
206
+ fill = (fill == 0 ? 1 : 0)
207
+ end
208
+ # Closure line
209
+ sum = 0
210
+ for i in 0..header.length-1
211
+ sum += wh[i,0]
212
+ end
213
+ Cell(sum, 0, '', 'T')
214
+ end
215
+ end
data/lib/overload.rb ADDED
@@ -0,0 +1,197 @@
1
+ # ******************** kamila version 1.0.1 - Framework *********************
2
+ #
3
+ # Copyright (C) 2008 Edgar Gonzalez (egonzale.wordpress.com)
4
+ #
5
+ # This framework is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This framework is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this framework; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
+ #
19
+ # Este framework es software libre; puedes redistribuirlo y/o modificarlo
20
+ # bajo los terminos de la licencia publica general GNU tal y como fue publicada
21
+ # por la Fundacion del Software Libre; desde la version 2.1 o cualquier
22
+ # versi&oacute;n superior.
23
+ #
24
+ # Este framework es distribuido con la esperanza de ser util pero SIN NINGUN
25
+ # TIPO DE GARANTIA; sin dejar atras su LADO MERCANTIL o PARA FAVORECER ALGUN
26
+ # FIN EN PARTICULAR. Lee la licencia publica general para mas detalles.
27
+ #
28
+ # Debes recibir una copia de la Licencia Publica General GNU junto con este
29
+ # framework, si no es asi, escribe a Fundacion del Software Libre Inc.,
30
+ # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
31
+ # ***************************************************************************
32
+
33
+ class Method
34
+ module Overload
35
+ Version = %w$Revision: 0.6 $[1] # -*- package version -*-
36
+ end
37
+
38
+ class Signature < Array
39
+ defined?(NoMethodError) or NoMethodError = NameError
40
+
41
+ def invalid(func = nil)
42
+ msg = "Invalid signature: "
43
+ msg << func.to_s if func
44
+ TypeError.new(msg << to_s)
45
+ end
46
+
47
+ def nomatch(recv, func, level = 1)
48
+ raise NoMethodError, "no method match to `#{func}#{self}' for #{recv.class}", caller(level)
49
+ end
50
+
51
+ def varargs?
52
+ !(empty? or last)
53
+ end
54
+
55
+ def arity
56
+ varargs? ? -length : length
57
+ end
58
+
59
+ def to_str
60
+ sig = Array[*self]
61
+ sig.pop if v = varargs?
62
+ sig = sig.inspect
63
+ sig[-1, 0] = ', ...' if v
64
+ sig
65
+ end
66
+
67
+ def inspect
68
+ self.class.name+self
69
+ end
70
+
71
+ def to_s
72
+ sig = to_str
73
+ sig[0] = ?(
74
+ sig[-1] = ?)
75
+ sig
76
+ end
77
+
78
+ def ===(args)
79
+ if varargs?
80
+ (l = length-1) <= args.length or return false
81
+ else
82
+ (l = length) == args.length or return false
83
+ end
84
+ l.times {|i| self[i] === args[i] or return false}
85
+ true
86
+ rescue StandardError
87
+ false
88
+ end
89
+
90
+ def >(sig)
91
+ v1, l1 = varargs?, length
92
+ v2, l2 = sig.varargs?, sig.length
93
+ l1 -= 1 if v1
94
+ l2 -= 1 if v2
95
+ begin
96
+ [l1, l2].min.times do |i|
97
+ return false if sig[i] > self[i]
98
+ end
99
+ rescue TypeError
100
+ return false
101
+ end
102
+ if v1
103
+ return false if l1 > l2
104
+ elsif v2
105
+ return false
106
+ else
107
+ return false unless l1 == l2
108
+ end
109
+ true
110
+ end
111
+
112
+ def <(sig)
113
+ sig > self
114
+ end
115
+
116
+ def <=>(sig)
117
+ if self > sig
118
+ 1
119
+ elsif sig > self
120
+ -1
121
+ else
122
+ 0
123
+ end
124
+ end
125
+
126
+ def dispatch(*types, &block)
127
+ throw :dispatched, yield(*self) if self.class[*types] === self
128
+ end
129
+ end
130
+
131
+ module Overload
132
+ Signature = Signature
133
+
134
+ private
135
+
136
+ def overload(args)
137
+ args = Signature[*args]
138
+ catch(:dispatched) do
139
+ yield args
140
+ raise args.invalid
141
+ end
142
+ end
143
+ end
144
+
145
+ def self.dispatch(recv, func, args, block)
146
+ klass = tbl = sig = meth = nil
147
+ recv.class.ancestors.find do |klass|
148
+ tbl = klass.instance_eval {defined?(@overload) and @overload} or next
149
+ tbl = tbl[func] or next
150
+ sig, meth = tbl.find {|sig, meth| sig === args}
151
+ meth
152
+ end
153
+ meth or Signature[*args].nomatch(recv, func, 3)
154
+ begin
155
+ recv.__send__(meth, *args, &block)
156
+ rescue Exception
157
+ n = -caller.size
158
+ $@[n-2, 3] = nil
159
+ $@[n].sub!(/\`#{func}\'\z/, "\`#{meth}\'")
160
+ raise
161
+ end
162
+ end
163
+ end
164
+
165
+ class Module
166
+ private
167
+
168
+ def overload(func, *types)
169
+ func = func.intern if func.respond_to? :intern
170
+ sig = Method::Signature[*types]
171
+ meth = instance_method(func)
172
+ if meth.arity < 0
173
+ sig << nil unless sig.varargs?
174
+ elsif meth.arity > sig.length
175
+ sig.concat(Array.new(meth.arity - sig.length, Object))
176
+ elsif meth.arity < sig.length
177
+ raise ArgumentError, "too many arguments for #{func}(#{sig.length} for #{meth.arity})"
178
+ end
179
+ alias_method(meth = "#{func}#{sig}".intern, func)
180
+ tbl = @overload ||= {}
181
+ (tbl[func] ||= []) << [sig, meth]
182
+ module_eval "def #{func}(*a, &b) Method.dispatch(self, :#{func}, a, b) end", __FILE__, __LINE__
183
+ if $VERBOSE
184
+ dummy = "!"
185
+ undef_method(dummy) if method_defined?(dummy)
186
+ alias_method(dummy, func)
187
+ undef_method(dummy)
188
+ end
189
+ end
190
+
191
+ def unoverload(func, *types)
192
+ func = func.intern if func.respond_to? :intern
193
+ sig = Method::Signature[*types]
194
+ remove_method("#{func}#{sig}".intern)
195
+ tbl = @overload[func] and tbl.delete(sig) if @overload
196
+ end
197
+ end
@@ -0,0 +1,169 @@
1
+ # /****************************************************************************/
2
+ # /* clase ScanearDisco */
3
+ # /* */
4
+ # /* Clase que crea un arbol de un directorio dado, depende de tree-0.2.1.gem */
5
+ # /* Fuente del gem: http://gems.ruby.inoack.com/ */
6
+ # /****************************************************************************/
7
+ # /*
8
+ # Version: 1.0 en ruby 1.8.x
9
+ # Fecha : 28 de Marzo 2008
10
+ # Autor : Prof. Edgar Gonzalez
11
+ # Email : edgargonzalezmunoz@gmail.com
12
+ # */
13
+ require 'cf_yiyi'
14
+ require "fileutils"
15
+ require 'tree'
16
+ require 'open-uri'
17
+ require 'rexml/document'
18
+ # Usa el modulo de construccion REXML
19
+ include REXML
20
+
21
+ class ScanearDisco
22
+ private
23
+ @control = false
24
+ @directorio = nil
25
+ @nivel = nil
26
+ @raiz = nil
27
+
28
+ public
29
+ attr_reader :directorio,:nivel,:raiz
30
+
31
+ #/** Constructor */
32
+ def initialize()
33
+ #puts "Scaneando..."
34
+ cf = CfYiyi.new()
35
+ if (cf.control())
36
+ @control = true
37
+ @directorio = Array.new
38
+ @nivel = -1
39
+ end
40
+ end
41
+
42
+ public
43
+ def getArchivo(archivo)
44
+ nombrearchivo = ""
45
+ r=archivo.to_s.size()
46
+ while r>=0
47
+ if archivo.to_s[r,1] != "/"
48
+ nombrearchivo = archivo.to_s[r,1] + nombrearchivo
49
+ else
50
+ r=0
51
+ end
52
+ r=r-1
53
+ end
54
+ return nombrearchivo
55
+ end
56
+
57
+ public
58
+ #/* Scanea el disco a partir de un directorio.
59
+ # * Para el parametro
60
+ # * nodo siempre debe ser: nil para la primera llamada
61
+ # * DirActual usar para:
62
+ # * windows: C:/archivos de programa
63
+ # * linux : /var/lib
64
+ # */
65
+ def scandisco(nodo,dirActual)
66
+ if nodo == nil
67
+ nombrearchivo = getArchivo(dirActual)
68
+ nodo = Tree::TreeNode.new(nombrearchivo, dirActual)
69
+ @raiz = nodo
70
+ end
71
+ existe = false
72
+ if (@control)
73
+ if (File.directory?(dirActual))
74
+ existe = true
75
+ @nivel = @nivel + 1
76
+ @directorio[@nivel] = dirActual
77
+ Dir.chdir(dirActual)
78
+ archivos = Dir.glob('*')
79
+ if (archivos.size()-1>=0)
80
+ j = archivos.size()-1
81
+ for i in 0..j
82
+ nombrearchivo = getArchivo(archivos[i].to_s)
83
+ rama = Tree::TreeNode.new(nombrearchivo, dirActual+'/'+archivos[i].to_s)
84
+ nodo.add(rama)
85
+ if (File.directory?(archivos[i].to_s))
86
+ dirActual = dirActual+'/'+archivos[i].to_s
87
+ scandisco(rama,dirActual)
88
+ @nivel = @nivel - 1
89
+ dirActual = @directorio[@nivel]
90
+ Dir.chdir(dirActual)
91
+ end
92
+ end
93
+ end
94
+ end
95
+ else
96
+ existe = false
97
+ dirActual = new String("")
98
+ #puts "Directorio no existe"
99
+ end
100
+ return existe
101
+ end
102
+
103
+ def imprimirArbol()
104
+ #@raiz.each { |node| node.content.reverse; puts node }
105
+ @raiz.printTree(3)
106
+ end
107
+
108
+ def adicionarElementos(elementoArray,rama)
109
+ elementorow = nil
110
+ if rama.isRoot?
111
+ elementorow = Element.new("rows")
112
+ elementoArray.pop()
113
+ elementoArray.push(elementorow)
114
+ elementorow = Element.new("row")
115
+ elementorow.attributes["id"] = rama.content
116
+ elementocell = Element.new("cell")
117
+ elementocell.attributes["image"] = "folder.gif"
118
+ elementocell.text = rama.name
119
+ elementorow.add elementocell
120
+ elementoArray.push(elementorow)
121
+ else
122
+ elementorow = Element.new("row")
123
+ elementorow.attributes["id"] = rama.content
124
+ elementocell = Element.new("cell")
125
+ elementocell.attributes["image"] = "folder.gif"
126
+ elementocell.text = rama.name
127
+ elementorow.add elementocell
128
+ elementoArray.push(elementorow)
129
+ end
130
+ if rama.hasChildren?
131
+ hijos = rama.children
132
+ for i in 0..hijos.length()-1
133
+ adicionarElementos(elementoArray,hijos[i])
134
+ end
135
+ end
136
+ elemento2 = elementoArray.pop()
137
+ elemento1 = elementoArray.pop()
138
+ elemento1.add elemento2
139
+ elementoArray.push(elemento1)
140
+ end
141
+
142
+ def generarXML(archivo)
143
+ raiz = @raiz
144
+ file = Kernel.open(archivo.to_s,"w+")
145
+ linea = '<?xml version="1.0" encoding="UTF-8"?>' + "\n"
146
+ linea = linea + '<!DOCTYPE rows SYSTEM "dhtmlxtreegrid.dtd">' + "\n"
147
+ doc = Document.new(linea)
148
+ #doc << XMLDecl.new()
149
+ docArray = Array.new
150
+ docArray.push(doc)
151
+ elemento = nil
152
+ elementoArray = Array.new
153
+ elementoArray.push(elemento)
154
+ adicionarElementos(elementoArray,raiz)
155
+ j=0
156
+ while j<elementoArray.length()-1
157
+ elemento2 = elementoArray.pop()
158
+ elemento1 = elementoArray.pop()
159
+ elemento1.add elemento2
160
+ elementoArray.push(elemento1)
161
+ end
162
+ elemento = elementoArray.pop()
163
+ doc.add_element elemento
164
+ doc.write(file,0)
165
+ file.close()
166
+ end
167
+
168
+ end
169
+
data/lib/smtp_tls.rb ADDED
@@ -0,0 +1,66 @@
1
+ require "openssl"
2
+ require "net/smtp"
3
+
4
+ Net::SMTP.class_eval do
5
+ private
6
+ def do_start(helodomain, user, secret, authtype)
7
+ raise IOError, 'SMTP session already started' if @started
8
+ check_auth_args user, secret, authtype if user or secret
9
+
10
+ sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
11
+ @socket = Net::InternetMessageIO.new(sock)
12
+ @socket.read_timeout = 60 #@read_timeout
13
+
14
+ check_response(critical { recv_response() })
15
+ do_helo(helodomain)
16
+
17
+ if starttls
18
+ raise 'openssl library not installed' unless defined?(OpenSSL)
19
+ ssl = OpenSSL::SSL::SSLSocket.new(sock)
20
+ ssl.sync_close = true
21
+ ssl.connect
22
+ @socket = Net::InternetMessageIO.new(ssl)
23
+ @socket.read_timeout = 60 #@read_timeout
24
+ do_helo(helodomain)
25
+ end
26
+
27
+ authenticate user, secret, authtype if user
28
+ @started = true
29
+ ensure
30
+ unless @started
31
+ # authentication failed, cancel connection.
32
+ @socket.close if not @started and @socket and not @socket.closed?
33
+ @socket = nil
34
+ end
35
+ end
36
+
37
+ def do_helo(helodomain)
38
+ begin
39
+ if @esmtp
40
+ ehlo helodomain
41
+ else
42
+ helo helodomain
43
+ end
44
+ rescue Net::ProtocolError
45
+ if @esmtp
46
+ @esmtp = false
47
+ @error_occured = false
48
+ retry
49
+ end
50
+ raise
51
+ end
52
+ end
53
+
54
+ def starttls
55
+ getok('STARTTLS') rescue return false
56
+ return true
57
+ end
58
+
59
+ def quit
60
+ begin
61
+ getok('QUIT')
62
+ rescue EOFError
63
+ end
64
+ end
65
+ end
66
+
data/lib/utilidades.rb ADDED
@@ -0,0 +1,29 @@
1
+ # /****************************************************************************/
2
+ # /* clase Utilidades */
3
+ # /* */
4
+ # /* Clase con funcionalidades generales */
5
+ # /****************************************************************************/
6
+ # /*
7
+ # Version: 1.0 en ruby 1.8.x
8
+ # Fecha : 18 de Abril 2008
9
+ # Autor : Prof. Edgar Gonzalez
10
+ # Email : edgargonzalezmunoz@gmail.com
11
+ # */
12
+
13
+ class Utilidades
14
+ def initialize()
15
+ end
16
+ def getNombreArchivo(archivo)
17
+ nombrearchivo = ""
18
+ r=archivo.to_s.size()
19
+ while r>=0
20
+ if archivo.to_s[r,1] != "/"
21
+ nombrearchivo = archivo.to_s[r,1] + nombrearchivo
22
+ else
23
+ r=0
24
+ end
25
+ r=r-1
26
+ end
27
+ return nombrearchivo
28
+ end
29
+ end
@@ -0,0 +1,12 @@
1
+ #!ruby
2
+ # fuente: http://d.hatena.ne.jp/babie/20051201/p1
3
+ require 'test/unit'
4
+ require 'escape_shell_cmd'
5
+
6
+ class TestEscapeShellCmd < Test::Unit::TestCase
7
+ def test_escape_semicolon
8
+ cmd = 'date;date'
9
+ assert_equal('date\;date', escape_shell_cmd(cmd), ';(semi-colon) must be escaped')
10
+ end
11
+ end
12
+