exner 1.0.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.
- data/.autotest +23 -0
- data/.gemtest +0 -0
- data/History.txt +4 -0
- data/Manifest.txt +42 -0
- data/README.txt +49 -0
- data/Rakefile +19 -0
- data/bin/rorschach +4 -0
- data/bin/zulliger +4 -0
- data/data/.~lock.sumario_Zulliger.rtf# +1 -0
- data/data/Rorschach_Zest.txt +50 -0
- data/data/Zulliger_Zest.txt +50 -0
- data/data/sumario.rtf +240 -0
- data/data/sumario2.rtf +271 -0
- data/data/sumario_Rorschach.rtf +233 -0
- data/data/sumario_Zulliger.rtf +203 -0
- data/data/test_manchas.txt +16 -0
- data/data/zulli_test.txt +11 -0
- data/lib/exner/respuesta.rb +110 -0
- data/lib/exner/rorschach.rb +11 -0
- data/lib/exner/rorschach_plugins/cdi.rb +22 -0
- data/lib/exner/rorschach_plugins/depi.rb +38 -0
- data/lib/exner/rorschach_plugins/hvi.rb +25 -0
- data/lib/exner/rorschach_plugins/interpretacion.rb +438 -0
- data/lib/exner/rorschach_plugins/obs.rb +36 -0
- data/lib/exner/rorschach_plugins/scon.rb +44 -0
- data/lib/exner/rorschach_plugins/sczi.rb +25 -0
- data/lib/exner/rtf/rorschach.rb +69 -0
- data/lib/exner/rtf/zulliger.rb +59 -0
- data/lib/exner/rtf.rb +46 -0
- data/lib/exner/test_manchas.rb +445 -0
- data/lib/exner/zulliger.rb +26 -0
- data/lib/exner/zulliger_plugins/interpretacion.rb +328 -0
- data/lib/exner.rb +44 -0
- data/test/extras.rb +11 -0
- data/test/helpers_tests.rb +41 -0
- data/test/test_depi.rb +29 -0
- data/test/test_exner.rb +100 -0
- data/test/test_hvi.rb +33 -0
- data/test/test_obs.rb +29 -0
- data/test/test_rorschach.rb +1 -0
- data/test/test_scon.rb +34 -0
- data/test/test_sczi.rb +29 -0
- data/test/text_cdi.rb +28 -0
- data.tar.gz.sig +0 -0
- metadata +193 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,328 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Exner
|
3
|
+
class Zulliger
|
4
|
+
# calcula, para un determinado valor en los baremos
|
5
|
+
# el porcentaje que le corresponde al valor específico
|
6
|
+
# hace el ajuste en función al número de respuestas
|
7
|
+
def norma(valor)
|
8
|
+
r_est=11.92
|
9
|
+
return (valor*self.R) / r_est
|
10
|
+
end
|
11
|
+
def respuestatriple(valor,bajo,alto,resp_bajo,resp_alto,resp_normal)
|
12
|
+
if valor<bajo
|
13
|
+
return resp_bajo
|
14
|
+
elsif valor>alto
|
15
|
+
return resp_alto
|
16
|
+
else
|
17
|
+
return resp_normal
|
18
|
+
end
|
19
|
+
end
|
20
|
+
def interpretacion
|
21
|
+
salida=Array.new
|
22
|
+
# Lambda
|
23
|
+
salida.push('{\b Controles}')
|
24
|
+
if self.R < 8
|
25
|
+
salida.push('{\b ATENCION: POCAS RESPUESTAS. TEST INVALIDO}')
|
26
|
+
end
|
27
|
+
if self.L> 1.51
|
28
|
+
salida.push("L > 1.51. Si hay pocas respuestas complejas, es sobre simplificación de percepción. Si no, es defensivo")
|
29
|
+
elsif self.L<0.2
|
30
|
+
salida.push("L < 0.2. Muy pendientes de la información. Se sobrepasan por lo datos")
|
31
|
+
else
|
32
|
+
salida.push("L normal. Manejo normal de la cantidad de información")
|
33
|
+
end
|
34
|
+
# Tipo vivencial
|
35
|
+
|
36
|
+
if (sumdet("M").to_f-sumcolpond).abs <2
|
37
|
+
salida.push("Ambigual"+(sumdet("M").to_f-sumcolpond).abs.to_s+". No tiene un estilo definido. Duda mucho entre el pensar y el actuar y se desgantan")
|
38
|
+
elsif sumdet("M")>sumcolpond
|
39
|
+
salida.push("Intratensivo. Para solucionar sus problemas recurren a su mundo interno.")
|
40
|
+
elsif sumdet("M")<sumcolpond
|
41
|
+
salida.push("Extratensivo. Para solucionar sus problemas recurren al mundo externo")
|
42
|
+
end
|
43
|
+
|
44
|
+
# estimulacion sufrida (es)
|
45
|
+
|
46
|
+
if self.EA<2
|
47
|
+
salida.push("EA<2. Pocos recursos!")
|
48
|
+
elsif self.EA>7
|
49
|
+
salida.push("EA>7. Muchos recursos")
|
50
|
+
else
|
51
|
+
salida.push("EA normal. Recursos dentro de la norma")
|
52
|
+
end
|
53
|
+
if eb_izq>eb_der
|
54
|
+
salida.push("FM+m aumentado. Ideas sin que el sujeto se lo proponga. Sobrecarga interna.")
|
55
|
+
if sumdet("FM")>sumdet("m")
|
56
|
+
salida.push("FM>m. Malestar crónico por necesidades insatisfechas")
|
57
|
+
elsif sumdet("m")>sumdet("FM")
|
58
|
+
salida.push("m>FM. Malestar agudo, por estresante actual")
|
59
|
+
end
|
60
|
+
elsif eb_der>eb_izq
|
61
|
+
salida.push("C'+T+V+Y aumentados. Aumento del sufrimiento y del dolor psíquico causado por situaciones internas")
|
62
|
+
else
|
63
|
+
salida.push("Necesidades y sufrimientos en igual grado")
|
64
|
+
end
|
65
|
+
if sumdet("FM")>6
|
66
|
+
salida.push("FM>6. Necesidades insatisfechas de forma crónica")
|
67
|
+
end
|
68
|
+
if sumdet("m")>4
|
69
|
+
salida.push("m>4. Malestar por necesidades externas agudo aumentado")
|
70
|
+
end
|
71
|
+
|
72
|
+
if es>7
|
73
|
+
salida.push("es>7. Bastante estimulación sufrida.")
|
74
|
+
end
|
75
|
+
if self.EA*2<self.es
|
76
|
+
salida.push("EA<es*2: La persona mostrará dificultades para hacer frente a situaciones de tensión. Trabajará mejor en situaciones estructuradas")
|
77
|
+
end
|
78
|
+
|
79
|
+
salida.push('{\b Mediación}')
|
80
|
+
if xmas>=0.8
|
81
|
+
salida.push("X+%>0.80. Tiene los 'pies sobre la tierra'. Percibe los estímulos como la mayoría de la gente")
|
82
|
+
end
|
83
|
+
if wda>=0.8
|
84
|
+
salida.push("WDA+%>0.8. La percepción es adecuada en situaciones obvias")
|
85
|
+
if xa<0.8
|
86
|
+
salida.push("XA%<0.8. Pero no lo es en situaciones inusuales")
|
87
|
+
else
|
88
|
+
salida.push("XA%>0.8. Y en situaciones inusuales")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
if xmenos>0.25
|
92
|
+
salida.push("X-%>0.25. Preocupante alejamiento de lo convencional!")
|
93
|
+
end
|
94
|
+
if smenos>0.40
|
95
|
+
salida.push("S-%>0.40. Fuerte interferencia emocional en situaciones de rabia")
|
96
|
+
end
|
97
|
+
|
98
|
+
if @populares<2
|
99
|
+
salida.push("P<2. Tiene dificultades para percibir las normas sociales")
|
100
|
+
elsif @populares<5
|
101
|
+
salida.push("2<P<5. Puede percibir y acatar las normas sociales")
|
102
|
+
else
|
103
|
+
salida.push("P>=5. Sobresocializado. Demasiado atento a las normas sociales. sobresocializado")
|
104
|
+
end
|
105
|
+
|
106
|
+
salida.push('{\b Ideación}')
|
107
|
+
|
108
|
+
if pasivos>activos+1
|
109
|
+
salida.push("p>a+1. Persona que tiende a asumir un rol pasivo frente a los demás. Vigilar T, P, Ego disminuido y Fd")
|
110
|
+
|
111
|
+
salida.push("T>0.Pasivo por necesidad de afecto") if (sumdet('T')>0)
|
112
|
+
salida.push("P>4.Pasivo por Sobresocialización") if (@populares>4)
|
113
|
+
salida.push("Fd>0. Pasivo por dependencia") if (_c['Fd']>0)
|
114
|
+
else
|
115
|
+
salida.push("a+1>p. Persona adopta rol activo")
|
116
|
+
end
|
117
|
+
if _d['Mp']>_d['Ma']+1
|
118
|
+
salida.push("Mp>Ma+1. Crea fantasías, pero tiene dificultades para hacer deliberaciones eficaces. Ocupa su inteligencia para escapar de los problemas, no para afrontarlos")
|
119
|
+
end
|
120
|
+
if intelectualizacion>=5
|
121
|
+
salida.push("Intelectualización alta. Uso abusivo de la intelectualizacion")
|
122
|
+
end
|
123
|
+
if _ccee['MOR']>2
|
124
|
+
salida.push("MOR>2. Pesimismo")
|
125
|
+
end
|
126
|
+
if m_menos>1
|
127
|
+
salida.push("M->0. ALERTA. Mal signo. Sus recursos ideativos presentan alteraciones")
|
128
|
+
end
|
129
|
+
if self.SumBr6>=5
|
130
|
+
salida.push("SumBr6>5.Posible trastorno del pensamiento. INHIBICION DEL POTENCIAL")
|
131
|
+
end
|
132
|
+
if self.SumPon6>2
|
133
|
+
salida.push("SumPon6>2.Posible trastorno del pensamiento. INHIBICION DEL POTENCIAL")
|
134
|
+
end
|
135
|
+
if msin>0
|
136
|
+
salida.push("M sin >0. Es una persona que puede desorientarse y perder contacto con la realidad")
|
137
|
+
end
|
138
|
+
salida.push('{\b Afectos}')
|
139
|
+
if det['FC']<det['CF']+det['C']
|
140
|
+
salida.push("FC<CF+C. Vigilar poco control sobre descarga emocional")
|
141
|
+
salida.push("C>CF. Posible impulsividad!") if det['C']>det['CF']
|
142
|
+
end
|
143
|
+
if det['C']>0
|
144
|
+
salida.push("C>0. Persona que disfruta mucho de situaciones vertiginosas. ")
|
145
|
+
end
|
146
|
+
|
147
|
+
if sumdet("C'")>det['FC']*0.5+det['CF']+det['C']*1.5
|
148
|
+
salida.push("SumC':SumPondC hacia derecha. Se internaliza en demasía la descarga afectiva. Posible somatización")
|
149
|
+
end
|
150
|
+
if self.Afr<0.20
|
151
|
+
salida.push("Afr<0.2. Evitación de situaciones emocionales. Trabaja mejor en ambientes sin carga emocional")
|
152
|
+
elsif self.Afr>1
|
153
|
+
salida.push("Afr>1. Atracción por estimulación emocional. Trabaja mejor en ambientes cargados afectivamente.")
|
154
|
+
else
|
155
|
+
salida.push("Afr normal. Interés normal por estimulación emocional.")
|
156
|
+
end
|
157
|
+
|
158
|
+
if complj_r<0.2 and self.L<=1.51
|
159
|
+
salida.push("Compl/r dism y L normal. Tiende a simplificar las situaciones, aunque no de manera excesiva")
|
160
|
+
elsif complj_r<0.2 and self.L> 1.51
|
161
|
+
salida.push("Compl/r dism y L alto. Limitación de tipo intelectual o tendencia a simplificar demasiado la situación")
|
162
|
+
elsif complj_r>0.25 and self.EA>7
|
163
|
+
salida.push("Compl/r alta y muchos recursos. Buen signo. Tiene capacidad para considerar de manera integral los estímulos y buena capacidad para elaborarlos ")
|
164
|
+
elsif complj_r>0.25 and self.EA<2
|
165
|
+
salida.push("Compl/r alta y pocos recursos. Mal signo. Puede tener dificultad para controlar y puede desorganizarse")
|
166
|
+
else
|
167
|
+
salida.push("complejas normal. Capacidad normal para manejar de forma integral los estímulos")
|
168
|
+
end
|
169
|
+
|
170
|
+
if _l['S'].to_f/self.R>0.2
|
171
|
+
salida.push("S aumentado. Vigilar si es autonomía u oposicionismo")
|
172
|
+
end
|
173
|
+
#
|
174
|
+
# PROCESAMIENTO
|
175
|
+
#
|
176
|
+
|
177
|
+
salida.push('{\b Procesamiento}')
|
178
|
+
if self.Zf<5
|
179
|
+
salida.push("Zf dism. Sujeto con poca capacidad cognitiva o bajo nivel de motivación e inicitiva")
|
180
|
+
elsif self.Zf>9
|
181
|
+
salida.push("Zf alto. Alto nivel de motivación , que dedican al proceso de información más energía que el promedio")
|
182
|
+
else
|
183
|
+
salida.push("Zf normal. Motivación normal")
|
184
|
+
end
|
185
|
+
if _l['W'].to_f/self.R>0.50
|
186
|
+
salida.push("W aumentadas. Gran interés por tareas de análisis y por organizar los componentes del mundo interno en un todo significativo")
|
187
|
+
elsif _l['W'].to_f/self.R<0.15
|
188
|
+
salida.push("W disminuidas. Poco interés en tareas de análisis y dificultad para integrar los elementos de su mundo interno en un todo significativo. Revisar síntomas depresivos")
|
189
|
+
end
|
190
|
+
|
191
|
+
if _l['D'].to_f/self.R>0.70
|
192
|
+
salida.push("D aumentadas. Mucho apego a lo práctico")
|
193
|
+
elsif _l['D'].to_f/self.R<0.30
|
194
|
+
salida.push("D disminuidas. Pierde sentido de lo práctico. Vigilar W y Dd")
|
195
|
+
if _l['W'].to_f/self.R>0.50
|
196
|
+
salida.push("W aum. Pierde sentido de lo práctico por irse en la volada")
|
197
|
+
elsif _l['W'].to_f/self.R>0.50
|
198
|
+
salida.push("Dd aum . Pierde sentido de lo práctico por el detalle")
|
199
|
+
|
200
|
+
else
|
201
|
+
salida.push("Revisa bien los datos, que no pude cachar el mote")
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
if _l['Dd'].to_f/self.R>40
|
206
|
+
salida.push("Dd aumentadas. Muy apegado a la exactitud. temor a cometer equivocaciones. Personas inseguras que se van por las ramas")
|
207
|
+
elsif _l['Dd'].to_f/self.R<0.05
|
208
|
+
salida.push("Dd disminuidas. No muy preocupada por la exactitud")
|
209
|
+
end
|
210
|
+
|
211
|
+
rel_aspir=_l['W'].to_f/sumdet('M')
|
212
|
+
|
213
|
+
if (rel_aspir> 2.5)
|
214
|
+
salida.push("W*2>M ("+rel_aspir.to_s+"); Aspiraciones sobre los recursos. El sujeto se puede frustrar")
|
215
|
+
elsif (rel_aspir<1.5)
|
216
|
+
salida.push("W*2<M ("+rel_aspir.to_s+"); Aspiraciones bajo los recursos. Los gasta en fantasías, vigilar pasividad")
|
217
|
+
else
|
218
|
+
salida.push("W*2=M ("+rel_aspir.to_s+"); Aspiraciones adecuadas a los recursos")
|
219
|
+
end
|
220
|
+
rel_teor=_l['W'].to_f / _l['D'].to_f
|
221
|
+
if (rel_teor> 2.5)
|
222
|
+
salida.push("Teórico ("+rel_teor.to_s+")")
|
223
|
+
elsif (rel_teor<1.5)
|
224
|
+
salida.push("Práctico ("+rel_teor.to_s+")")
|
225
|
+
else
|
226
|
+
salida.push("Equilibrio Teórico práctico ("+rel_teor.to_s+")")
|
227
|
+
end
|
228
|
+
|
229
|
+
if zsum<15
|
230
|
+
salida.push("ZSum<15. Poca interés en integrar")
|
231
|
+
elsif zsum>32
|
232
|
+
salida.push("ZSum>32. Alto interés en integrar")
|
233
|
+
else
|
234
|
+
salida.push("ZSum normal. Interés normal en integrar estímulos")
|
235
|
+
end
|
236
|
+
#
|
237
|
+
# INTERPERSONAL
|
238
|
+
#
|
239
|
+
|
240
|
+
salida.push('{\b Interpersonal}')
|
241
|
+
if _ccee['COP']==0 and _ccee['AG']==0
|
242
|
+
salida.push("COP y AG=0. Poco interés en relaciones interpersonales")
|
243
|
+
end
|
244
|
+
salida.push("Fd>0. Rasgos incrementados de dependencia") if _c['Fd']>0
|
245
|
+
if aislamiento_r>0.45
|
246
|
+
salida.push("Aisl>0.45. Sujeto menos implicados que el resto en lo social")
|
247
|
+
else
|
248
|
+
salida.push("Aisl normal. Sujeto implicado en lo social")
|
249
|
+
end
|
250
|
+
|
251
|
+
# a (H+Dh:A+Ad)
|
252
|
+
salida.push("Lo que sigue, tómalo con andina")
|
253
|
+
hum=_c['H']+_c['Hd']
|
254
|
+
an=_c['A']+_c['Ad']
|
255
|
+
if an>hum*3
|
256
|
+
salida.push(sprintf("H+Dh:A+Ad hacia animal(%d:%d). Persona se está aislando. No tiene interés en otros",hum,an))
|
257
|
+
elsif an<hum*2
|
258
|
+
salida.push(sprintf("H+Dh:A+Ad hacia humano(%d:%d). Persona con interés exagerado por relacionarse",hum,an))
|
259
|
+
else
|
260
|
+
salida.push("H+Dh:A+Ad equilibrado. Persona con interés normal por relacionarse")
|
261
|
+
end
|
262
|
+
ent=_c['H']+_c['A']
|
263
|
+
par=_c['Hd']+_c['Ad']
|
264
|
+
if ent<par*2
|
265
|
+
salida.push(sprintf("H+A:Hd+Ad hacia parcial(%d:%d). Se relaciona con objetos parciales, disocia, escinde, se relaciona con partes del otro",ent,par))
|
266
|
+
else
|
267
|
+
salida.push(sprintf("H+A:Hd+Ad hacia total(%d:%d). Persona se relaciona con objetos totales",ent,par))
|
268
|
+
end
|
269
|
+
|
270
|
+
if (_c['H']+_c['Hd']) >= (_c['(H)']+_c['(Hd)'])*3
|
271
|
+
salida.push("H+Hd>(H)+(hd)*3: Se relaciona a nivel concreto")
|
272
|
+
salida.push("(H)+(Hd)=0. Puede que la persona no se deje tener ideales") if (_c['(H)']+_c['(Hd)'])==0
|
273
|
+
else
|
274
|
+
salida.push("H+Hd<(H)+(hd)*3: Se relaciona en la fantasía")
|
275
|
+
end
|
276
|
+
if porcentaje(_c['H']+_c['Hd'])>=0.2
|
277
|
+
salida.push("H+Hd>=20%. Capacidad e interés en relacionarse con otros")
|
278
|
+
else
|
279
|
+
salida.push("H+Hd<20%. Poca capacidad e interés en relacionarse con otros")
|
280
|
+
end
|
281
|
+
if (_c['Hd']+_c['(H)']+_c['(Hd)'])*3>_c['H']
|
282
|
+
salida.push("H<Hd+(H)+(Hd)*3: Problemas en interpersonal. Revisar protocolo para ver que pasa.")
|
283
|
+
salida.push("Puede que no sea válido, porque faltan humanos") if (_c['Hd']+_c['(H)']+_c['(Hd)']+_c['H'])<3
|
284
|
+
end
|
285
|
+
if _c['Hd']*3>_c['H']
|
286
|
+
salida.push("H<Hd*3: Angustia, depresión y fobia social. Aumenta si los Hd son perfiles de caras")
|
287
|
+
end
|
288
|
+
|
289
|
+
if a_porciento>0.47
|
290
|
+
salida.push("A% aumentado. Sujeto inmaduro, rutinario, predecible")
|
291
|
+
elsif a_porciento<0.31
|
292
|
+
salida.push("A% disminuido. Sujeto Flexible. Si es muy bajo, poco comprometido")
|
293
|
+
else
|
294
|
+
salida.push("A% normal. Buena adaptación social")
|
295
|
+
end
|
296
|
+
salida.push("Hasta aquí llega la andina con andina")
|
297
|
+
if _c['H']<1
|
298
|
+
salida.push("H=0;Presenta poco interés las personas")
|
299
|
+
elsif _c['H']>=1 and _c['H']<4
|
300
|
+
salida.push("H="+_c['H'].to_s+". Presenta un interés promedio en las personas")
|
301
|
+
else
|
302
|
+
salida.push("H>4. Presenta un interés sobre el promedio por las personas")
|
303
|
+
end
|
304
|
+
|
305
|
+
salida.push('{\b Autopercepción}')
|
306
|
+
if autocentracion<0.26
|
307
|
+
salida.push("ego<0.26. Tiene dificultades para tomarse a sí mismo como centro de interes")
|
308
|
+
elsif autocentracion>0.60
|
309
|
+
salida.push("ego>0.60. Sujeto tiende a tomarse como centro de sus preocupaciones. Privilegia mucho su propio punto de vista. Le cuesta ser flexibles")
|
310
|
+
else
|
311
|
+
salida.push("ego normal. Capacidad normal para ser el eje de su propia atención")
|
312
|
+
end
|
313
|
+
salida.push("V>1. Sujeto con instrospección dolorosa") if sumdet('V')>1
|
314
|
+
salida.push("FD>2. Demasiada atención a autoevaluación") if _d['FD']>2
|
315
|
+
salida.push("Xy+An>2. Si no hay problemas físicos, trastornos de autoimagen") if an_xy>2
|
316
|
+
salida.push("MOR>2. Pesimismo") if _ccee['MOR']>2
|
317
|
+
if _c['H']>_c['(H)']+_c['Hd']+_c['(Hd)']
|
318
|
+
salida.push("H>(H)+Hd+(Hd). Percepción realista de sí mismo")
|
319
|
+
else
|
320
|
+
salida.push("H<(H)+Hd+(Hd). Percepción no realista de sí mismo")
|
321
|
+
end
|
322
|
+
#salida.collect {|a|
|
323
|
+
# Iconv.conv('ISO-8859-1','UTF-8',a)
|
324
|
+
#}
|
325
|
+
salida
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
data/lib/exner.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# -encoding: UTF-8
|
2
|
+
|
3
|
+
|
4
|
+
require 'exner/test_manchas.rb'
|
5
|
+
require 'exner/respuesta.rb'
|
6
|
+
require 'exner/rtf'
|
7
|
+
# Clase que almacena información sobre una respuesta a una lámina
|
8
|
+
module Exner
|
9
|
+
VERSION="1.0.0"
|
10
|
+
# De números arábigos a romanos
|
11
|
+
ROMANOS={1=>'I',2=>'II', 3=>'III',4=>'IV',5=>'V', 6=>'VI',7=>'VII',8=>'VIII',9=>'IX',10=>'X'}
|
12
|
+
# Localizaciones válidas
|
13
|
+
LOC_VALIDAS=['W','D','Dd','WS','DS','DdS']
|
14
|
+
DQ_VALIDAS=['+','o','v','v/+']
|
15
|
+
DET_VALIDOS=['F','Ma','FMa', 'ma','Mp','FMp', 'mp', 'C', 'CF', 'FC', 'C', 'Cn', "C'", "C'F", "FC'", "T","TF", "FT","V", "VF","FV", "Y", "YF","FY","FD","rF","Fr"]
|
16
|
+
CONT_VALIDOS=['H','(H)','Hd','(Hd)','Hx','A','(A)','Ad', '(Ad)', 'An', 'Art','Ay','Bl','Bt','Cg','Cl','Ex','Fd','Fi', 'Ge','Hh', 'Ls', 'Na','Sc','Sx','Xy','Id']
|
17
|
+
CCEE_VALIDOS=['DV1','DV2','DR1','DR2','INCOM1','INCOM2','FABCOM1', 'FABCOM2','CONTAM', 'ALOG','PSVi','PSVc','PSVm','CONFAB','AG','COP', 'MOR','AB','PER','CP']
|
18
|
+
CCEE_IDEACION={'DV1'=>1,'DV2'=>2,'INCOM1'=>2,'INCOM2'=>4,'DR1'=>3,'DR2'=>6, 'FABCOM1'=>4, 'FABCOM2'=>7, 'ALOG'=>5, 'CONTAM'=>7}
|
19
|
+
FQ_VALIDAS= ['+','o','u','-','sin']
|
20
|
+
# Abre un archivo zest y devuelve un hash con los valores correspondientes.
|
21
|
+
def self.open_zest(file)
|
22
|
+
aEst=Hash.new
|
23
|
+
File.open(file,'r') { |aFile|
|
24
|
+
aFile.each_line {|line|
|
25
|
+
if line =~ /(\d+)\s+(\d+\.\d+)/
|
26
|
+
aEst[$1.to_i]=$2.to_f
|
27
|
+
end
|
28
|
+
}
|
29
|
+
}
|
30
|
+
aEst
|
31
|
+
end
|
32
|
+
def self.a_romano(i)
|
33
|
+
i.kind_of?(Integer) ? ROMANOS[i] : false
|
34
|
+
end
|
35
|
+
def self.de_romano(s)
|
36
|
+
ROMANOS.has_value?(s) ? ROMANOS.key(s):false
|
37
|
+
end
|
38
|
+
def self.dir_root()
|
39
|
+
File.dirname(__FILE__)
|
40
|
+
end
|
41
|
+
def self.dir_data
|
42
|
+
File.dirname(__FILE__)+"/../data/"
|
43
|
+
end
|
44
|
+
end
|
data/test/extras.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
$:.unshift(File.expand_path(File.dirname(__FILE__)+'/../lib/'))
|
2
|
+
$:.unshift(File.expand_path(File.dirname(__FILE__)+'/'))
|
3
|
+
|
4
|
+
require 'minitest/unit'
|
5
|
+
require 'tempfile'
|
6
|
+
require 'tmpdir'
|
7
|
+
require 'shoulda'
|
8
|
+
require 'exner'
|
9
|
+
|
10
|
+
|
11
|
+
module MiniTest
|
12
|
+
class Unit
|
13
|
+
class TestCase
|
14
|
+
include Shoulda::InstanceMethods
|
15
|
+
extend Shoulda::ClassMethods
|
16
|
+
include Shoulda::Assertions
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Assertions
|
21
|
+
alias :assert_raise :assert_raises unless method_defined? :assert_raise
|
22
|
+
alias :assert_not_equal :refute_equal unless method_defined? :assert_not_equal
|
23
|
+
alias :assert_not_same :refute_same unless method_defined? :assert_not_same
|
24
|
+
unless method_defined? :assert_nothing_raised
|
25
|
+
def assert_nothing_raised(msg=nil)
|
26
|
+
msg||="Nothing should be raised, but raised %s"
|
27
|
+
begin
|
28
|
+
yield
|
29
|
+
not_raised=true
|
30
|
+
rescue Exception => e
|
31
|
+
not_raised=false
|
32
|
+
msg=sprintf(msg,e)
|
33
|
+
end
|
34
|
+
assert(not_raised,msg)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
MiniTest::Unit.autorun
|
41
|
+
|
data/test/test_depi.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
2
|
+
|
3
|
+
class TC_ExnerDepi < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@a= Exner::Rorschach.new
|
6
|
+
@a.open_file(Exner.dir_data+'/test_manchas.txt')
|
7
|
+
@a.procesar
|
8
|
+
@lista=@a.depi(true)
|
9
|
+
@p=@a.depi
|
10
|
+
end
|
11
|
+
def teardown
|
12
|
+
end
|
13
|
+
def test_numero
|
14
|
+
assert(@p==2)
|
15
|
+
end
|
16
|
+
def test_lista
|
17
|
+
{1=>false,
|
18
|
+
2=>false,
|
19
|
+
3=>false,
|
20
|
+
4=>true,
|
21
|
+
5=>false,
|
22
|
+
6=>false,
|
23
|
+
7=>true
|
24
|
+
}.each {|k,v|
|
25
|
+
assert_equal(v,@lista[k],k)
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
data/test/test_exner.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
2
|
+
|
3
|
+
class TC_ExnerTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@a= Exner::Rorschach.new
|
6
|
+
@a.open_file(Exner.dir_data+'/test_manchas.txt')
|
7
|
+
@a.procesar
|
8
|
+
end
|
9
|
+
def teardown
|
10
|
+
end
|
11
|
+
def test_localizacion
|
12
|
+
assert_equal(9,@a.zf)
|
13
|
+
assert_equal(26,@a.zsum)
|
14
|
+
assert_equal(27.5,@a.zest)
|
15
|
+
assert_equal({'W'=>3,'Wv'=>0,'D'=>9,'Dd'=>4,'S'=>1},@a.localizaciones)
|
16
|
+
assert_equal({'+'=>5,'o'=>10,'v/+'=>1,'v'=>0},@a.frecuencias['dq'])
|
17
|
+
end
|
18
|
+
def test_determinantes_complejos
|
19
|
+
assert(@a.complejos.size == 4)
|
20
|
+
assert_equal(24,@a.determinantes_simples.size)
|
21
|
+
{'M'=>5,'FM'=>3,'m'=>1,'FC'=>1,'CF'=>2,'C'=>0,'Cn'=>0, "FC'"=>0,"C'F"=>0,"C'"=>0, 'FT'=>0,'TF'=>0, 'T'=>0, 'FV'=>0, 'VF'=>0, 'V'=>0, 'FY'=>4,'YF'=>0,'Y'=>0,'Fr'=>0,'rF'=>0,'FD'=>0,'F'=>4,'(2)'=>6}. each {|k,v|
|
22
|
+
assert_equal(v, @a.determinantes_simples[k],"Clave:"+k)
|
23
|
+
}
|
24
|
+
end
|
25
|
+
def test_controles
|
26
|
+
assert_equal(16,@a.R)
|
27
|
+
assert_equal(1.to_f/3 , @a.L)
|
28
|
+
|
29
|
+
assert_equal('5:2.5',@a.EB)
|
30
|
+
assert_equal('4:4',@a.eb)
|
31
|
+
assert_equal(7.5,@a.EA)
|
32
|
+
assert_equal(8,@a.es)
|
33
|
+
assert_equal(5,@a.Adjes)
|
34
|
+
assert(!@a.EBPer)
|
35
|
+
assert_equal(0,@a.D)
|
36
|
+
assert_equal(0,@a.AdjD)
|
37
|
+
assert_equal(3,@a.sumdet('FM'))
|
38
|
+
assert_equal(1,@a.sumdet('m'))
|
39
|
+
assert_equal(0,@a.sumdet("C'"))
|
40
|
+
assert_equal(0,@a.sumdet('V'))
|
41
|
+
assert_equal(0,@a.sumdet('T'))
|
42
|
+
assert_equal(4,@a.sumdet('Y'))
|
43
|
+
|
44
|
+
end
|
45
|
+
def test_afectos
|
46
|
+
assert_equal('1:2',@a.fc_cf_c)
|
47
|
+
assert_equal('0:2.5',@a.sumc_wsumc)
|
48
|
+
assert_equal(5.to_f/11,@a.Afr)
|
49
|
+
assert_equal(1,@a.localizaciones['S'])
|
50
|
+
assert_equal(0.25,@a.complj_r)
|
51
|
+
assert_equal(0,@a.CP)
|
52
|
+
end
|
53
|
+
def test_interpersonal
|
54
|
+
assert_equal(3,@a.COP)
|
55
|
+
assert_equal(0,@a.AG)
|
56
|
+
assert_equal(0,@a.Fd)
|
57
|
+
assert_equal(0.25,@a.aislamiento_r)
|
58
|
+
assert_equal('3:4',@a.h_h_hd_hd)
|
59
|
+
assert_equal('3:1',@a.p_h_hd_p_a_ad)
|
60
|
+
assert_equal('8:1',@a.h_a_hd_ad)
|
61
|
+
assert_equal(5.to_f/16,@a.a_porciento)
|
62
|
+
end
|
63
|
+
def test_ideacion
|
64
|
+
assert_equal('7:2',@a.a_p)
|
65
|
+
assert_equal('4:1',@a.Ma_Mp)
|
66
|
+
assert_equal(1,@a.intelectualizacion)
|
67
|
+
assert_equal(0,@a.m_menos)
|
68
|
+
assert_equal(3,@a.SumBr6)
|
69
|
+
assert_equal(2,@a.nvl2)
|
70
|
+
assert_equal(15,@a.SumPon6)
|
71
|
+
# assert_equal(0,@a.mqsin)
|
72
|
+
end
|
73
|
+
def test_mediacion
|
74
|
+
assert_equal(5,@a.P)
|
75
|
+
assert_equal(10.to_f/16,@a.xmas)
|
76
|
+
assert_equal(2.to_f/4,@a.fmas)
|
77
|
+
assert_equal(2.to_f/16,@a.xmenos)
|
78
|
+
assert_equal(0,@a.smenos)
|
79
|
+
assert_equal(4.to_f/16,@a.xu)
|
80
|
+
assert_equal(14.to_f/16,@a.xa)
|
81
|
+
assert_equal(11.to_f/12,@a.wda)
|
82
|
+
end
|
83
|
+
def test_procesamiento
|
84
|
+
assert_equal(9,@a.Zf)
|
85
|
+
assert_equal(-1.5,@a.Zd)
|
86
|
+
assert_equal('3:9:4',@a.w_d_dd)
|
87
|
+
assert_equal('3:5',@a.w_m)
|
88
|
+
assert_equal(5,@a.dqmas)
|
89
|
+
assert_equal(0,@a.dqv)
|
90
|
+
|
91
|
+
end
|
92
|
+
def test_autopercepcion
|
93
|
+
assert_equal(0.375,@a.autocentracion)
|
94
|
+
assert_equal(0,@a.fr_rf)
|
95
|
+
assert_equal(0,@a.FD)
|
96
|
+
assert_equal(2,@a.an_xy)
|
97
|
+
assert_equal(0,@a.mor)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
data/test/test_hvi.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
class TC_ExnerHvi < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@a= Exner::Rorschach.new
|
8
|
+
@a.open_file(Exner.dir_data+'/test_manchas.txt')
|
9
|
+
@a.procesar
|
10
|
+
@lista=@a.hvi(true)
|
11
|
+
@p=@a.hvi
|
12
|
+
end
|
13
|
+
def test_numero
|
14
|
+
assert(@p==3)
|
15
|
+
end
|
16
|
+
def test_lista
|
17
|
+
{1=>true,
|
18
|
+
2=>false,
|
19
|
+
3=>false,
|
20
|
+
4=>false,
|
21
|
+
5=>true,
|
22
|
+
6=>true,
|
23
|
+
7=>false,
|
24
|
+
8=>false
|
25
|
+
}.each {|k,v|
|
26
|
+
assert_equal(v,@lista[k],k)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
def test_si
|
30
|
+
assert(!@a.hvi_si)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
data/test/test_obs.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
2
|
+
|
3
|
+
|
4
|
+
class TC_ExnerObs < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@a= Exner::Rorschach.new
|
7
|
+
@a.open_file(Exner.dir_data+'/test_manchas.txt')
|
8
|
+
@a.procesar
|
9
|
+
@lista=@a.obs(true)
|
10
|
+
@p=@a.obs
|
11
|
+
end
|
12
|
+
def test_numero
|
13
|
+
assert(@p==1)
|
14
|
+
end
|
15
|
+
def test_lista
|
16
|
+
{1=>true,
|
17
|
+
2=>false,
|
18
|
+
3=>false,
|
19
|
+
4=>false,
|
20
|
+
5=>false
|
21
|
+
}.each {|k,v|
|
22
|
+
assert_equal(v,@lista[k],k)
|
23
|
+
}
|
24
|
+
end
|
25
|
+
def test_si
|
26
|
+
assert(!@a.obs_si)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
|
data/test/test_scon.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
2
|
+
|
3
|
+
|
4
|
+
class TC_ExnerScon < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@a= Exner::Rorschach.new
|
7
|
+
@a.open_file(Exner.dir_data+'/test_manchas.txt')
|
8
|
+
@a.procesar
|
9
|
+
@lista=@a.scon(true)
|
10
|
+
@p=@a.scon
|
11
|
+
end
|
12
|
+
def teardown
|
13
|
+
end
|
14
|
+
def test_numero
|
15
|
+
assert(@p==4)
|
16
|
+
end
|
17
|
+
def test_lista
|
18
|
+
{1=>false,
|
19
|
+
2=>false,
|
20
|
+
3=>false,
|
21
|
+
4=>false,
|
22
|
+
5=>false,
|
23
|
+
6=>true,
|
24
|
+
7=>true,
|
25
|
+
8=>true,
|
26
|
+
9=>false,
|
27
|
+
10=>false,
|
28
|
+
11=>false,
|
29
|
+
12=>true
|
30
|
+
}.each {|k,v|
|
31
|
+
assert_equal(v,@lista[k],k)
|
32
|
+
}
|
33
|
+
end
|
34
|
+
end
|
data/test/test_sczi.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
|
2
|
+
|
3
|
+
|
4
|
+
class TC_ExnerSczi < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@a= Exner::Rorschach.new
|
7
|
+
@a.open_file(Exner.dir_data+'/test_manchas.txt')
|
8
|
+
@a.procesar
|
9
|
+
@lista=@a.sczi(true)
|
10
|
+
@p=@a.sczi
|
11
|
+
end
|
12
|
+
def teardown
|
13
|
+
end
|
14
|
+
def test_numero
|
15
|
+
assert(@p==1)
|
16
|
+
end
|
17
|
+
def test_lista
|
18
|
+
{1=>false,
|
19
|
+
2=>false,
|
20
|
+
3=>false,
|
21
|
+
4=>true,
|
22
|
+
5=>false,
|
23
|
+
6=>false
|
24
|
+
}.each {|k,v|
|
25
|
+
assert_equal(v,@lista[k],k)
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|