ez7gen 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/bin/ez7gen +6 -0
  3. data/lib/ez7gen.rb +23 -0
  4. data/lib/ez7gen/config/schema/2.4/2.4.HL7.xml +13904 -0
  5. data/lib/ez7gen/config/schema/2.4/VAZ2.4.HL7.xml +3085 -0
  6. data/lib/ez7gen/config/schema/2.4/added/coded-tables.xml +730 -0
  7. data/lib/ez7gen/config/schema/2.4/rules/2.4.HL7.yml +4 -0
  8. data/lib/ez7gen/config/schema/2.4/rules/VAZ2.4.HL7.yml +6 -0
  9. data/lib/ez7gen/config/schema/2.5/2.5.HL7.xml +10008 -0
  10. data/lib/ez7gen/config/schema/2.5/VAZ2.5.HL7.xml +7 -0
  11. data/lib/ez7gen/config/schema/2.5/added/coded-tables.xml +549 -0
  12. data/lib/ez7gen/config/schema/readme.txt +0 -0
  13. data/lib/ez7gen/config/templates/2.4/eiv table update-mfn_m01 20151201.xml +416 -0
  14. data/lib/ez7gen/config/templates/2.4/eiv table update-mfn_y01.xml +416 -0
  15. data/lib/ez7gen/config/templates/2.4/eiv-ec-MFN_X01_reg request 20160126.xml +659 -0
  16. data/lib/ez7gen/config/templates/2.4/examples/ADT_A60.txt +69 -0
  17. data/lib/ez7gen/config/templates/2.4/examples/eiv table update-mfn_m01 20151201.txt +21 -0
  18. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_dss_units-query_qbp_q13-qbp_q13.txt +26 -0
  19. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_ecs_procedures_query_qbp_q13-qbp_q13.txt +26 -0
  20. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_patient eligibility_response-rsp_k11-080714.txt +44 -0
  21. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_diagnosis_query_qbp_q11-qbp_q11.txt +21 -0
  22. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_diagnosis_response_rsp_k11-rsp_k11.txt +42 -0
  23. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_dss_units_response_rtb_k13-rtb_k13.txt +49 -0
  24. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_ecs_filer_request_dft_p03-dft_p03-080714.txt +31 -0
  25. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_ecs_filer_response_ack_p03-ack_p03.txt +21 -0
  26. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_esc_procedures_response_rtb_k13-rtb_k13.txt +40 -0
  27. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patient_eclass_query_qbp_q11-qbp_q11.txt +21 -0
  28. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patient_problems_query_qbp_q11-qbp_q11.txt +21 -0
  29. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patinet_problems_response_rsp_k11-rsp_k11.txt +33 -0
  30. data/lib/ez7gen/config/templates/2.4/examples/orur01rvbecv2.txt +31 -0
  31. data/lib/ez7gen/config/templates/2.4/examples/sqwm vitals-oru_ro1.txt +52 -0
  32. data/lib/ez7gen/config/templates/2.4/examples/vista sqwm-adt_a60.txt +40 -0
  33. data/lib/ez7gen/config/templates/2.4/mhvsm_dss_units_query_qbp_q13-qbp_q13.xml +312 -0
  34. data/lib/ez7gen/config/templates/2.4/mhvsm_ecs_procedures_query_qbp_q13-qbp_q13.xml +314 -0
  35. data/lib/ez7gen/config/templates/2.4/mhvsm_patient eligibility_response-rsp_k11-080714.xml +640 -0
  36. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_diagnosis_query_qbp_q11-qbp_q11.xml +284 -0
  37. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_diagnosis_response_rsp_k11-rsp_k11-rsp_k11.xml +563 -0
  38. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_dss_units_response_rtb_k13-rtb_k13-rtb_k13.xml +365 -0
  39. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_filer_request_dft_p03-dft_p03-080714.xml +2172 -0
  40. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_filer_response_ack_p03-ack_p03.xml +269 -0
  41. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_procedures_response_rtb_k13-rtb_k13-rtb_k13.xml +354 -0
  42. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_eclass_query_qbp_q11-qbp_q11.xml +284 -0
  43. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_problems_query_qbp_q11-qbp_q11.xml +282 -0
  44. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_problems_response_rsp_k11-rsp_k11-rsp_k11.xml +565 -0
  45. data/lib/ez7gen/config/templates/2.4/orur01rvbecv2.xml +1529 -0
  46. data/lib/ez7gen/config/templates/2.4/sqwm vitals-oru_r01.xml +2975 -0
  47. data/lib/ez7gen/config/templates/2.4/vista sqwm-adt_a60.xml +1360 -0
  48. data/lib/ez7gen/message_factory.rb +142 -0
  49. data/lib/ez7gen/msg_error_handler.rb +33 -0
  50. data/lib/ez7gen/profile_parser.rb +321 -0
  51. data/lib/ez7gen/resources/properties-with-comments.yml +51 -0
  52. data/lib/ez7gen/resources/properties.yml +325 -0
  53. data/lib/ez7gen/service/2.4/dynamic_field_generator.rb +45 -0
  54. data/lib/ez7gen/service/2.4/field_generator.rb +1586 -0
  55. data/lib/ez7gen/service/2.5/field_generator.rb +75 -0
  56. data/lib/ez7gen/service/base_field_generator.rb +451 -0
  57. data/lib/ez7gen/service/segment_generator.rb +218 -0
  58. data/lib/ez7gen/service/segment_picker.rb +147 -0
  59. data/lib/ez7gen/service/template_generator.rb +213 -0
  60. data/lib/ez7gen/service/type_aware_field_generator.rb +1583 -0
  61. data/lib/ez7gen/service/utils.rb +75 -0
  62. data/lib/ez7gen/structure_parser.rb +331 -0
  63. data/lib/ez7gen/version.rb +38 -0
  64. data/test/Additional Tables with values_v1.1.txt +1653 -0
  65. data/test/added_shema_test.rb +143 -0
  66. data/test/app-tmp.rb +225 -0
  67. data/test/at.txt +1 -0
  68. data/test/backburner.zip +0 -0
  69. data/test/codes.txt +262 -0
  70. data/test/codes1.txt +1240 -0
  71. data/test/data_types_exploration_test.rb +213 -0
  72. data/test/dynamic_field_generated_test.rb +292 -0
  73. data/test/message_factory_24_custom_test.rb +648 -0
  74. data/test/message_factory_25_test.rb +50 -0
  75. data/test/message_factory_adm_test.rb +558 -0
  76. data/test/message_factory_gen_test.rb +63 -0
  77. data/test/message_factory_lab_test.rb +107 -0
  78. data/test/message_factory_pharm_test.rb +121 -0
  79. data/test/message_factory_template_24_test.rb +730 -0
  80. data/test/message_factory_test.rb +220 -0
  81. data/test/msg_error_handler_test.rb +59 -0
  82. data/test/profile_parser_test.rb +542 -0
  83. data/test/quick_run.rb +880 -0
  84. data/test/segment_generator_test.rb +656 -0
  85. data/test/segment_picker_test.rb +279 -0
  86. data/test/structrure_parser_test.rb +355 -0
  87. data/test/template_generator_test.rb +164 -0
  88. data/test/type_aware_field_generator_test.rb +582 -0
  89. data/test/utils_test.rb +97 -0
  90. metadata +215 -0
data/test/quick_run.rb ADDED
@@ -0,0 +1,880 @@
1
+ require 'yaml'
2
+ require_relative '../lib/ez7gen/service/utils'
3
+ require 'json'
4
+ include Utils
5
+ # require 'pathname'
6
+ require 'ruby-hl7'
7
+
8
+
9
+
10
+
11
+ ok="MSH|^~\&|EnsembleHL7|ISC|404|707|201607162200||ACK^A01|171|P|2.4|234
12
+ MSA|AA|171"
13
+ puts ok
14
+ # text.gsub!(/\r\n?/, "\n")
15
+ # raw_input = open( "my_hl7_msg.txt" ).readlines
16
+ lines = ok.split("\n")
17
+ msg = HL7::Message.new( lines)
18
+ puts "message type: %s" % msg[:MSH].message_type
19
+ # puts msg[:ERR]|'N/A'
20
+ puts msg[:MSA]
21
+
22
+ bad = "MSH|^~\&|EnsembleHL7|ISC|404|808|201607162206||ACK^A05|218|P|2.4|936
23
+ MSA|AE|218
24
+ ERR||||E|<Ens>ErrGeneral|||ERROR <Ens>ErrGeneral: Not forwarding message 9292 with message body Id=4610, Doc Identifier=218, SessionId=9292 because of validation failure: ERROR <Ens>ErrGeneral: Field size restriction exceeded in segment 8:DB1. Field 2, repetition 1 is larger than segment structure 2.4:DB1 permits it to be.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Invalid value 'ABCDDEFRTYURYRURURUR' appears in segment 8:DB1, field 2, repetition 1, component 1, subcomponent 1, but does not appear in code table 2.4:334.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Field size restriction exceeded in segment 11:DG1. Field 6, repetition 1 is larger than segment structure 2.4:DG1 permits it to be.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Invalid value 'xxxxxxxxxx' appears in segment 11:DG1, field 6, repetition 1, component 1, subcomponent 1, but does not appear in code table 2.4:52.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Field size restriction exceeded in segment 11:DG1. Field 18, repetition 1 is larger than segment structure 2.4:DG1 permits it to be.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Invalid value 'ZZZZZZZ' appears in segment 11:DG1, field 18, repetition 1, component 1, subcomponent 1, but does not appear in code table 2.4:136.
25
+ "
26
+ bad.gsub!("X0D\\X0A", "\n").gsub!("\n+\n", "\n")
27
+ puts bad
28
+ puts '~~~~~~~~~~~~~~~~~~~~~'
29
+ exit
30
+ msg = HL7::Message.new( bad.split("\n") )
31
+ puts "message type: %s" % msg[:MSH].message_type
32
+ puts "message type: %s" % msg[:ERR]
33
+ puts '~~~~~~~~~~~~~'
34
+ # puts msg[:ERR] == nil
35
+ # puts msg[:ERR].error_code_and_location
36
+ # puts msg[:ERR].error_location
37
+ # puts msg[:ERR].hl7_error_code
38
+ puts msg[:ERR].severity
39
+ puts msg[:ERR].application_error_code
40
+ # puts msg[:ERR].application_error_parameter
41
+ # puts msg[:ERR].diagnostic_information
42
+ errors = msg[:ERR].user_message
43
+ # puts errors
44
+ # puts msg[:ERR].help_desk_contact_point
45
+ # lines = errors.split("ERROR <Ens>ErrGeneral:")
46
+ lines = errors.split("ERROR #{msg[:ERR].application_error_code}:")
47
+ puts lines
48
+
49
+
50
+ exit
51
+ d = 'MSH~MSA~[~ERR~]~[~{~NTE~}~]~QRD~[~QRF~]~[~[~PID~[~{~NTE~}~]~]~{~ORC~<~OBR~|~RQD~|~RQ1~|~RXO~|~ODS~|~ODT~>~[~{~NTE~}~]~[~{~CTI~}~]~}~]~[~DSC~]'
52
+
53
+ puts d.sub(/<(.*?)>/,['OBR','RXO'].sample())
54
+
55
+ a = 5
56
+ b = nil
57
+ a = b || a
58
+ puts a
59
+ b = 25
60
+ a = b || a
61
+ puts a
62
+ b = ''
63
+ a = b || a
64
+ puts a
65
+ exit
66
+
67
+ a = Array.new([1,2,3])
68
+
69
+ OPT =1
70
+ MLT =2
71
+ x = /\[~([^\[\]]*)~\]|\{~([^\[\]]*)~}/
72
+ opt = /\[~([^\[\]]*)~\]/
73
+ mult= /\{~([^\[\]]*)~}/
74
+
75
+ r = Regexp.union(opt, mult)
76
+ # r = /(\[~([^\[\]]*)\~])|(\{~([^\[\]]*)\~})/
77
+ # r = /(?<opt>\[~([^\[\]]*)~\])|(?<mult>\{~([^\[\]]*)~})/
78
+ # r = /(\[~([^\[\]]*)~\])|(\{~([^\[\]]*)~})/
79
+ # opt =/\[~([^\[\]]*)\~]/
80
+ # mult=//
81
+ # /\$(?<dollars>\d+)\.(?<cents>\d+)/.match("$3.67"
82
+ # a = ("[~{~IN1~7~8~}~]").split(r)
83
+ a = ("[~{~IN1~7~8~}~]").match(r)
84
+ p a
85
+ p a[OPT]
86
+ p a[MLT]
87
+ # p a.names
88
+ # p a['opt']
89
+ # p a['mult']
90
+ # p a['mult']
91
+ # a = ("{~IN1~7~8~}").match(r)
92
+ # p a.opt
93
+ # p a.mult
94
+ # a = ("IN1~7~8").match(r)
95
+ # p a.opt
96
+ # p a.mult
97
+
98
+ #first match is opt, second is mult
99
+ #
100
+ p (1..5).to_a.sample
101
+ # p [1,2,3,3,3,3,3,5,6,6,7,8].sample()
102
+
103
+ a = [1,2,3,3,3,3,3,5,6,6,7,9,2,1]
104
+ z = a.each_index.select{|i| a[i] >3}
105
+ p (a + [4,8,11] ).sort
106
+ # p a
107
+ exit
108
+ # class OrderedList < List
109
+ # end
110
+ # a = OArray.new([1,2])
111
+ # puts a.class
112
+ # puts a.instance_of?(OArray)
113
+ # puts a.instance_of?(Array)
114
+ # a.each{|it| puts it}
115
+ # bool = a.kind_of?(Array) # => true
116
+ # p bool
117
+ #
118
+ # a = OptionalGroup.new()
119
+ # puts a.class
120
+ # puts a.instance_of?(OptArray)
121
+ # puts a.instance_of?(Array)
122
+ # a.each{|it| puts it}
123
+ # bool = a.kind_of?(Array) # => true
124
+ # p bool
125
+
126
+ # b = a.reverse.class # => Array
127
+
128
+ # a = [1,2,3,4]
129
+ # b = OArray.new
130
+ # puts b.class
131
+ # a.concat([1,2,3,3,4])
132
+ p a[2..-2]
133
+ p "abcdef".slice(0,-1)
134
+ a = '{xyz}'
135
+ p "#{a[0]+a[-1]}"
136
+ p 'abc'[0..1]
137
+ p 'abcdef'[-2..-1]
138
+ exit
139
+
140
+ # a = '{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~10~]~11~]~}'
141
+ # e = a.scan(/(?=\[((?:[^\[\]]*|\[\g<1>\])*)\])/)
142
+ # p e
143
+ # exit
144
+
145
+ structure = 'MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
146
+ ms = structure.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
147
+ #m = puts o19.scan(/[^{}]*|[^\[\]]*/)
148
+ p ms
149
+
150
+ idx = 0
151
+ encodedSegments =[]
152
+ profile=[]
153
+ # while(m = structure[@@segment_patern])
154
+ groups = []
155
+ el_ids = []
156
+
157
+ brckts = "{}"
158
+
159
+ ms.each {|a|
160
+ p a
161
+ m = a.first()
162
+ brckt = brckts[0]
163
+ is_g = (m.include?(brckt))
164
+ m = brckts.clone.insert(1,m)
165
+
166
+ if(groups.empty?)
167
+ structure.sub!(m, idx.to_s)
168
+ else
169
+ if(groups.last().include?(m))
170
+ groups.last().sub!(m, idx.to_s)
171
+ if((groups.last().include?(brckt))) #done resolving a group
172
+ encodedSegments[el_ids.last()] = groups.last()
173
+ groups.pop()
174
+ el_ids.pop()
175
+ end
176
+ else
177
+ structure.sub!(m, idx.to_s)
178
+ end
179
+ end
180
+
181
+ if (is_g)
182
+ groups << m
183
+ el_ids << idx
184
+ end
185
+
186
+ encodedSegments << m
187
+ idx +=1
188
+ }
189
+ puts '_________1_____________'
190
+
191
+ ms = structure.scan(/(?=\[((?:[^\[\]]*|\[\g<1>\])*)\])/)
192
+ #m = puts o19.scan(/[^{}]*|[^\[\]]*/)
193
+ p ms
194
+ brckts = "[]"
195
+
196
+ ms.each {|a|
197
+ p a
198
+ m = a.first()
199
+ brckt = brckts[0]
200
+ is_g = (m.include?(brckt))
201
+ m = brckts.clone.insert(1,m)
202
+
203
+ if(groups.empty?)
204
+ structure.sub!(m, idx.to_s)
205
+ else
206
+ if(groups.last().include?(m))
207
+ groups.last().sub!(m, idx.to_s)
208
+ if((groups.last().include?(brckt))) #done resolving a group
209
+ encodedSegments[el_ids.last()] = groups.last()
210
+ groups.pop()
211
+ el_ids.pop()
212
+ end
213
+ else
214
+ structure.sub!(m, idx.to_s)
215
+ end
216
+ end
217
+
218
+ if (is_g)
219
+ groups << m
220
+ el_ids << idx
221
+ end
222
+
223
+ encodedSegments << m
224
+ idx +=1
225
+ }
226
+
227
+
228
+ # ms.each {|a|
229
+ # p a
230
+ #
231
+ # is_g = (a.scan('[').size > 1)?true:false
232
+ # m = '['<< a.first() << ']'
233
+ #
234
+ # if(groups.size == 0)
235
+ # structure.sub!(m, idx.to_s)
236
+ # # if (is_g) then groups << m end
237
+ # else
238
+ # if(groups.last().include?(m))
239
+ # groups.last().sub!(m, idx.to_s)
240
+ # if(!(groups.last().scan('[').size > 1)) #done resolving a group
241
+ # # if(is_group_resolved(groups.last(), '[')) #done resolving a group
242
+ # rslvd = groups.last()
243
+ # eid = el_ids.last()
244
+ # encodedSegments[eid] = rslvd
245
+ # groups.pop()
246
+ # el_ids.pop()
247
+ # end
248
+ # else
249
+ # structure.sub!(m, idx.to_s)
250
+ # end
251
+ # # if (is_g) then groups << m end
252
+ # end
253
+ #
254
+ # if (is_g)
255
+ # groups << m
256
+ # el_ids << idx
257
+ # end
258
+ #
259
+ # encodedSegments << m
260
+ # idx +=1
261
+ # }
262
+
263
+
264
+ puts '_________2_____________'
265
+
266
+ encodedSegments.each{|es|
267
+ puts es
268
+
269
+ is_g = (es.scan('[').size > 1)?true:false
270
+
271
+ if(is_g)
272
+ ms = es.scan(/(?=\[((?:[^\[\]]*|\[\g<1>\])*)\])/)
273
+
274
+ # # m = '['<< e.first() << ']'
275
+ # puts e
276
+ # puts '++'
277
+
278
+ ms.each {|a|
279
+ p a
280
+ is_g = (a.scan('[').size > 1)?true:false
281
+ m = '['<< a.first() << ']'
282
+
283
+ if(groups.size == 0)
284
+ es.sub!(m, idx.to_s)
285
+ # if (is_g) then groups << m end
286
+ else
287
+ if(groups.last().include?(m))
288
+ groups.last().sub!(m, idx.to_s)
289
+ if(!(groups.last().scan('[').size > 1)) #done resolving a group
290
+ #if(is_group_resolved(groups.last(), '[')) #done resolving a group
291
+ rslvd = groups.last()
292
+ eid = el_ids.last()
293
+ encodedSegments[eid] = rslvd
294
+ groups.pop()
295
+ el_ids.pop()
296
+ end
297
+ else
298
+ es.sub!(m, idx.to_s)
299
+ end
300
+ # if (is_g) then groups << m end
301
+ end
302
+
303
+ if (is_g)
304
+ groups << m
305
+ el_ids << idx
306
+ end
307
+
308
+ encodedSegments << m
309
+ idx +=1
310
+ }
311
+
312
+ end
313
+
314
+ }
315
+
316
+ puts groups
317
+ puts encodedSegments
318
+ puts structure
319
+
320
+ # def self.is_group_resolved(seg, group_token)
321
+ # (seg.scan(group_token).size > 1)?true:false
322
+ # end
323
+
324
+ exit
325
+
326
+
327
+ #ORM_O01 Order message
328
+ # MSH;NTE;PID;PD1;PV1;PV2;IN1;IN2;IN3;GT1;AL1;ORC;OBR;RQD;RQ1;RXO;ODS;ODT;CTD;DG1;OBX;FT1;CTI;BLG
329
+ #RDE_O11 Pharmacy/treatment encoded order message
330
+ # MSH;NTE;PID;PD1;PV1;PV2;IN1;IN2;IN3;GT1;AL1;ORC;RXO;RXR;RXC;OBX;CTI
331
+ #OMG_O19 General clinical order message
332
+ # MSH;NTE;PID;PD1;PV1;PV2;IN1;IN2;IN3;GT1;AL1;ORC;OBR;CTD;DG1;OBX;AL1;FT1;CTI;BLG
333
+ o19 = 'MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
334
+ # mt = /(?=\{((?:[^{}]*|\{\g<1>\})*)\})/.match(o19)
335
+ # mt = o19.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
336
+ # # [["~NTE~"], ["~NTE~"], ["~IN1~[~IN2~]~[~IN3~]~"], ["~AL1~"], ["~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~"], ["~NTE~"], ["~DG1~"], ["~OBX~[~{~NTE~}~]~"], ["~NTE~"], ["~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~"], ["~AL1~"], ["~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~"], ["~NTE~"], ["~OBX~[~{~NTE~}~]~"], ["~NTE~"], ["~FT1~"], ["~CTI~"]]
337
+ # puts mt
338
+ # /(\((?:([^\(\)]*)|(?:\g<2>\g<1>\g<2>)*)\))/
339
+ # m = /(\((?:([^\{\}]*)|(?:\g<2>\g<1>\g<2>)*)\))/.match(o19)
340
+ # p m
341
+ idx = 0
342
+ encodedSegments =[]
343
+ # m = o19.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
344
+ # p m
345
+ # m = /(?=\{((?:[^{}]*|\{\g<1>\})*)\})/.match(o19)
346
+ # p m
347
+
348
+ # while(m = (structure.match(@@segment_patern).to_s))
349
+ abc = o19
350
+ xyz = ''
351
+ m = abc.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
352
+ p m
353
+
354
+ # /(?=\{((?:[^{}]*|\{\g<1>\})*)\})/.match(abc){|it|
355
+ # p it
356
+ # }
357
+
358
+ p o19
359
+ p abc
360
+ puts m
361
+ p m[1]
362
+ m.each{|it|
363
+ # p m.begin
364
+ # p m.end
365
+ p m.first.begin
366
+ p m.first.end
367
+
368
+ mtch = it.first.to_s
369
+ o19.sub!(mtch,idx.to_s)
370
+ encodedSegments << mtch
371
+ idx +=1
372
+ }
373
+ abc = m.post_match
374
+
375
+ m = abc.match(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
376
+ p o19
377
+ p abc
378
+ p m
379
+ p m[1]
380
+ o19.sub!(m[1],idx.to_s)
381
+ encodedSegments << m
382
+ idx +=1
383
+ abc = m.post_match
384
+
385
+ m = abc.match(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
386
+ p o19
387
+ p abc
388
+ p m
389
+ p m[1]
390
+ o19.sub!(m[1],idx.to_s)
391
+ encodedSegments << m
392
+ idx +=1
393
+ abc = m.post_match
394
+
395
+ p '!!!!!!!!!!'
396
+ exit
397
+
398
+ puts '[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'.scan(/[\[\]]/).size()
399
+ puts '[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'.scan(/[\{\}]/).size()
400
+ puts '[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'.scan(/[\{\}\[\]]/).size()
401
+
402
+ puts '[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'.scan(/[\{\}\[\]]/).size().odd?
403
+
404
+ puts '{~ORC~OBR~11~12~13~15~{~25~}'.scan(/[\{\}\[\]]/).size
405
+ puts '{~ORC~OBR~11~12~13~15~{~25~}'.scan(/[\{\}\[\]]/).size.even?
406
+
407
+ m = '{~ORC~OBR~11~12~13~15~{~25~}'
408
+ puts 'MSH~0~10~{~ORC~OBR~11~12~13~15~{~25~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'.scan(/[\[\]]/).size
409
+
410
+
411
+ a25 ='[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'
412
+ a= 'MSH~0~10~{~ORC~OBR~11~12~13~15~{~[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
413
+
414
+ a26 = '{~ORC~OBR~11~12~13~15~{~25~}'
415
+ struct ='MSH~0~10~{~ORC~OBR~11~12~13~15~{~25~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
416
+ b = struct.sub('25',a25)
417
+ puts a
418
+ puts b
419
+ puts a.eql?(b)
420
+
421
+ sq = /[\[\]]/
422
+ crl = /[\{\}]/
423
+ if( a26.scan(sq).size.odd?)
424
+ puts ((a26.scan(/\[/).size - a26.scan(/\]/).size) <0) ?']':'['
425
+ end
426
+
427
+ if( a26.scan(crl).size.odd?)
428
+ puts ((a26.scan(/\{/).size - a26.scan(/\}/).size) <0) ?'{':'}'
429
+ end
430
+
431
+ p '+++++++++++'
432
+ puts struct
433
+
434
+ mt = struct.scan(/(?=\{((?:[^{}]++|\{\g<1>\})++)\})/)
435
+ p mt
436
+ mt = struct.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
437
+ p mt
438
+ mt = /(?=\{((?:[^{}]*|\{\g<1>\})*)\})/.match(struct)
439
+ p mt
440
+
441
+ # mt = /[^{}]*/.match(struct)
442
+ # p mt
443
+ # mt = /(?<={)\*(?=})/.match(struct) #nothing
444
+ # p mt
445
+ # mt = /\{([^\[\]]*)\}/.match(struct) #wrong
446
+ # p mt
447
+
448
+ p '~~~~~~~'
449
+ exit
450
+
451
+ mt = /\[([^\[\]]*)\]|\{([^\[\]]*)\}/.match(struct)
452
+ p mt
453
+ # mt = /(\((?:([^\(\)]*)|(?:(?2)(?1)(?2))*)\))/.match("(a)")
454
+ # http://stackoverflow.com/questions/19486686/recursive-nested-matching-pairs-of-curly-braces-in-ruby-regex
455
+ mt = /(\((?:([^\{\}]*)|(?:\g<1>({\g<1>\})({\g<2>\}))*)\))/.match(struct)
456
+ # (?=\{((?:[^{}]++|\{\g<1>\})++)\})
457
+ p mt
458
+ mt = /\{*\}/.match(struct)
459
+ p mt
460
+ # /(?=\{((?:[^{}]++|\{\g<1>\})++)\})/
461
+ # mt = /(\((?:([^\(\)]*)|(?:(\2)(\1)(\2))*)\))/.match("(a)")
462
+ mt = /(\((?:([^\(\)]*)|(?:(?<out>)(?<in>)(?<out>))*)\))/.match("((c))")
463
+ mt = /(\((?:([^\(\)]*)|(?:\g<2>\g<1>\2<1>)*)\))/.match("((c)a)")
464
+ mt = /(\((?:([^\(\)]*)|(?:\g<2> \g<1> \g<2>)*)\))/.match("(((c)a)v)")
465
+ p mt
466
+ str = "The {quick} brown fox {jumps {over {deep} the} {sfsdf} lazy} dog {sdfsdf {sdfsdf}"
467
+ mt = str.scan(/(?=\{((?:[^{}]++|\{\g<1>\})++)\})/)
468
+ p mt
469
+
470
+ p '============'
471
+
472
+ exit
473
+ idx = b.index(a25)+a25.size
474
+ puts b[idx,b.size]
475
+
476
+ var = 'stac'
477
+ puts /#{var}/.match('haystack')
478
+
479
+ puts /(?<=<b>)\w+(?=<\/b>)/.match("Fortune favours the <b>bold</b>")
480
+ puts /(?<={)\w+(?=})/.match("Fortune favours the {bold}")
481
+ # $~ is equivalent to ::last_match;
482
+ # $& contains the complete matched text;
483
+ # $` contains string before match;
484
+ # $' contains string after match;
485
+ # $1, $2 and so on contain text matching first, second, etc capture group;
486
+ # $+ contains last capture group.
487
+
488
+ m = /s(\w{2}).*(c)/.match('haystack') #=> #<MatchData "stac" 1:"ta" 2:"c">
489
+ puts $~ #=> #<MatchData "stac" 1:"ta" 2:"c">
490
+ puts Regexp.last_match #=> #<MatchData "stac" 1:"ta" 2:"c">
491
+
492
+ puts $& #=> "stac"
493
+ # # same as m[0]
494
+ puts $` #=> "hay"
495
+ # same as m.pre_match
496
+ puts $' #=> "k"
497
+ # # same as m.post_match
498
+ puts $1 #=> "ta"
499
+ # # same as m[1]
500
+ # $2 #=> "c"
501
+ # # same as m[2]
502
+ # $3 #=> nil
503
+ # # no third group in pattern
504
+ # $+ #=> "c"
505
+ # # same as m[-1]
506
+ puts $+
507
+ ex ='[([^\[\]]*)\]|\{([^\[\]]*)\}'
508
+ #(?<={)[[:alnum:]~]+(?=})
509
+ puts Regexp.escape('[]')
510
+ puts Regexp.union(/dogs/, /cats/i)
511
+ puts Regexp.union(/\[([^\[\]]*)\]/,/\{([^\[\]]*)\}/)
512
+ /^[a-z]*$/ === "HELLO" #=> false
513
+ /^[A-Z]*$/ === "HELLO" #=> true
514
+
515
+ /(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ =~ " x = y "
516
+ p lhs #=> "x"
517
+ p rhs #=> "y"
518
+ #metacharacthers (, ), [, ], {, }, ., ?, +, *
519
+ mt = /[cs](..) [cs]\1 in/.match("The cat sat in the hat")
520
+ p mt[1]
521
+ p mt[2]
522
+ p /[aeiou]\w{2}/.match("Caenorhabditis elegans")
523
+ p /([aeiou]\w){2}/.match("Caenorhabditis elegans")
524
+ mt= /I(n)ves(ti)ga\2ons/.match("Investigations")
525
+ p mt[1] + '....' + mt[2]
526
+ mt= /I(?:n)ves(ti)ga\1ons/.match("Investigations")
527
+ p mt[1] + '....' + mt[2].to_s
528
+ # Finds the outermost pair of parentheses. Compatible with any amount of nesting
529
+ #/(\((?:([^\(\)]*)|(?:(?2)(?1)(?2))*)\))/
530
+ # /(\((?:([^\(\)]*)|(?:\g<1>)*)\))/
531
+ # /(?=\{((?:[^{}]++|\{\g<1>\})++)\})/
532
+ # mt = /(\((?:([^\(\)]*)|(?:(\2)(\1)(\2))*)\))/.match("(a)")
533
+ mt = /(\((?:([^\(\)]*)|(?:(?<out>)(?<in>)(?<out>))*)\))/.match("((c))")
534
+ mt = /(\((?:([^\(\)]*)|(?:\g<1>)*)\))/.match("((c))")
535
+ p mt
536
+ p '----------------'
537
+ mt=/\A(?<paren>\(<paren>*\))*\z/ =~ "a()"
538
+ p mt
539
+ # result = a.scan(/(?=\{((?:[^{}]++|\{\g<1>\})++)\})/)
540
+ # p result
541
+
542
+ exit
543
+
544
+ # p = "\\Users\\romansova\\RubymineProjects\\ez7gen-staged\\ez7gen-web\\README.md"
545
+ # p = %w("\Users\romansova\RubymineProjects\ez7gen-staged\ez7gen-web\README.md")
546
+ # puts p.class
547
+ # puts p.gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR)
548
+ p = '\Users\romansova\RubymineProjects\ez7gen-staged\ez7gen-web\README.md'
549
+ p = 'c:\ez7Gen\ez7gen-web\config\resources'
550
+ puts p
551
+ a = p.gsub("\\", '/')
552
+ a = File.join(a, '/schmea/resources/')
553
+ # a = p.gsub(File::ALT_SEPARATOR || File::SEPARATOR, '/')
554
+ puts a
555
+ exit
556
+
557
+ p = "/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web"
558
+ dir, base = File.split(p)
559
+ puts "dir: " + dir
560
+ puts "base:" + base
561
+ puts
562
+
563
+ # path = Pathname.new(p)
564
+ # puts path.realpath()
565
+
566
+ nm = Dir.glob("#{p}*").select {|f| File.directory? f}
567
+ puts nm
568
+ exit
569
+
570
+ time = Time.new
571
+ puts time
572
+ time = Time.new.strftime("%Y%m%d%H%M%S%L")
573
+ puts time
574
+ time = Time.new.strftime("%Y-%m-%d %H:%M:%S.%L")
575
+ puts time
576
+
577
+ # path = Dir.new("/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web/config/schema")
578
+ # p = Dir.glob '/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web/config/**'
579
+ # puts p
580
+ # d = Dir.glob('/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web/config/schema/**').select {|f| File.directory? f}
581
+ # puts d
582
+ # path.each{|it| puts it }
583
+ # path.glob('*').select {|f| File.directory? f}
584
+ dir = '/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web/config/schema/'
585
+ # pn = Pathname.new(dir).children.select { |c| c.directory? }
586
+ # pn = Pathname.new(dir).children.select { |c| c.directory? }
587
+ # names = Pathname.new(dir).children.inject([]) { |files, c| (c.directory? ? (files << c) : files) }
588
+ names = Dir.glob("#{dir}**").select {|f| File.directory? f}#.each{|it| it.sub!(dir,'')}
589
+ # names = Dir.glob(dir<<'/**').inject([]){|files,f| (f.directory? ? (files<<f) : files)}
590
+ puts names
591
+
592
+
593
+ exit
594
+
595
+
596
+ h = { "apple tree" => "plant", "ficus" => "plant",
597
+ "shrew" => "animal", "plesiosaur" => "animal" }
598
+ p h.keys.grep /p/
599
+ # => ["apple tree", "plesiosaur"]
600
+ p h.inject([]) { |res, kv| res << kv if kv[1] =~ /p/; res }
601
+ exit
602
+ # => [["ficus", "plant"], ["apple tree", "plant"]]
603
+ p "[~{~PR1~10~}~]".split(/[~\{\[\}\]]/)
604
+ p "[~{~PR1~10~}~]".split(%r|{.*}|)
605
+ # p a
606
+
607
+ begin
608
+ a/0
609
+ rescue => e
610
+ raise e
611
+ puts 'in rescue'
612
+ puts e
613
+ ensure
614
+ puts 'in ensure'
615
+ end
616
+
617
+ puts 'end'
618
+
619
+ puts '%.2f' % 515.0
620
+ file = File.open('../lib/ez7gen/resources/properties.yml')
621
+ yml = YAML::load(file)
622
+ puts yml['person.names.last'][0] # juixe-username
623
+ # yml['user'] # juixe-username
624
+ puts yml['bar']
625
+
626
+ puts yml['bar'].to_a.sample(1).to_h
627
+
628
+ pair = yml['codes.allergens'].to_a.sample(1).to_h
629
+ p pair.first
630
+
631
+ # @@MONEY_FORMAT_INDICATORS = ['Money', 'Balance', 'Charge', 'Adjustment', 'Income', 'Amount', 'Payment','Cost']
632
+ reg = /\bMoney\b|\bBalance\b|\bCharge|\bAdjustment\b|\bIncome\b|\bAmount\b|\bPayment\b|\bCost\b/
633
+
634
+ str = 'Total Charges'
635
+ # exp = /\bMoney\b|\bBalance\b/
636
+ case str
637
+ # when /\bMoney\b|\bBalance\b|\bCharge\b|\bAdjustment\b|\bIncome\b|\bAmount\b|\bPayment\b|\bCost\b/
638
+ when reg
639
+ puts 'when'
640
+ else
641
+ puts 'else'
642
+ end
643
+
644
+
645
+
646
+ puts 'base:MSH'.delete(':base')
647
+ if('[~{~ZMH~}~]'=~/\~Z/)
648
+ puts 'ok!'
649
+ end
650
+ # arr = [6,2, 5]
651
+ # p arr.find_index{|it| it>13}
652
+ #
653
+ # arr = ['1','a','3','4','b','5','6','c','7']
654
+ # p arr.delete_if{|it| it.is}
655
+ #
656
+ # p ['1','a','3','4','b','5','6','c','7'].index(arr)
657
+ # # p arr.delete_if{|it| it.is}
658
+
659
+ if("Hello"=~/^[A-Z][a-z]+$/)
660
+ puts 'ok'
661
+ end
662
+
663
+ exit
664
+ code =nil
665
+ code ||='bla'
666
+ puts code
667
+ exit
668
+ yml = YAML.load_file 'properties.yml'
669
+ puts yml['person.names.first'][0]
670
+ puts yml['address.streetNames']
671
+
672
+ #yml.each_pair { |key, value| puts "#{key} = #{value}" }
673
+
674
+ #puts yml['juixe']['user'] # juixe-username
675
+
676
+ exit
677
+ puts "Result is %.2f" % 1000
678
+ mfi = ['Balance', 'Charges', 'Adjustments', 'Income', 'Amount', 'Money']
679
+ puts mfi.include?('Balance')
680
+
681
+ h1 = { "a" => 100, "b" => 200, 'c' => "c" }
682
+ p h1.update({'a' => 11,'b'=>2 })
683
+ exit
684
+ line = "100,200,300"
685
+
686
+ # Split on the comma char.
687
+ values = line.split(",")
688
+ puts values
689
+
690
+ line = "[max_length:250, description:Organization Unit Type - ROL, ifrepeating:0, datatype:CE, required:O, piece:10, codetable:406]"
691
+ values = line.gsub(/(\[|\])/,'').gsub(':',',').split(',').map{|it| it.strip()}.each_slice(2).to_a.to_h
692
+
693
+
694
+ #values = line.gssplit(",")
695
+ puts values
696
+ puts '_______'
697
+
698
+
699
+ exit
700
+ val =[]
701
+ val << '200'
702
+ val<<'abc'<<'123'
703
+ p val
704
+ puts val.join('|')
705
+ exit
706
+
707
+ # file = File.open('properties.yml')
708
+ # yml = YAML::load(file)
709
+ # puts puts yml['juixe']['user'] # juixe-username
710
+ # yml['user'] # juixe-username
711
+ # exit
712
+
713
+ yml = YAML.load_file 'properties.yml'
714
+ puts yml['person.names.first'][0]
715
+ puts yml['address.streetNames']
716
+
717
+ #yml.each_pair { |key, value| puts "#{key} = #{value}" }
718
+
719
+ #puts yml['juixe']['user'] # juixe-username
720
+
721
+ #exit
722
+
723
+ map = {'required'=>'X'}
724
+ check = if(['X','W','B'].include?(map['required'])) then true end
725
+ puts check
726
+ puts "~~~~~~~~~~"
727
+
728
+ map = {'required'=>'A'}
729
+ check = if(['X','W','B'].include?(map['required'])) then true end
730
+ puts check
731
+ exit
732
+
733
+ code, description = 'bla', 'bla1'
734
+ puts code + " " + description
735
+ puts"1".to_i
736
+
737
+ codes =
738
+ 1.times do |i|
739
+ puts i
740
+ end
741
+ codes = []
742
+ codes << {'a'=>1, 'b'=>1, 'c'=>3}
743
+ codes << {'a'=>10, 'b'=>11, 'c'=>12}
744
+ codes << {'a'=>20, 'b'=>21, 'c'=>23}
745
+
746
+ puts codes
747
+ puts "------------"
748
+ codes.select! {|map| map['a'] > 5 }
749
+ puts codes
750
+
751
+ puts codes.include?('a')
752
+ puts codes.find('a')
753
+
754
+ range = 1..5
755
+ range.each {|it| puts it}
756
+
757
+ ends = '1...12'.split('...').map{|d| d}
758
+ range = ends[0]..ends[1]
759
+ range.each {|it| puts it}
760
+ #puts 'E1 ... E9'.strip(' ')
761
+ puts 'E1 ... E9'.delete(' ')
762
+
763
+ ends = 'E1 ... E9'.delete(' ').split('...').map{|it| it}
764
+ range = ends[0]..ends[1]
765
+ range.each {|it| puts it}
766
+
767
+ ends = '...'.delete(' ').split('...').map{|it| it}
768
+ puts ends.length
769
+
770
+ @random = Random.new
771
+ json = '{
772
+ "APPL_MD_PATH": "",
773
+ "APPL_PHYSICAL_PATH": "",
774
+ "AUTH_PASSWORD": "",
775
+ "AUTH_TYPE": "",
776
+ "AUTH_USER": "",
777
+ "CERT_COOKIE": "",
778
+ "CERT_FLAGS": "",
779
+ "CERT_ISSUER": "",
780
+ "CERT_KEYSIZE": "",
781
+ "CERT_SECRETKEYSIZE": "",
782
+ "CERT_SERIALNUMBER": "",
783
+ "CERT_SERVER_ISSUER": "",
784
+ "CERT_SERVER_SUBJECT": "",
785
+ "CERT_SUBJECT": "",
786
+ "CONTENT_LENGTH": "",
787
+ "CONTENT_TYPE": "",
788
+ "GATEWAY_INTERFACE": "",
789
+ "HTTPS": "",
790
+ "HTTPS_KEYSIZE": "",
791
+ "HTTPS_SECRETKEYSIZE": "",
792
+ "HTTPS_SERVER_ISSUER": "",
793
+ "HTTPS_SERVER_SUBJECT": "",
794
+ "INSTANCE_ID": "",
795
+ "INSTANCE_META_PATH": "",
796
+ "LOCAL_ADDR": "",
797
+ "LOGON_USER": "",
798
+ "PATH_INFO": "",
799
+ "PATH_TRANSLATED": "",
800
+ "QUERY_STRING": "",
801
+ "REMOTE_ADDR": "",
802
+ "REMOTE_HOST": "",
803
+ "REMOTE_USER": "",
804
+ "REQUEST_METHOD": "",
805
+ "SCRIPT_NAME": "",
806
+ "SERVER_NAME": "",
807
+ "SERVER_PORT": "",
808
+ "SERVER_PORT_SECURE": "",
809
+ "SERVER_PROTOCOL": "",
810
+ "SERVER_SOFTWARE": "",
811
+ "URL": "",
812
+ "HTTP_CONNECTION": "",
813
+ "HTTP_ACCEPT": "",
814
+ "HTTP_ACCEPT_LANGUAGE": "",
815
+ "HTTP_COOKIE": "",
816
+ "HTTP_HOST": "",
817
+ "HTTP_REFERER": "",
818
+ "HTTP_USER_AGENT": "",
819
+ "HTTP_DNT": "",
820
+ "HTTP_WL_PROXY_SSL": "",
821
+ "HTTP_SM_LOCATION": "",
822
+ "HTTP_SM_LOCATION_UNPARSED": "",
823
+ "HTTP_SERVER_PROTOCOL": "",
824
+ "HTTP_SM_TRANSACTIONID": "",
825
+ "HTTP_SERVER_PORT": "",
826
+ "HTTP_REQUEST_METHOD": "",
827
+ "HTTP_SM_SDOMAIN": "",
828
+ "HTTP_SM_REALM": "",
829
+ "HTTP_SM_REALMOID": "",
830
+ "HTTP_SM_AUTHTYPE": "",
831
+ "HTTP_SM_AUTHREASON": "",
832
+ "HTTP_SM_SESSIONDRIFT": "",
833
+ "HTTP_SM_UNIVERSALID": "",
834
+ "HTTP_SM_AUTHDIROID": "",
835
+ "HTTP_SM_AUTHDIRNAME": "",
836
+ "HTTP_SM_AUTHDIRSERVER": "",
837
+ "HTTP_SM_AUTHDIRNAMESPACE": "",
838
+ "HTTP_SM_USER": "",
839
+ "HTTP_SM_USERDN": "",
840
+ "HTTP_SM_SERVERSESSIONID": "",
841
+ "HTTP_SM_SERVERSESSIONSPEC": "",
842
+ "HTTP_SM_TIMETOEXPIRE": "",
843
+ "HTTP_SM_SERVERIDENTITYSPEC": "",
844
+ "HTTP_SESSIONSCOPE": "",
845
+ "HTTP_ADSAMACCOUNTNAME": "",
846
+ "HTTP_VAUID": "",
847
+ "HTTP_DODEDIPNID": "",
848
+ "HTTP_FIRSTNAME": "",
849
+ "HTTP_ADEMAIL": "",
850
+ "HTTP_ORGANIZATIONID": "",
851
+ "HTTP_ASSURLEVEL": "",
852
+ "HTTP_ORGANIZATION": "",
853
+ "HTTP_PROOFINGAUTH": "",
854
+ "HTTP_SSOI_LOGOUT": "",
855
+ "HTTP_ROLE": "",
856
+ "HTTP_VISTAID": "",
857
+ "HTTP_MVIICN": "",
858
+ "HTTP_ISSUEINSTANT": "",
859
+ "HTTP_VISTAIDRAW": "",
860
+ "HTTP_AUTHNTYPE": "",
861
+ "HTTP_ADUPN": "",
862
+ "HTTP_TRANSACTIONID": "",
863
+ "HTTP_LASTNAME": "",
864
+ "HTTP_ADDOMAIN": "",
865
+ "HTTP_SECID": ""
866
+ }'
867
+
868
+ 50.times{
869
+ parsed = JSON.parse(json)
870
+ a = []
871
+ parsed.each{|it|
872
+ # p @random.rand(100000000).to_s
873
+ a << {it[0] => @random.rand(100000000000000).to_s}
874
+ }
875
+ # p parsed
876
+ str = a.to_json
877
+ puts str
878
+ }
879
+
880
+ exit;